@frontegg/nextjs 6.7.20 → 6.7.21-alpha.4441971157

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (259) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/README.md +19 -37
  3. package/api/index.d.ts +19 -0
  4. package/api/index.js +87 -0
  5. package/api/index.js.map +1 -0
  6. package/api/package.json +6 -0
  7. package/api/urls.d.ts +33 -0
  8. package/api/urls.js +56 -0
  9. package/api/urls.js.map +1 -0
  10. package/api/utils.d.ts +46 -0
  11. package/api/utils.js +123 -0
  12. package/api/utils.js.map +1 -0
  13. package/app/ClientFronteggProvider.d.ts +3 -0
  14. package/app/ClientFronteggProvider.js +32 -0
  15. package/app/ClientFronteggProvider.js.map +1 -0
  16. package/app/FronteggAppProvider.d.ts +4 -0
  17. package/app/FronteggAppProvider.js +25 -0
  18. package/app/FronteggAppProvider.js.map +1 -0
  19. package/{client → app}/FronteggAppRouter.d.ts +11 -10
  20. package/app/FronteggAppRouter.js +38 -0
  21. package/app/FronteggAppRouter.js.map +1 -0
  22. package/app/helpers.d.ts +5 -0
  23. package/app/helpers.js +43 -0
  24. package/app/helpers.js.map +1 -0
  25. package/app/index.d.ts +4 -0
  26. package/app/index.js +39 -0
  27. package/app/index.js.map +1 -0
  28. package/app/package.json +6 -0
  29. package/common/{client/AppContext.d.ts → AppContext.d.ts} +4 -4
  30. package/common/AppContext.js +12 -0
  31. package/common/AppContext.js.map +1 -0
  32. package/{AuthorizedContent.d.ts → common/AuthorizedContent.d.ts} +9 -8
  33. package/common/AuthorizedContent.js +54 -0
  34. package/common/AuthorizedContent.js.map +1 -0
  35. package/common/{client/FronteggBaseProvider.d.ts → FronteggBaseProvider.d.ts} +3 -3
  36. package/common/FronteggBaseProvider.js +76 -0
  37. package/common/FronteggBaseProvider.js.map +1 -0
  38. package/common/FronteggRouterBase.d.ts +9 -0
  39. package/common/FronteggRouterBase.js +48 -0
  40. package/common/FronteggRouterBase.js.map +1 -0
  41. package/common/helpers.d.ts +3 -9
  42. package/common/helpers.js +32 -0
  43. package/common/helpers.js.map +1 -0
  44. package/common/index.d.ts +4 -6
  45. package/common/index.js +45 -10
  46. package/common/index.js.map +1 -1
  47. package/common/package.json +6 -0
  48. package/common/useRequestAuthorizeSSR.d.ts +5 -0
  49. package/common/useRequestAuthorizeSSR.js +30 -0
  50. package/common/useRequestAuthorizeSSR.js.map +1 -0
  51. package/config/constants.d.ts +57 -0
  52. package/config/constants.js +20 -0
  53. package/config/constants.js.map +1 -0
  54. package/config/helpers.d.ts +28 -0
  55. package/config/helpers.js +97 -0
  56. package/config/helpers.js.map +1 -0
  57. package/config/index.d.ts +24 -0
  58. package/config/index.js +94 -0
  59. package/config/index.js.map +1 -0
  60. package/config/package.json +6 -0
  61. package/config/types.d.ts +18 -0
  62. package/config/types.js +6 -0
  63. package/config/types.js.map +1 -0
  64. package/edge/getSessionOnEdge.d.ts +3 -2
  65. package/edge/getSessionOnEdge.js +16 -0
  66. package/edge/getSessionOnEdge.js.map +1 -0
  67. package/edge/index.d.ts +3 -2
  68. package/edge/index.js +38 -63
  69. package/edge/index.js.map +1 -1
  70. package/edge/package.json +6 -0
  71. package/edge/redirectToLogin.d.ts +2 -0
  72. package/edge/redirectToLogin.js +16 -0
  73. package/edge/redirectToLogin.js.map +1 -0
  74. package/edge/shouldBypassMiddleware.d.ts +21 -7
  75. package/edge/shouldBypassMiddleware.js +50 -0
  76. package/edge/shouldBypassMiddleware.js.map +1 -0
  77. package/index.d.ts +7 -11
  78. package/index.js +98 -1392
  79. package/index.js.map +1 -1
  80. package/middleware/FronteggApiMiddleware.d.ts +8 -0
  81. package/middleware/FronteggApiMiddleware.js +34 -0
  82. package/middleware/FronteggApiMiddleware.js.map +1 -0
  83. package/middleware/FronteggProxy.d.ts +4 -0
  84. package/middleware/FronteggProxy.js +31 -0
  85. package/middleware/FronteggProxy.js.map +1 -0
  86. package/middleware/ProxyRequestCallback.d.ts +13 -0
  87. package/middleware/ProxyRequestCallback.js +56 -0
  88. package/middleware/ProxyRequestCallback.js.map +1 -0
  89. package/middleware/ProxyResponseCallback.d.ts +13 -0
  90. package/middleware/ProxyResponseCallback.js +111 -0
  91. package/middleware/ProxyResponseCallback.js.map +1 -0
  92. package/middleware/constants.d.ts +8 -0
  93. package/middleware/constants.js +17 -0
  94. package/middleware/constants.js.map +1 -0
  95. package/{common/FronteggProxy.d.ts → middleware/helpers.d.ts} +13 -26
  96. package/middleware/helpers.js +42 -0
  97. package/middleware/helpers.js.map +1 -0
  98. package/middleware/index.d.ts +23 -0
  99. package/middleware/index.js +13 -0
  100. package/middleware/index.js.map +1 -0
  101. package/middleware/package.json +6 -0
  102. package/no-ssr/ExpireInListener.d.ts +2 -0
  103. package/no-ssr/ExpireInListener.js +29 -0
  104. package/no-ssr/ExpireInListener.js.map +1 -0
  105. package/{FronteggProviderNoSSR.d.ts → no-ssr/FronteggProviderNoSSR.d.ts} +4 -4
  106. package/no-ssr/FronteggProviderNoSSR.js +84 -0
  107. package/no-ssr/FronteggProviderNoSSR.js.map +1 -0
  108. package/no-ssr/index.d.ts +2 -0
  109. package/no-ssr/index.js +13 -0
  110. package/no-ssr/index.js.map +1 -0
  111. package/no-ssr/package.json +6 -0
  112. package/package.json +6 -7
  113. package/pages/FronteggPagesProvider/index.d.ts +4 -0
  114. package/pages/FronteggPagesProvider/index.js +32 -0
  115. package/pages/FronteggPagesProvider/index.js.map +1 -0
  116. package/pages/FronteggPagesProvider/package.json +6 -0
  117. package/{FronteggRouter.d.ts → pages/FronteggRouter/FronteggRouter.d.ts} +6 -5
  118. package/pages/FronteggRouter/FronteggRouter.js +46 -0
  119. package/pages/FronteggRouter/FronteggRouter.js.map +1 -0
  120. package/pages/FronteggRouter/index.d.ts +26 -0
  121. package/pages/FronteggRouter/index.js +19 -0
  122. package/pages/FronteggRouter/index.js.map +1 -0
  123. package/pages/FronteggRouter/package.json +6 -0
  124. package/{session.d.ts → pages/helpers.d.ts} +10 -10
  125. package/pages/helpers.js +40 -0
  126. package/pages/helpers.js.map +1 -0
  127. package/pages/index.d.ts +3 -0
  128. package/pages/index.js +47 -0
  129. package/pages/index.js.map +1 -0
  130. package/pages/package.json +6 -0
  131. package/pages/withFronteggApp/index.d.ts +2 -0
  132. package/pages/withFronteggApp/index.js +13 -0
  133. package/pages/withFronteggApp/index.js.map +1 -0
  134. package/pages/withFronteggApp/package.json +6 -0
  135. package/pages/withFronteggApp/types.d.ts +12 -0
  136. package/pages/withFronteggApp/types.js +6 -0
  137. package/pages/withFronteggApp/types.js.map +1 -0
  138. package/pages/withFronteggApp/withFronteggApp.d.ts +2 -0
  139. package/pages/withFronteggApp/withFronteggApp.js +70 -0
  140. package/pages/withFronteggApp/withFronteggApp.js.map +1 -0
  141. package/sdkVersion.d.ts +4 -4
  142. package/sdkVersion.js +11 -0
  143. package/sdkVersion.js.map +1 -0
  144. package/{common/types.d.ts → types/index.d.ts} +80 -74
  145. package/types/index.js +6 -0
  146. package/types/index.js.map +1 -0
  147. package/types/package.json +6 -0
  148. package/utils/common/constants.d.ts +12 -0
  149. package/utils/common/constants.js +23 -0
  150. package/utils/common/constants.js.map +1 -0
  151. package/utils/common/index.d.ts +15 -0
  152. package/utils/common/index.js +32 -0
  153. package/utils/common/index.js.map +1 -0
  154. package/utils/common/package.json +6 -0
  155. package/utils/cookies/constants.d.ts +7 -0
  156. package/utils/cookies/constants.js +15 -0
  157. package/utils/cookies/constants.js.map +1 -0
  158. package/utils/cookies/helpers.d.ts +25 -0
  159. package/utils/cookies/helpers.js +64 -0
  160. package/utils/cookies/helpers.js.map +1 -0
  161. package/utils/cookies/index.d.ts +45 -0
  162. package/utils/cookies/index.js +239 -0
  163. package/utils/cookies/index.js.map +1 -0
  164. package/utils/cookies/package.json +6 -0
  165. package/utils/cookies/serializer.d.ts +22 -0
  166. package/utils/cookies/serializer.js +161 -0
  167. package/utils/cookies/serializer.js.map +1 -0
  168. package/utils/cookies/types.d.ts +31 -0
  169. package/utils/cookies/types.js +6 -0
  170. package/utils/cookies/types.js.map +1 -0
  171. package/utils/createSession/index.d.ts +2 -0
  172. package/utils/createSession/index.js +51 -0
  173. package/utils/createSession/index.js.map +1 -0
  174. package/utils/createSession/package.json +6 -0
  175. package/utils/encryption/index.d.ts +3 -0
  176. package/utils/encryption/index.js +37 -0
  177. package/utils/encryption/index.js.map +1 -0
  178. package/utils/encryption/package.json +6 -0
  179. package/utils/encryption-edge/index.d.ts +3 -0
  180. package/utils/encryption-edge/index.js +37 -0
  181. package/utils/encryption-edge/index.js.map +1 -0
  182. package/utils/encryption-edge/package.json +6 -0
  183. package/utils/errors/FronteggEnvNotFound.d.ts +3 -0
  184. package/utils/errors/FronteggEnvNotFound.js +15 -0
  185. package/utils/errors/FronteggEnvNotFound.js.map +1 -0
  186. package/utils/errors/InvalidFronteggEnv.d.ts +3 -0
  187. package/utils/errors/InvalidFronteggEnv.js +15 -0
  188. package/utils/errors/InvalidFronteggEnv.js.map +1 -0
  189. package/utils/errors/index.d.ts +2 -0
  190. package/utils/errors/index.js +28 -0
  191. package/utils/errors/index.js.map +1 -0
  192. package/utils/errors/package.json +6 -0
  193. package/utils/fetchUserData/index.d.ts +7 -0
  194. package/utils/fetchUserData/index.js +56 -0
  195. package/utils/fetchUserData/index.js.map +1 -0
  196. package/utils/fetchUserData/package.json +6 -0
  197. package/utils/fronteggLogger/constants.d.ts +13 -0
  198. package/utils/fronteggLogger/constants.js +28 -0
  199. package/utils/fronteggLogger/constants.js.map +1 -0
  200. package/utils/fronteggLogger/index.d.ts +17 -0
  201. package/utils/fronteggLogger/index.js +67 -0
  202. package/utils/fronteggLogger/index.js.map +1 -0
  203. package/utils/fronteggLogger/package.json +6 -0
  204. package/{common/client/createOrGetFronteggApp.d.ts → utils/initializeFronteggApp/index.d.ts} +11 -11
  205. package/utils/initializeFronteggApp/index.js +108 -0
  206. package/utils/initializeFronteggApp/index.js.map +1 -0
  207. package/utils/initializeFronteggApp/package.json +6 -0
  208. package/utils/jwt/index.d.ts +22 -0
  209. package/utils/jwt/index.js +61 -0
  210. package/utils/jwt/index.js.map +1 -0
  211. package/utils/jwt/package.json +6 -0
  212. package/utils/refreshAccessToken/helpers.d.ts +16 -0
  213. package/utils/refreshAccessToken/helpers.js +80 -0
  214. package/utils/refreshAccessToken/helpers.js.map +1 -0
  215. package/utils/refreshAccessToken/index.d.ts +9 -0
  216. package/utils/refreshAccessToken/index.js +94 -0
  217. package/utils/refreshAccessToken/index.js.map +1 -0
  218. package/utils/refreshAccessToken/package.json +6 -0
  219. package/utils/routing/index.d.ts +5 -0
  220. package/utils/routing/index.js +31 -0
  221. package/utils/routing/index.js.map +1 -0
  222. package/utils/routing/package.json +6 -0
  223. package/utils/useOnRedirectTo/index.d.ts +5 -0
  224. package/utils/useOnRedirectTo/index.js +28 -0
  225. package/utils/useOnRedirectTo/index.js.map +1 -0
  226. package/utils/useOnRedirectTo/package.json +6 -0
  227. package/CookieManager-e50dc144.js +0 -322
  228. package/CookieManager-e50dc144.js.map +0 -1
  229. package/FronteggClientProviderNext13-b3c1e7a0.js +0 -158
  230. package/FronteggClientProviderNext13-b3c1e7a0.js.map +0 -1
  231. package/FronteggMiddleware.d.ts +0 -15
  232. package/FronteggProvider.d.ts +0 -3
  233. package/api-25516652.js +0 -58
  234. package/api-25516652.js.map +0 -1
  235. package/client/FronteggClientProviderNext13.d.ts +0 -3
  236. package/client/index.d.ts +0 -2
  237. package/client/index.js +0 -64
  238. package/client/index.js.map +0 -1
  239. package/common/CookieManager.d.ts +0 -41
  240. package/common/FronteggConfig.d.ts +0 -31
  241. package/common/api.d.ts +0 -3
  242. package/common/client/ExpireInListener.d.ts +0 -2
  243. package/common/client/hooks/index.d.ts +0 -1
  244. package/common/client/hooks/useRequestAuthorizeSSR.d.ts +0 -5
  245. package/common/client/index.d.ts +0 -4
  246. package/common/consts.d.ts +0 -6
  247. package/common/createGetSession.d.ts +0 -7
  248. package/common/utils.d.ts +0 -1
  249. package/createGetSession-2e1e4506.js +0 -50
  250. package/createGetSession-2e1e4506.js.map +0 -1
  251. package/helpers-dac37998.js +0 -88
  252. package/helpers-dac37998.js.map +0 -1
  253. package/refreshToken.d.ts +0 -3
  254. package/server/FronteggProviderNext13.d.ts +0 -3
  255. package/server/getSessionNext13.d.ts +0 -4
  256. package/server/index.d.ts +0 -2
  257. package/server/index.js +0 -84
  258. package/server/index.js.map +0 -1
  259. package/withFronteggApp.d.ts +0 -11
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":["JwtUtils","publicKey","loadPublicKey","logger","fronteggLogger","child","tag","JSON","parse","config","jwtPublicKeyJson","info","e","api","importJWK","alg","getPublicKey","undefined","verify","jwt","jwtVerify"],"sources":["../../../../../packages/nextjs/src/utils/jwt/index.ts"],"sourcesContent":["import type { KeyLike } from 'jose';\nimport { importJWK, jwtVerify } from 'jose';\nimport api from '../../api';\nimport type { JWTVerifyResult } from 'jose/dist/types/types';\nimport fronteggLogger from '../fronteggLogger';\nimport config from '../../config';\n\nclass JwtUtils {\n private publicKey: (KeyLike | Uint8Array) | undefined;\n\n /**\n * Get the JWT public key from Frontegg service\n * to verify user's access token when calling getSession\n * in getServerSideProps and ServerComponents\n * @private\n */\n private async loadPublicKey(): Promise<KeyLike | Uint8Array> {\n const logger = fronteggLogger.child({ tag: 'JwtManager.loadPublicKey' });\n\n let publicKey;\n try {\n publicKey = JSON.parse(config.jwtPublicKeyJson ?? '{}');\n logger.info('Public key loaded from env variable');\n } catch (e) {\n logger.info('Going to load public key from frontegg jwks');\n publicKey = await api.loadPublicKey();\n }\n logger.info('Importing Public key into jose');\n this.publicKey = await importJWK(publicKey, publicKey.alg);\n return this.publicKey;\n }\n\n /**\n * Load public key from Frontegg services if not cached\n * @private\n */\n private async getPublicKey(): Promise<KeyLike | Uint8Array> {\n if (this.publicKey === undefined) {\n return await this.loadPublicKey();\n }\n return this.publicKey;\n }\n\n /**\n * verify JWT token with current loaded public key from Frontegg services\n */\n async verify(jwt: string | Uint8Array): Promise<JWTVerifyResult> {\n const publicKey = await this.getPublicKey();\n return await jwtVerify(jwt, publicKey);\n }\n}\n\nexport default new JwtUtils();\n"],"mappings":";;;;;;;AACA;AACA;AAEA;AACA;AAEA,MAAMA,QAAQ,CAAC;EAAA;IAAA,KACLC,SAAS;EAAA;EAEjB;AACF;AACA;AACA;AACA;AACA;EACE,MAAcC,aAAa,GAAkC;IAC3D,MAAMC,MAAM,GAAGC,uBAAc,CAACC,KAAK,CAAC;MAAEC,GAAG,EAAE;IAA2B,CAAC,CAAC;IAExE,IAAIL,SAAS;IACb,IAAI;MAAA;MACFA,SAAS,GAAGM,IAAI,CAACC,KAAK,0BAACC,eAAM,CAACC,gBAAgB,oCAAI,IAAI,CAAC;MACvDP,MAAM,CAACQ,IAAI,CAAC,qCAAqC,CAAC;IACpD,CAAC,CAAC,OAAOC,CAAC,EAAE;MACVT,MAAM,CAACQ,IAAI,CAAC,6CAA6C,CAAC;MAC1DV,SAAS,GAAG,MAAMY,YAAG,CAACX,aAAa,EAAE;IACvC;IACAC,MAAM,CAACQ,IAAI,CAAC,gCAAgC,CAAC;IAC7C,IAAI,CAACV,SAAS,GAAG,MAAM,IAAAa,eAAS,EAACb,SAAS,EAAEA,SAAS,CAACc,GAAG,CAAC;IAC1D,OAAO,IAAI,CAACd,SAAS;EACvB;;EAEA;AACF;AACA;AACA;EACE,MAAce,YAAY,GAAkC;IAC1D,IAAI,IAAI,CAACf,SAAS,KAAKgB,SAAS,EAAE;MAChC,OAAO,MAAM,IAAI,CAACf,aAAa,EAAE;IACnC;IACA,OAAO,IAAI,CAACD,SAAS;EACvB;;EAEA;AACF;AACA;EACE,MAAMiB,MAAM,CAACC,GAAwB,EAA4B;IAC/D,MAAMlB,SAAS,GAAG,MAAM,IAAI,CAACe,YAAY,EAAE;IAC3C,OAAO,MAAM,IAAAI,eAAS,EAACD,GAAG,EAAElB,SAAS,CAAC;EACxC;AACF;AAAC,eAEc,IAAID,QAAQ,EAAE;AAAA"}
@@ -0,0 +1,6 @@
1
+ {
2
+ "sideEffects": false,
3
+ "module": "./index.js",
4
+ "main": "./index.js",
5
+ "types": "./index.d.ts"
6
+ }
@@ -0,0 +1,16 @@
1
+ import { IncomingMessage } from 'http';
2
+ export declare function hasRefreshTokenCookie(cookies: Record<string, any>): boolean;
3
+ export declare function refreshAccessTokenEmbedded(request: IncomingMessage): Promise<Response | null>;
4
+ export declare function refreshAccessTokenHostedLogin(request: IncomingMessage): Promise<Response | null>;
5
+ /**
6
+ * If url starts with /_next/ means that the user trying to navigate
7
+ * to a new nextjs page, in this scenario no need to refresh token
8
+ * we can just return the actual stateless session from
9
+ * the encrypted cookie
10
+ */
11
+ export declare function isRuntimeNextRequest(url: string): boolean;
12
+ /**
13
+ * If url starts with '/oauth/callback' means that the user navigated back
14
+ * from frontegg hosted login, in this scenario no need to refresh token
15
+ */
16
+ export declare function isOauthCallback(url: string): boolean;
@@ -0,0 +1,80 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.hasRefreshTokenCookie = hasRefreshTokenCookie;
8
+ exports.isOauthCallback = isOauthCallback;
9
+ exports.isRuntimeNextRequest = isRuntimeNextRequest;
10
+ exports.refreshAccessTokenEmbedded = refreshAccessTokenEmbedded;
11
+ exports.refreshAccessTokenHostedLogin = refreshAccessTokenHostedLogin;
12
+ var _fronteggLogger = _interopRequireDefault(require("../fronteggLogger"));
13
+ var _cookies = _interopRequireDefault(require("../cookies"));
14
+ var _api = _interopRequireDefault(require("../../api"));
15
+ var _common = require("../../common");
16
+ function hasRefreshTokenCookie(cookies) {
17
+ const logger = _fronteggLogger.default.child({
18
+ tag: 'refreshToken.hasRefreshTokenCookie'
19
+ });
20
+ const refreshTokenKey = _cookies.default.refreshTokenKey;
21
+ logger.debug(`Checking if '${refreshTokenKey}' exists in cookies`);
22
+ const cookieKey = Object.keys(cookies).find(cookie => {
23
+ return cookie.replace(/-/g, '') === refreshTokenKey;
24
+ });
25
+ const exists = cookieKey != null;
26
+ logger.debug(`Cookie '${refreshTokenKey}' ${exists ? 'exists' : 'NOT exists'} in cookies`);
27
+ return exists;
28
+ }
29
+ async function refreshAccessTokenEmbedded(request) {
30
+ const logger = _fronteggLogger.default.child({
31
+ tag: 'refreshToken.refreshAccessTokenEmbedded'
32
+ });
33
+ const headers = request.headers;
34
+ const cookies = request.cookies;
35
+ logger.info('check if has refresh token headers');
36
+ if (hasRefreshTokenCookie(cookies)) {
37
+ logger.info('going to refresh token (embedded mode)');
38
+ return await _api.default.refreshTokenEmbedded(headers);
39
+ }
40
+ return null;
41
+ }
42
+ async function refreshAccessTokenHostedLogin(request) {
43
+ const logger = _fronteggLogger.default.child({
44
+ tag: 'refreshToken.refreshAccessTokenHostedLogin'
45
+ });
46
+ const headers = request.headers;
47
+ logger.info('trying to get token from cookies');
48
+ const sealFromCookies = _cookies.default.getSessionCookieFromRequest(request);
49
+ try {
50
+ const tokens = await (0, _common.getTokensFromCookie)(sealFromCookies);
51
+ if (!(tokens != null && tokens.refreshToken)) {
52
+ logger.info('refresh token not found');
53
+ return null;
54
+ }
55
+ logger.info('going to refresh token (hosted-login mode)');
56
+ return await _api.default.refreshTokenHostedLogin(headers, tokens.refreshToken);
57
+ } catch (e) {
58
+ logger.error(e);
59
+ return null;
60
+ }
61
+ }
62
+
63
+ /**
64
+ * If url starts with /_next/ means that the user trying to navigate
65
+ * to a new nextjs page, in this scenario no need to refresh token
66
+ * we can just return the actual stateless session from
67
+ * the encrypted cookie
68
+ */
69
+ function isRuntimeNextRequest(url) {
70
+ return url.startsWith('/_next/');
71
+ }
72
+
73
+ /**
74
+ * If url starts with '/oauth/callback' means that the user navigated back
75
+ * from frontegg hosted login, in this scenario no need to refresh token
76
+ */
77
+ function isOauthCallback(url) {
78
+ return url.startsWith('/oauth/callback');
79
+ }
80
+ //# sourceMappingURL=helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.js","names":["hasRefreshTokenCookie","cookies","logger","fronteggLogger","child","tag","refreshTokenKey","CookieManager","debug","cookieKey","Object","keys","find","cookie","replace","exists","refreshAccessTokenEmbedded","request","headers","info","api","refreshTokenEmbedded","refreshAccessTokenHostedLogin","sealFromCookies","getSessionCookieFromRequest","tokens","getTokensFromCookie","refreshToken","refreshTokenHostedLogin","e","error","isRuntimeNextRequest","url","startsWith","isOauthCallback"],"sources":["../../../../../packages/nextjs/src/utils/refreshAccessToken/helpers.ts"],"sourcesContent":["import fronteggLogger from '../fronteggLogger';\nimport CookieManager from '../cookies';\nimport { NextApiRequest } from 'next/dist/shared/lib/utils';\nimport api from '../../api';\nimport { getTokensFromCookie } from '../../common';\nimport { IncomingMessage } from 'http';\n\nexport function hasRefreshTokenCookie(cookies: Record<string, any>): boolean {\n const logger = fronteggLogger.child({ tag: 'refreshToken.hasRefreshTokenCookie' });\n const refreshTokenKey = CookieManager.refreshTokenKey;\n logger.debug(`Checking if '${refreshTokenKey}' exists in cookies`);\n const cookieKey = Object.keys(cookies).find((cookie) => {\n return cookie.replace(/-/g, '') === refreshTokenKey;\n });\n const exists: boolean = cookieKey != null;\n logger.debug(`Cookie '${refreshTokenKey}' ${exists ? 'exists' : 'NOT exists'} in cookies`);\n return exists;\n}\n\nexport async function refreshAccessTokenEmbedded(request: IncomingMessage): Promise<Response | null> {\n const logger = fronteggLogger.child({ tag: 'refreshToken.refreshAccessTokenEmbedded' });\n\n const headers = request.headers as Record<string, string>;\n const cookies = (request as NextApiRequest).cookies;\n\n logger.info('check if has refresh token headers');\n if (hasRefreshTokenCookie(cookies)) {\n logger.info('going to refresh token (embedded mode)');\n return await api.refreshTokenEmbedded(headers);\n }\n return null;\n}\n\nexport async function refreshAccessTokenHostedLogin(request: IncomingMessage): Promise<Response | null> {\n const logger = fronteggLogger.child({ tag: 'refreshToken.refreshAccessTokenHostedLogin' });\n const headers = request.headers as Record<string, string>;\n logger.info('trying to get token from cookies');\n\n const sealFromCookies = CookieManager.getSessionCookieFromRequest(request);\n try {\n const tokens = await getTokensFromCookie(sealFromCookies);\n if (!tokens?.refreshToken) {\n logger.info('refresh token not found');\n return null;\n }\n\n logger.info('going to refresh token (hosted-login mode)');\n return await api.refreshTokenHostedLogin(headers, tokens.refreshToken);\n } catch (e) {\n logger.error(e);\n return null;\n }\n}\n\n/**\n * If url starts with /_next/ means that the user trying to navigate\n * to a new nextjs page, in this scenario no need to refresh token\n * we can just return the actual stateless session from\n * the encrypted cookie\n */\nexport function isRuntimeNextRequest(url: string): boolean {\n return url.startsWith('/_next/');\n}\n\n/**\n * If url starts with '/oauth/callback' means that the user navigated back\n * from frontegg hosted login, in this scenario no need to refresh token\n */\nexport function isOauthCallback(url: string): boolean {\n return url.startsWith('/oauth/callback');\n}\n"],"mappings":";;;;;;;;;;;AAAA;AACA;AAEA;AACA;AAGO,SAASA,qBAAqB,CAACC,OAA4B,EAAW;EAC3E,MAAMC,MAAM,GAAGC,uBAAc,CAACC,KAAK,CAAC;IAAEC,GAAG,EAAE;EAAqC,CAAC,CAAC;EAClF,MAAMC,eAAe,GAAGC,gBAAa,CAACD,eAAe;EACrDJ,MAAM,CAACM,KAAK,CAAE,gBAAeF,eAAgB,qBAAoB,CAAC;EAClE,MAAMG,SAAS,GAAGC,MAAM,CAACC,IAAI,CAACV,OAAO,CAAC,CAACW,IAAI,CAAEC,MAAM,IAAK;IACtD,OAAOA,MAAM,CAACC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,KAAKR,eAAe;EACrD,CAAC,CAAC;EACF,MAAMS,MAAe,GAAGN,SAAS,IAAI,IAAI;EACzCP,MAAM,CAACM,KAAK,CAAE,WAAUF,eAAgB,KAAIS,MAAM,GAAG,QAAQ,GAAG,YAAa,aAAY,CAAC;EAC1F,OAAOA,MAAM;AACf;AAEO,eAAeC,0BAA0B,CAACC,OAAwB,EAA4B;EACnG,MAAMf,MAAM,GAAGC,uBAAc,CAACC,KAAK,CAAC;IAAEC,GAAG,EAAE;EAA0C,CAAC,CAAC;EAEvF,MAAMa,OAAO,GAAGD,OAAO,CAACC,OAAiC;EACzD,MAAMjB,OAAO,GAAIgB,OAAO,CAAoBhB,OAAO;EAEnDC,MAAM,CAACiB,IAAI,CAAC,oCAAoC,CAAC;EACjD,IAAInB,qBAAqB,CAACC,OAAO,CAAC,EAAE;IAClCC,MAAM,CAACiB,IAAI,CAAC,wCAAwC,CAAC;IACrD,OAAO,MAAMC,YAAG,CAACC,oBAAoB,CAACH,OAAO,CAAC;EAChD;EACA,OAAO,IAAI;AACb;AAEO,eAAeI,6BAA6B,CAACL,OAAwB,EAA4B;EACtG,MAAMf,MAAM,GAAGC,uBAAc,CAACC,KAAK,CAAC;IAAEC,GAAG,EAAE;EAA6C,CAAC,CAAC;EAC1F,MAAMa,OAAO,GAAGD,OAAO,CAACC,OAAiC;EACzDhB,MAAM,CAACiB,IAAI,CAAC,kCAAkC,CAAC;EAE/C,MAAMI,eAAe,GAAGhB,gBAAa,CAACiB,2BAA2B,CAACP,OAAO,CAAC;EAC1E,IAAI;IACF,MAAMQ,MAAM,GAAG,MAAM,IAAAC,2BAAmB,EAACH,eAAe,CAAC;IACzD,IAAI,EAACE,MAAM,YAANA,MAAM,CAAEE,YAAY,GAAE;MACzBzB,MAAM,CAACiB,IAAI,CAAC,yBAAyB,CAAC;MACtC,OAAO,IAAI;IACb;IAEAjB,MAAM,CAACiB,IAAI,CAAC,4CAA4C,CAAC;IACzD,OAAO,MAAMC,YAAG,CAACQ,uBAAuB,CAACV,OAAO,EAAEO,MAAM,CAACE,YAAY,CAAC;EACxE,CAAC,CAAC,OAAOE,CAAC,EAAE;IACV3B,MAAM,CAAC4B,KAAK,CAACD,CAAC,CAAC;IACf,OAAO,IAAI;EACb;AACF;;AAEA;AACA;AACA;AACA;AACA;AACA;AACO,SAASE,oBAAoB,CAACC,GAAW,EAAW;EACzD,OAAOA,GAAG,CAACC,UAAU,CAAC,SAAS,CAAC;AAClC;;AAEA;AACA;AACA;AACA;AACO,SAASC,eAAe,CAACF,GAAW,EAAW;EACpD,OAAOA,GAAG,CAACC,UAAU,CAAC,iBAAiB,CAAC;AAC1C"}
@@ -0,0 +1,9 @@
1
+ import type { NextPageContext } from 'next/dist/shared/lib/utils';
2
+ import type { FronteggNextJSSession } from '../../types';
3
+ /**
4
+ * Refreshes the access token for the current session.
5
+ *
6
+ * @param {NextPageContext} ctx - The Next.js Page Context object.
7
+ * @returns {Promise<FronteggNextJSSession | null>} A Promise that resolves to the updated session object, or `null` if the refresh failed.
8
+ */
9
+ export default function refreshAccessToken(ctx: NextPageContext): Promise<FronteggNextJSSession | null>;
@@ -0,0 +1,94 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.default = refreshAccessToken;
8
+ var _common = require("../../common");
9
+ var _config = _interopRequireDefault(require("../../config"));
10
+ var _cookies = _interopRequireDefault(require("../cookies"));
11
+ var _helpers = require("./helpers");
12
+ var _fronteggLogger = _interopRequireDefault(require("../fronteggLogger"));
13
+ var _encryption = _interopRequireDefault(require("../encryption"));
14
+ var _createSession = _interopRequireDefault(require("../createSession"));
15
+ /**
16
+ * Refreshes the access token for the current session.
17
+ *
18
+ * @param {NextPageContext} ctx - The Next.js Page Context object.
19
+ * @returns {Promise<FronteggNextJSSession | null>} A Promise that resolves to the updated session object, or `null` if the refresh failed.
20
+ */
21
+ async function refreshAccessToken(ctx) {
22
+ const logger = _fronteggLogger.default.child({
23
+ tag: 'refreshAccessToken'
24
+ });
25
+ logger.info(`Refreshing token by for PageContext ${ctx.pathname}`);
26
+ const nextJsRequest = ctx.req;
27
+ const nextJsResponse = ctx.res;
28
+ const url = nextJsRequest == null ? void 0 : nextJsRequest.url;
29
+ if (!nextJsResponse || !nextJsRequest || !url) {
30
+ logger.debug(`abandon refreshToken due to PageContext.req = null`);
31
+ return null;
32
+ }
33
+ try {
34
+ var _response$headers, _response$headers$raw, _CookieManager$modify, _ctx$res, _data$accessToken;
35
+ logger.info(`Check if should request made from first application load`);
36
+ if ((0, _helpers.isRuntimeNextRequest)(url)) {
37
+ logger.debug(`Detect runtime next.js request, resolving existing session from cookies if exists`);
38
+ const cookies = _cookies.default.getSessionCookieFromRequest(nextJsRequest);
39
+ const session = await (0, _createSession.default)(cookies, _encryption.default);
40
+ if (session) {
41
+ logger.debug(`session resolved from session cookie`);
42
+ return session;
43
+ } else {
44
+ logger.info('Failed to resolve session from cookie, going to refresh token');
45
+ }
46
+ }
47
+ if ((0, _helpers.isOauthCallback)(url)) {
48
+ /* Prevent refresh token due to oauth login callback */
49
+ logger.debug(`abandon refreshToken for url='/oauth/callback'`);
50
+ return null;
51
+ }
52
+ let response;
53
+ if (_config.default.isHostedLogin) {
54
+ response = await (0, _helpers.refreshAccessTokenHostedLogin)(nextJsRequest);
55
+ } else {
56
+ response = await (0, _helpers.refreshAccessTokenEmbedded)(nextJsRequest);
57
+ }
58
+ const isSecured = _config.default.isSSL;
59
+ if (response === null || !response.ok) {
60
+ _cookies.default.removeCookies({
61
+ cookieDomain: _config.default.cookieDomain,
62
+ isSecured,
63
+ req: nextJsRequest,
64
+ res: nextJsResponse
65
+ });
66
+ return null;
67
+ }
68
+ const data = await response.json();
69
+
70
+ // @ts-ignore
71
+ const cookieHeader = (_response$headers = response.headers) == null ? void 0 : (_response$headers$raw = _response$headers.raw) == null ? void 0 : _response$headers$raw.call(_response$headers)['set-cookie'];
72
+ const newSetCookie = (_CookieManager$modify = _cookies.default.modifySetCookie(cookieHeader, isSecured)) != null ? _CookieManager$modify : [];
73
+ const [session, decodedJwt, refreshToken] = await (0, _common.createSessionFromAccessToken)(data);
74
+ if (!session) {
75
+ return null;
76
+ }
77
+ const cookieValue = _cookies.default.create({
78
+ value: session,
79
+ expires: new Date(decodedJwt.exp * 1000),
80
+ secure: isSecured
81
+ });
82
+ newSetCookie.push(...cookieValue);
83
+ (_ctx$res = ctx.res) == null ? void 0 : _ctx$res.setHeader('set-cookie', newSetCookie);
84
+ return {
85
+ accessToken: (_data$accessToken = data.accessToken) != null ? _data$accessToken : data.access_token,
86
+ user: decodedJwt,
87
+ refreshToken
88
+ };
89
+ } catch (e) {
90
+ logger.error('[refreshToken] Failed to create session e', e);
91
+ return null;
92
+ }
93
+ }
94
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":["refreshAccessToken","ctx","logger","fronteggLogger","child","tag","info","pathname","nextJsRequest","req","nextJsResponse","res","url","debug","isRuntimeNextRequest","cookies","CookieManager","getSessionCookieFromRequest","session","createSession","encryption","isOauthCallback","response","config","isHostedLogin","refreshAccessTokenHostedLogin","refreshAccessTokenEmbedded","isSecured","isSSL","ok","removeCookies","cookieDomain","data","json","cookieHeader","headers","raw","newSetCookie","modifySetCookie","decodedJwt","refreshToken","createSessionFromAccessToken","cookieValue","create","value","expires","Date","exp","secure","push","setHeader","accessToken","access_token","user","e","error"],"sources":["../../../../../packages/nextjs/src/utils/refreshAccessToken/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 isRuntimeNextRequest,\n refreshAccessTokenEmbedded,\n refreshAccessTokenHostedLogin,\n} from './helpers';\nimport fronteggLogger from '../fronteggLogger';\nimport encryption from '../encryption';\nimport createSession from '../createSession';\n\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 refreshAccessToken(ctx: NextPageContext): Promise<FronteggNextJSSession | null> {\n const logger = fronteggLogger.child({ tag: 'refreshAccessToken' });\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 try {\n logger.info(`Check if should request made from first application load`);\n\n if (isRuntimeNextRequest(url)) {\n logger.debug(`Detect runtime next.js request, resolving existing session from cookies if exists`);\n\n const cookies = CookieManager.getSessionCookieFromRequest(nextJsRequest);\n const session = await createSession(cookies, encryption);\n\n if (session) {\n logger.debug(`session resolved from session cookie`);\n return session;\n } else {\n logger.info('Failed to resolve session from cookie, going to refresh token');\n }\n }\n\n if (isOauthCallback(url)) {\n /* Prevent refresh token due to oauth login callback */\n logger.debug(`abandon refreshToken for url='/oauth/callback'`);\n return null;\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 // @ts-ignore\n const cookieHeader = response.headers?.raw?.()['set-cookie'];\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 });\n newSetCookie.push(...cookieValue);\n ctx.res?.setHeader('set-cookie', newSetCookie);\n\n return {\n accessToken: data.accessToken ?? data.access_token,\n user: decodedJwt,\n refreshToken,\n };\n } catch (e) {\n logger.error('[refreshToken] Failed to create session e', e);\n return null;\n }\n}\n"],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ {
2
+ "sideEffects": false,
3
+ "module": "./index.js",
4
+ "main": "./index.js",
5
+ "types": "./index.d.ts"
6
+ }
@@ -0,0 +1,5 @@
1
+ export declare function getAuthRoutes(): {
2
+ routesArr: string[];
3
+ routesObj: Record<string, string>;
4
+ };
5
+ export declare function isAuthRoute(pathname: string): boolean;
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.getAuthRoutes = getAuthRoutes;
8
+ exports.isAuthRoute = isAuthRoute;
9
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
10
+ var _reduxStore = require("@frontegg/redux-store");
11
+ var _config = _interopRequireDefault(require("../../config"));
12
+ function getAuthRoutes() {
13
+ const routesObj = (0, _extends2.default)({}, _reduxStore.authInitialState.routes, _config.default.authRoutes);
14
+ const routesArr = Object.keys(routesObj).reduce((p, key) => [...p, routesObj[key]], []);
15
+ return {
16
+ routesArr,
17
+ routesObj
18
+ };
19
+ }
20
+ function isAuthRoute(pathname) {
21
+ const {
22
+ routesArr,
23
+ routesObj
24
+ } = getAuthRoutes();
25
+ if (_config.default.fronteggAppOptions.hostedLoginBox) {
26
+ return routesObj.loginUrl === pathname || routesObj.logoutUrl === pathname || routesObj.hostedLoginRedirectUrl === pathname;
27
+ } else {
28
+ return routesArr.indexOf(pathname) !== -1;
29
+ }
30
+ }
31
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":["getAuthRoutes","routesObj","authInitialState","routes","config","authRoutes","routesArr","Object","keys","reduce","p","key","isAuthRoute","pathname","fronteggAppOptions","hostedLoginBox","loginUrl","logoutUrl","hostedLoginRedirectUrl","indexOf"],"sources":["../../../../../packages/nextjs/src/utils/routing/index.ts"],"sourcesContent":["import { authInitialState } from '@frontegg/redux-store';\nimport config from '../../config';\n\nexport function getAuthRoutes(): { routesArr: string[]; routesObj: Record<string, string> } {\n const routesObj = {\n ...authInitialState.routes,\n ...config.authRoutes,\n };\n const routesArr: string[] = Object.keys(routesObj).reduce(\n (p: string[], key: string) => [...p, (routesObj as any)[key]],\n []\n );\n return { routesArr, routesObj };\n}\n\nexport function isAuthRoute(pathname: string): boolean {\n const { routesArr, routesObj } = getAuthRoutes();\n\n if (config.fronteggAppOptions.hostedLoginBox) {\n return (\n routesObj.loginUrl === pathname ||\n routesObj.logoutUrl === pathname ||\n routesObj.hostedLoginRedirectUrl === pathname\n );\n } else {\n return routesArr.indexOf(pathname) !== -1;\n }\n}\n"],"mappings":";;;;;;;;;AAAA;AACA;AAEO,SAASA,aAAa,GAA+D;EAC1F,MAAMC,SAAS,8BACVC,4BAAgB,CAACC,MAAM,EACvBC,eAAM,CAACC,UAAU,CACrB;EACD,MAAMC,SAAmB,GAAGC,MAAM,CAACC,IAAI,CAACP,SAAS,CAAC,CAACQ,MAAM,CACvD,CAACC,CAAW,EAAEC,GAAW,KAAK,CAAC,GAAGD,CAAC,EAAGT,SAAS,CAASU,GAAG,CAAC,CAAC,EAC7D,EAAE,CACH;EACD,OAAO;IAAEL,SAAS;IAAEL;EAAU,CAAC;AACjC;AAEO,SAASW,WAAW,CAACC,QAAgB,EAAW;EACrD,MAAM;IAAEP,SAAS;IAAEL;EAAU,CAAC,GAAGD,aAAa,EAAE;EAEhD,IAAII,eAAM,CAACU,kBAAkB,CAACC,cAAc,EAAE;IAC5C,OACEd,SAAS,CAACe,QAAQ,KAAKH,QAAQ,IAC/BZ,SAAS,CAACgB,SAAS,KAAKJ,QAAQ,IAChCZ,SAAS,CAACiB,sBAAsB,KAAKL,QAAQ;EAEjD,CAAC,MAAM;IACL,OAAOP,SAAS,CAACa,OAAO,CAACN,QAAQ,CAAC,KAAK,CAAC,CAAC;EAC3C;AACF"}
@@ -0,0 +1,6 @@
1
+ {
2
+ "sideEffects": false,
3
+ "module": "./index.js",
4
+ "main": "./index.js",
5
+ "types": "./index.d.ts"
6
+ }
@@ -0,0 +1,5 @@
1
+ import { RedirectOptions } from '@frontegg/rest-api';
2
+ import type { NextRouter } from 'next/router';
3
+ import type { AppRouterInstance } from 'next/dist/shared/lib/app-router-context';
4
+ declare const useOnRedirectTo: (baseName: string, router: AppRouterInstance | NextRouter) => (_path: string, opts?: RedirectOptions) => void;
5
+ export default useOnRedirectTo;
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var _react = require("react");
8
+ const useOnRedirectTo = (baseName, router) => {
9
+ return (0, _react.useCallback)((_path, opts) => {
10
+ const isSSR = typeof window == undefined;
11
+ let path = _path;
12
+ if (path.startsWith(baseName)) {
13
+ path = path.substring(baseName.length);
14
+ }
15
+ if (opts != null && opts.preserveQueryParams) {
16
+ path = `${path}${window.location.search}`;
17
+ }
18
+ if (opts != null && opts.refresh && !isSSR) {
19
+ // @ts-ignore
20
+ window.Cypress ? router.push(path) : window.location.href = path;
21
+ } else {
22
+ opts != null && opts.replace ? router.replace(path) : router.push(path);
23
+ }
24
+ }, []);
25
+ };
26
+ var _default = useOnRedirectTo;
27
+ exports.default = _default;
28
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":["useOnRedirectTo","baseName","router","useCallback","_path","opts","isSSR","window","undefined","path","startsWith","substring","length","preserveQueryParams","location","search","refresh","Cypress","push","href","replace"],"sources":["../../../../../packages/nextjs/src/utils/useOnRedirectTo/index.ts"],"sourcesContent":["import { useCallback } from 'react';\nimport { RedirectOptions } from '@frontegg/rest-api';\nimport type { NextRouter } from 'next/router';\nimport type { AppRouterInstance } from 'next/dist/shared/lib/app-router-context';\n\nconst useOnRedirectTo = (baseName: string, router: AppRouterInstance | NextRouter) => {\n return useCallback((_path: string, opts?: RedirectOptions) => {\n const isSSR = typeof window == undefined;\n let path = _path;\n if (path.startsWith(baseName)) {\n path = path.substring(baseName.length);\n }\n if (opts?.preserveQueryParams) {\n path = `${path}${window.location.search}`;\n }\n if (opts?.refresh && !isSSR) {\n // @ts-ignore\n window.Cypress ? router.push(path) : (window.location.href = path);\n } else {\n opts?.replace ? router.replace(path) : router.push(path);\n }\n }, []);\n};\n\nexport default useOnRedirectTo;\n"],"mappings":";;;;;;AAAA;AAKA,MAAMA,eAAe,GAAG,CAACC,QAAgB,EAAEC,MAAsC,KAAK;EACpF,OAAO,IAAAC,kBAAW,EAAC,CAACC,KAAa,EAAEC,IAAsB,KAAK;IAC5D,MAAMC,KAAK,GAAG,OAAOC,MAAM,IAAIC,SAAS;IACxC,IAAIC,IAAI,GAAGL,KAAK;IAChB,IAAIK,IAAI,CAACC,UAAU,CAACT,QAAQ,CAAC,EAAE;MAC7BQ,IAAI,GAAGA,IAAI,CAACE,SAAS,CAACV,QAAQ,CAACW,MAAM,CAAC;IACxC;IACA,IAAIP,IAAI,YAAJA,IAAI,CAAEQ,mBAAmB,EAAE;MAC7BJ,IAAI,GAAI,GAAEA,IAAK,GAAEF,MAAM,CAACO,QAAQ,CAACC,MAAO,EAAC;IAC3C;IACA,IAAIV,IAAI,YAAJA,IAAI,CAAEW,OAAO,IAAI,CAACV,KAAK,EAAE;MAC3B;MACAC,MAAM,CAACU,OAAO,GAAGf,MAAM,CAACgB,IAAI,CAACT,IAAI,CAAC,GAAIF,MAAM,CAACO,QAAQ,CAACK,IAAI,GAAGV,IAAK;IACpE,CAAC,MAAM;MACLJ,IAAI,YAAJA,IAAI,CAAEe,OAAO,GAAGlB,MAAM,CAACkB,OAAO,CAACX,IAAI,CAAC,GAAGP,MAAM,CAACgB,IAAI,CAACT,IAAI,CAAC;IAC1D;EACF,CAAC,EAAE,EAAE,CAAC;AACR,CAAC;AAAC,eAEaT,eAAe;AAAA"}
@@ -0,0 +1,6 @@
1
+ {
2
+ "sideEffects": false,
3
+ "module": "./index.js",
4
+ "main": "./index.js",
5
+ "types": "./index.d.ts"
6
+ }