@frontegg/nextjs 6.7.20 → 6.7.21-alpha.4441481917
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 +10 -0
- package/README.md +19 -37
- package/api/index.d.ts +19 -0
- package/api/index.js +78 -0
- package/api/index.js.map +1 -0
- package/api/package.json +6 -0
- package/api/urls.d.ts +33 -0
- package/api/urls.js +46 -0
- package/api/urls.js.map +1 -0
- package/api/utils.d.ts +46 -0
- package/api/utils.js +108 -0
- package/api/utils.js.map +1 -0
- package/app/ClientFronteggProvider.d.ts +3 -0
- package/app/ClientFronteggProvider.js +25 -0
- package/app/ClientFronteggProvider.js.map +1 -0
- package/app/FronteggAppProvider.d.ts +4 -0
- package/app/FronteggAppProvider.js +17 -0
- package/app/FronteggAppProvider.js.map +1 -0
- package/{client → app}/FronteggAppRouter.d.ts +11 -10
- package/app/FronteggAppRouter.js +31 -0
- package/app/FronteggAppRouter.js.map +1 -0
- package/app/helpers.d.ts +5 -0
- package/app/helpers.js +32 -0
- package/app/helpers.js.map +1 -0
- package/app/index.d.ts +4 -0
- package/app/index.js +4 -0
- package/app/index.js.map +1 -0
- package/app/package.json +6 -0
- package/common/{client/AppContext.d.ts → AppContext.d.ts} +4 -4
- package/common/AppContext.js +6 -0
- package/common/AppContext.js.map +1 -0
- package/{AuthorizedContent.d.ts → common/AuthorizedContent.d.ts} +9 -8
- package/common/AuthorizedContent.js +48 -0
- package/common/AuthorizedContent.js.map +1 -0
- package/common/{client/FronteggBaseProvider.d.ts → FronteggBaseProvider.d.ts} +3 -3
- package/common/FronteggBaseProvider.js +67 -0
- package/common/FronteggBaseProvider.js.map +1 -0
- package/common/FronteggRouterBase.d.ts +9 -0
- package/common/FronteggRouterBase.js +42 -0
- package/common/FronteggRouterBase.js.map +1 -0
- package/common/helpers.d.ts +3 -9
- package/common/helpers.js +24 -0
- package/common/helpers.js.map +1 -0
- package/common/index.d.ts +4 -6
- package/common/index.js +5 -10
- package/common/index.js.map +1 -1
- package/common/package.json +6 -0
- package/common/useRequestAuthorizeSSR.d.ts +5 -0
- package/common/useRequestAuthorizeSSR.js +24 -0
- package/common/useRequestAuthorizeSSR.js.map +1 -0
- package/config/constants.d.ts +57 -0
- package/config/constants.js +13 -0
- package/config/constants.js.map +1 -0
- package/config/helpers.d.ts +28 -0
- package/config/helpers.js +87 -0
- package/config/helpers.js.map +1 -0
- package/config/index.d.ts +24 -0
- package/config/index.js +82 -0
- package/config/index.js.map +1 -0
- package/config/package.json +6 -0
- package/config/types.d.ts +18 -0
- package/config/types.js +2 -0
- package/config/types.js.map +1 -0
- package/edge/getSessionOnEdge.d.ts +3 -2
- package/edge/getSessionOnEdge.js +8 -0
- package/edge/getSessionOnEdge.js.map +1 -0
- package/edge/index.d.ts +3 -2
- package/edge/index.js +4 -64
- package/edge/index.js.map +1 -1
- package/edge/package.json +6 -0
- package/edge/redirectToLogin.d.ts +2 -0
- package/edge/redirectToLogin.js +9 -0
- package/edge/redirectToLogin.js.map +1 -0
- package/edge/shouldBypassMiddleware.d.ts +21 -7
- package/edge/shouldBypassMiddleware.js +42 -0
- package/edge/shouldBypassMiddleware.js.map +1 -0
- package/index.d.ts +7 -11
- package/index.js +13 -1401
- package/index.js.map +1 -1
- package/middleware/FronteggApiMiddleware.d.ts +8 -0
- package/middleware/FronteggApiMiddleware.js +28 -0
- package/middleware/FronteggApiMiddleware.js.map +1 -0
- package/middleware/FronteggProxy.d.ts +4 -0
- package/middleware/FronteggProxy.js +24 -0
- package/middleware/FronteggProxy.js.map +1 -0
- package/middleware/ProxyRequestCallback.d.ts +13 -0
- package/middleware/ProxyRequestCallback.js +48 -0
- package/middleware/ProxyRequestCallback.js.map +1 -0
- package/middleware/ProxyResponseCallback.d.ts +13 -0
- package/middleware/ProxyResponseCallback.js +103 -0
- package/middleware/ProxyResponseCallback.js.map +1 -0
- package/middleware/constants.d.ts +8 -0
- package/middleware/constants.js +9 -0
- package/middleware/constants.js.map +1 -0
- package/{common/FronteggProxy.d.ts → middleware/helpers.d.ts} +13 -26
- package/middleware/helpers.js +35 -0
- package/middleware/helpers.js.map +1 -0
- package/middleware/index.d.ts +23 -0
- package/middleware/index.js +24 -0
- package/middleware/index.js.map +1 -0
- package/middleware/package.json +6 -0
- package/no-ssr/ExpireInListener.d.ts +2 -0
- package/no-ssr/ExpireInListener.js +22 -0
- package/no-ssr/ExpireInListener.js.map +1 -0
- package/{FronteggProviderNoSSR.d.ts → no-ssr/FronteggProviderNoSSR.d.ts} +4 -4
- package/no-ssr/FronteggProviderNoSSR.js +76 -0
- package/no-ssr/FronteggProviderNoSSR.js.map +1 -0
- package/no-ssr/index.d.ts +2 -0
- package/no-ssr/index.js +2 -0
- package/no-ssr/index.js.map +1 -0
- package/no-ssr/package.json +6 -0
- package/package.json +6 -7
- package/pages/FronteggPagesProvider/index.d.ts +4 -0
- package/pages/FronteggPagesProvider/index.js +24 -0
- package/pages/FronteggPagesProvider/index.js.map +1 -0
- package/pages/FronteggPagesProvider/package.json +6 -0
- package/{FronteggRouter.d.ts → pages/FronteggRouter/FronteggRouter.d.ts} +6 -5
- package/pages/FronteggRouter/FronteggRouter.js +38 -0
- package/pages/FronteggRouter/FronteggRouter.js.map +1 -0
- package/pages/FronteggRouter/index.d.ts +26 -0
- package/pages/FronteggRouter/index.js +27 -0
- package/pages/FronteggRouter/index.js.map +1 -0
- package/pages/FronteggRouter/package.json +6 -0
- package/{session.d.ts → pages/helpers.d.ts} +10 -10
- package/pages/helpers.js +31 -0
- package/pages/helpers.js.map +1 -0
- package/pages/index.d.ts +3 -0
- package/pages/index.js +4 -0
- package/pages/index.js.map +1 -0
- package/pages/package.json +6 -0
- package/pages/withFronteggApp/index.d.ts +2 -0
- package/pages/withFronteggApp/index.js +2 -0
- package/pages/withFronteggApp/index.js.map +1 -0
- package/pages/withFronteggApp/package.json +6 -0
- package/pages/withFronteggApp/types.d.ts +12 -0
- package/pages/withFronteggApp/types.js +2 -0
- package/pages/withFronteggApp/types.js.map +1 -0
- package/pages/withFronteggApp/withFronteggApp.d.ts +2 -0
- package/pages/withFronteggApp/withFronteggApp.js +62 -0
- package/pages/withFronteggApp/withFronteggApp.js.map +1 -0
- package/sdkVersion.d.ts +4 -4
- package/sdkVersion.js +4 -0
- package/sdkVersion.js.map +1 -0
- package/{common/types.d.ts → types/index.d.ts} +80 -74
- package/types/index.js +2 -0
- package/types/index.js.map +1 -0
- package/types/package.json +6 -0
- package/utils/common/constants.d.ts +12 -0
- package/utils/common/constants.js +14 -0
- package/utils/common/constants.js.map +1 -0
- package/utils/common/index.d.ts +15 -0
- package/utils/common/index.js +26 -0
- package/utils/common/index.js.map +1 -0
- package/utils/common/package.json +6 -0
- package/utils/cookies/constants.d.ts +7 -0
- package/utils/cookies/constants.js +8 -0
- package/utils/cookies/constants.js.map +1 -0
- package/utils/cookies/helpers.d.ts +25 -0
- package/utils/cookies/helpers.js +53 -0
- package/utils/cookies/helpers.js.map +1 -0
- package/utils/cookies/index.d.ts +45 -0
- package/utils/cookies/index.js +232 -0
- package/utils/cookies/index.js.map +1 -0
- package/utils/cookies/package.json +6 -0
- package/utils/cookies/serializer.d.ts +22 -0
- package/utils/cookies/serializer.js +154 -0
- package/utils/cookies/serializer.js.map +1 -0
- package/utils/cookies/types.d.ts +31 -0
- package/utils/cookies/types.js +2 -0
- package/utils/cookies/types.js.map +1 -0
- package/utils/createSession/index.d.ts +2 -0
- package/utils/createSession/index.js +44 -0
- package/utils/createSession/index.js.map +1 -0
- package/utils/createSession/package.json +6 -0
- package/utils/encryption/index.d.ts +3 -0
- package/utils/encryption/index.js +29 -0
- package/utils/encryption/index.js.map +1 -0
- package/utils/encryption/package.json +6 -0
- package/utils/encryption-edge/index.d.ts +3 -0
- package/utils/encryption-edge/index.js +29 -0
- package/utils/encryption-edge/index.js.map +1 -0
- package/utils/encryption-edge/package.json +6 -0
- package/utils/errors/FronteggEnvNotFound.d.ts +3 -0
- package/utils/errors/FronteggEnvNotFound.js +8 -0
- package/utils/errors/FronteggEnvNotFound.js.map +1 -0
- package/utils/errors/InvalidFronteggEnv.d.ts +3 -0
- package/utils/errors/InvalidFronteggEnv.js +8 -0
- package/utils/errors/InvalidFronteggEnv.js.map +1 -0
- package/utils/errors/index.d.ts +2 -0
- package/utils/errors/index.js +3 -0
- package/utils/errors/index.js.map +1 -0
- package/utils/errors/package.json +6 -0
- package/utils/fetchUserData/index.d.ts +7 -0
- package/utils/fetchUserData/index.js +49 -0
- package/utils/fetchUserData/index.js.map +1 -0
- package/utils/fetchUserData/package.json +6 -0
- package/utils/fronteggLogger/constants.d.ts +13 -0
- package/utils/fronteggLogger/constants.js +20 -0
- package/utils/fronteggLogger/constants.js.map +1 -0
- package/utils/fronteggLogger/index.d.ts +17 -0
- package/utils/fronteggLogger/index.js +61 -0
- package/utils/fronteggLogger/index.js.map +1 -0
- package/utils/fronteggLogger/package.json +6 -0
- package/{common/client/createOrGetFronteggApp.d.ts → utils/initializeFronteggApp/index.d.ts} +11 -11
- package/utils/initializeFronteggApp/index.js +100 -0
- package/utils/initializeFronteggApp/index.js.map +1 -0
- package/utils/initializeFronteggApp/package.json +6 -0
- package/utils/jwt/index.d.ts +22 -0
- package/utils/jwt/index.js +53 -0
- package/utils/jwt/index.js.map +1 -0
- package/utils/jwt/package.json +6 -0
- package/utils/refreshAccessToken/helpers.d.ts +16 -0
- package/utils/refreshAccessToken/helpers.js +69 -0
- package/utils/refreshAccessToken/helpers.js.map +1 -0
- package/utils/refreshAccessToken/index.d.ts +9 -0
- package/utils/refreshAccessToken/index.js +88 -0
- package/utils/refreshAccessToken/index.js.map +1 -0
- package/utils/refreshAccessToken/package.json +6 -0
- package/utils/routing/index.d.ts +5 -0
- package/utils/routing/index.js +23 -0
- package/utils/routing/index.js.map +1 -0
- package/utils/routing/package.json +6 -0
- package/utils/useOnRedirectTo/index.d.ts +5 -0
- package/utils/useOnRedirectTo/index.js +21 -0
- package/utils/useOnRedirectTo/index.js.map +1 -0
- package/utils/useOnRedirectTo/package.json +6 -0
- package/CookieManager-e50dc144.js +0 -322
- package/CookieManager-e50dc144.js.map +0 -1
- package/FronteggClientProviderNext13-b3c1e7a0.js +0 -158
- package/FronteggClientProviderNext13-b3c1e7a0.js.map +0 -1
- package/FronteggMiddleware.d.ts +0 -15
- package/FronteggProvider.d.ts +0 -3
- package/api-25516652.js +0 -58
- package/api-25516652.js.map +0 -1
- package/client/FronteggClientProviderNext13.d.ts +0 -3
- package/client/index.d.ts +0 -2
- package/client/index.js +0 -64
- package/client/index.js.map +0 -1
- package/common/CookieManager.d.ts +0 -41
- package/common/FronteggConfig.d.ts +0 -31
- package/common/api.d.ts +0 -3
- package/common/client/ExpireInListener.d.ts +0 -2
- package/common/client/hooks/index.d.ts +0 -1
- package/common/client/hooks/useRequestAuthorizeSSR.d.ts +0 -5
- package/common/client/index.d.ts +0 -4
- package/common/consts.d.ts +0 -6
- package/common/createGetSession.d.ts +0 -7
- package/common/utils.d.ts +0 -1
- package/createGetSession-2e1e4506.js +0 -50
- package/createGetSession-2e1e4506.js.map +0 -1
- package/helpers-dac37998.js +0 -88
- package/helpers-dac37998.js.map +0 -1
- package/refreshToken.d.ts +0 -3
- package/server/FronteggProviderNext13.d.ts +0 -3
- package/server/getSessionNext13.d.ts +0 -4
- package/server/index.d.ts +0 -2
- package/server/index.js +0 -84
- package/server/index.js.map +0 -1
- package/withFronteggApp.d.ts +0 -11
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
import { cookieContentRegExp } from '../common/constants';
|
|
2
|
+
/**
|
|
3
|
+
* Determine if value is a Date.
|
|
4
|
+
*
|
|
5
|
+
* @param {*} val
|
|
6
|
+
* @private
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
function isDate(val) {
|
|
10
|
+
return Object.prototype.toString.call(val) === '[object Date]' || val instanceof Date;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Parse an HTTP Cookie header string and returning an object of all cookie
|
|
15
|
+
* name-value pairs.
|
|
16
|
+
*
|
|
17
|
+
* @param str the string representing a `Cookie` header value
|
|
18
|
+
*/
|
|
19
|
+
function parse(str) {
|
|
20
|
+
if (typeof str !== 'string') {
|
|
21
|
+
throw new TypeError('argument str must be a string');
|
|
22
|
+
}
|
|
23
|
+
const obj = {};
|
|
24
|
+
let index = 0;
|
|
25
|
+
while (index < str.length) {
|
|
26
|
+
const eqIdx = str.indexOf('=', index);
|
|
27
|
+
|
|
28
|
+
// no more cookie pairs
|
|
29
|
+
if (eqIdx === -1) {
|
|
30
|
+
break;
|
|
31
|
+
}
|
|
32
|
+
let endIdx = str.indexOf(';', index);
|
|
33
|
+
if (endIdx === -1) {
|
|
34
|
+
endIdx = str.length;
|
|
35
|
+
} else if (endIdx < eqIdx) {
|
|
36
|
+
// backtrack on prior semicolon
|
|
37
|
+
index = str.lastIndexOf(';', eqIdx - 1) + 1;
|
|
38
|
+
continue;
|
|
39
|
+
}
|
|
40
|
+
const key = str.slice(index, eqIdx).trim();
|
|
41
|
+
|
|
42
|
+
// only assign once
|
|
43
|
+
if (undefined === obj[key]) {
|
|
44
|
+
let val = str.slice(eqIdx + 1, endIdx).trim();
|
|
45
|
+
|
|
46
|
+
// quoted values
|
|
47
|
+
if (val.charCodeAt(0) === 0x22) {
|
|
48
|
+
val = val.slice(1, -1);
|
|
49
|
+
}
|
|
50
|
+
try {
|
|
51
|
+
obj[key] = val.indexOf('%') !== -1 ? decodeURIComponent(val) : val;
|
|
52
|
+
} catch (e) {
|
|
53
|
+
obj[key] = val;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
index = endIdx + 1;
|
|
57
|
+
}
|
|
58
|
+
return obj;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* Serialize a cookie name-value pair into a `Set-Cookie` header string.
|
|
63
|
+
*
|
|
64
|
+
* @param name the name for the cookie
|
|
65
|
+
* @param val value to set the cookie to
|
|
66
|
+
* @param [options] object containing serialization options
|
|
67
|
+
* @throws {TypeError} when `maxAge` options is invalid
|
|
68
|
+
*/
|
|
69
|
+
function serialize(name, val, options) {
|
|
70
|
+
const opt = options || {};
|
|
71
|
+
if (!cookieContentRegExp.test(name)) {
|
|
72
|
+
throw new TypeError('argument name is invalid: ' + name);
|
|
73
|
+
}
|
|
74
|
+
const value = encodeURIComponent(val);
|
|
75
|
+
if (value && !cookieContentRegExp.test(value)) {
|
|
76
|
+
throw new TypeError('argument val is invalid');
|
|
77
|
+
}
|
|
78
|
+
let str = name + '=' + value;
|
|
79
|
+
if (null != opt.maxAge) {
|
|
80
|
+
// noinspection PointlessArithmeticExpressionJS
|
|
81
|
+
const maxAge = opt.maxAge - 0;
|
|
82
|
+
if (isNaN(maxAge) || !isFinite(maxAge)) {
|
|
83
|
+
throw new TypeError('option maxAge is invalid');
|
|
84
|
+
}
|
|
85
|
+
str += '; Max-Age=' + Math.floor(maxAge);
|
|
86
|
+
}
|
|
87
|
+
if (opt.domain) {
|
|
88
|
+
if (!cookieContentRegExp.test(opt.domain)) {
|
|
89
|
+
throw new TypeError('option domain is invalid');
|
|
90
|
+
}
|
|
91
|
+
str += '; Domain=' + opt.domain;
|
|
92
|
+
}
|
|
93
|
+
if (opt.path) {
|
|
94
|
+
if (!cookieContentRegExp.test(opt.path)) {
|
|
95
|
+
throw new TypeError('option path is invalid');
|
|
96
|
+
}
|
|
97
|
+
str += '; Path=' + opt.path;
|
|
98
|
+
}
|
|
99
|
+
if (opt.expires) {
|
|
100
|
+
const expires = opt.expires;
|
|
101
|
+
if (!isDate(expires) || isNaN(expires.valueOf())) {
|
|
102
|
+
throw new TypeError('option expires is invalid');
|
|
103
|
+
}
|
|
104
|
+
str += '; Expires=' + expires.toUTCString();
|
|
105
|
+
}
|
|
106
|
+
if (opt.httpOnly) {
|
|
107
|
+
str += '; HttpOnly';
|
|
108
|
+
}
|
|
109
|
+
if (opt.secure) {
|
|
110
|
+
str += '; Secure';
|
|
111
|
+
}
|
|
112
|
+
if (opt.priority) {
|
|
113
|
+
// noinspection SuspiciousTypeOfGuard
|
|
114
|
+
const priority = typeof opt.priority === 'string' ? opt.priority.toLowerCase() : opt.priority;
|
|
115
|
+
switch (priority) {
|
|
116
|
+
case 'low':
|
|
117
|
+
str += '; Priority=Low';
|
|
118
|
+
break;
|
|
119
|
+
case 'medium':
|
|
120
|
+
str += '; Priority=Medium';
|
|
121
|
+
break;
|
|
122
|
+
case 'high':
|
|
123
|
+
str += '; Priority=High';
|
|
124
|
+
break;
|
|
125
|
+
default:
|
|
126
|
+
throw new TypeError('option priority is invalid');
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
if (opt.sameSite) {
|
|
130
|
+
const sameSite = typeof opt.sameSite === 'string' ? opt.sameSite.toLowerCase() : opt.sameSite;
|
|
131
|
+
switch (sameSite) {
|
|
132
|
+
case true:
|
|
133
|
+
str += '; SameSite=Strict';
|
|
134
|
+
break;
|
|
135
|
+
case 'lax':
|
|
136
|
+
str += '; SameSite=Lax';
|
|
137
|
+
break;
|
|
138
|
+
case 'strict':
|
|
139
|
+
str += '; SameSite=Strict';
|
|
140
|
+
break;
|
|
141
|
+
case 'none':
|
|
142
|
+
str += '; SameSite=None';
|
|
143
|
+
break;
|
|
144
|
+
default:
|
|
145
|
+
throw new TypeError('option sameSite is invalid');
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
return str;
|
|
149
|
+
}
|
|
150
|
+
export default {
|
|
151
|
+
serialize,
|
|
152
|
+
parse
|
|
153
|
+
};
|
|
154
|
+
//# sourceMappingURL=serializer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serializer.js","names":["cookieContentRegExp","isDate","val","Object","prototype","toString","call","Date","parse","str","TypeError","obj","index","length","eqIdx","indexOf","endIdx","lastIndexOf","key","slice","trim","undefined","charCodeAt","decodeURIComponent","e","serialize","name","options","opt","test","value","encodeURIComponent","maxAge","isNaN","isFinite","Math","floor","domain","path","expires","valueOf","toUTCString","httpOnly","secure","priority","toLowerCase","sameSite"],"sources":["../../../../../packages/nextjs/src/utils/cookies/serializer.ts"],"sourcesContent":["import { cookieContentRegExp } from '../common/constants';\nimport { CookieSerializeOptions } from './types';\n\n/**\n * Determine if value is a Date.\n *\n * @param {*} val\n * @private\n */\n\nfunction isDate(val: any) {\n return Object.prototype.toString.call(val) === '[object Date]' || val instanceof Date;\n}\n\n/**\n * Parse an HTTP Cookie header string and returning an object of all cookie\n * name-value pairs.\n *\n * @param str the string representing a `Cookie` header value\n */\nfunction parse(str: any): Record<string, string> {\n if (typeof str !== 'string') {\n throw new TypeError('argument str must be a string');\n }\n\n const obj: Record<string, string> = {};\n\n let index = 0;\n while (index < str.length) {\n const eqIdx = str.indexOf('=', index);\n\n // no more cookie pairs\n if (eqIdx === -1) {\n break;\n }\n\n let endIdx = str.indexOf(';', index);\n\n if (endIdx === -1) {\n endIdx = str.length;\n } else if (endIdx < eqIdx) {\n // backtrack on prior semicolon\n index = str.lastIndexOf(';', eqIdx - 1) + 1;\n continue;\n }\n\n const key = str.slice(index, eqIdx).trim();\n\n // only assign once\n if (undefined === obj[key]) {\n let val = str.slice(eqIdx + 1, endIdx).trim();\n\n // quoted values\n if (val.charCodeAt(0) === 0x22) {\n val = val.slice(1, -1);\n }\n\n try {\n obj[key] = val.indexOf('%') !== -1 ? decodeURIComponent(val) : val;\n } catch (e) {\n obj[key] = val;\n }\n }\n\n index = endIdx + 1;\n }\n\n return obj;\n}\n\n/**\n * Serialize a cookie name-value pair into a `Set-Cookie` header string.\n *\n * @param name the name for the cookie\n * @param val value to set the cookie to\n * @param [options] object containing serialization options\n * @throws {TypeError} when `maxAge` options is invalid\n */\nfunction serialize(name: string, val: string, options?: CookieSerializeOptions): string {\n const opt = options || {};\n\n if (!cookieContentRegExp.test(name)) {\n throw new TypeError('argument name is invalid: ' + name);\n }\n\n const value = encodeURIComponent(val);\n\n if (value && !cookieContentRegExp.test(value)) {\n throw new TypeError('argument val is invalid');\n }\n\n let str = name + '=' + value;\n\n if (null != opt.maxAge) {\n // noinspection PointlessArithmeticExpressionJS\n const maxAge = opt.maxAge - 0;\n\n if (isNaN(maxAge) || !isFinite(maxAge)) {\n throw new TypeError('option maxAge is invalid');\n }\n\n str += '; Max-Age=' + Math.floor(maxAge);\n }\n\n if (opt.domain) {\n if (!cookieContentRegExp.test(opt.domain)) {\n throw new TypeError('option domain is invalid');\n }\n\n str += '; Domain=' + opt.domain;\n }\n\n if (opt.path) {\n if (!cookieContentRegExp.test(opt.path)) {\n throw new TypeError('option path is invalid');\n }\n\n str += '; Path=' + opt.path;\n }\n\n if (opt.expires) {\n const expires = opt.expires;\n\n if (!isDate(expires) || isNaN(expires.valueOf())) {\n throw new TypeError('option expires is invalid');\n }\n\n str += '; Expires=' + expires.toUTCString();\n }\n\n if (opt.httpOnly) {\n str += '; HttpOnly';\n }\n\n if (opt.secure) {\n str += '; Secure';\n }\n\n if (opt.priority) {\n // noinspection SuspiciousTypeOfGuard\n const priority = typeof opt.priority === 'string' ? opt.priority.toLowerCase() : opt.priority;\n\n switch (priority) {\n case 'low':\n str += '; Priority=Low';\n break;\n case 'medium':\n str += '; Priority=Medium';\n break;\n case 'high':\n str += '; Priority=High';\n break;\n default:\n throw new TypeError('option priority is invalid');\n }\n }\n\n if (opt.sameSite) {\n const sameSite = typeof opt.sameSite === 'string' ? opt.sameSite.toLowerCase() : opt.sameSite;\n\n switch (sameSite) {\n case true:\n str += '; SameSite=Strict';\n break;\n case 'lax':\n str += '; SameSite=Lax';\n break;\n case 'strict':\n str += '; SameSite=Strict';\n break;\n case 'none':\n str += '; SameSite=None';\n break;\n default:\n throw new TypeError('option sameSite is invalid');\n }\n }\n\n return str;\n}\n\nexport default {\n serialize,\n parse,\n};\n"],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import { IncomingMessage, ServerResponse } from 'http';
|
|
3
|
+
export type RequestType = IncomingMessage | Request;
|
|
4
|
+
export type ResponseType = ServerResponse;
|
|
5
|
+
export interface CreateCookieOptions extends Pick<CookieSerializeOptions, 'domain' | 'httpOnly' | 'path'> {
|
|
6
|
+
cookieName?: string;
|
|
7
|
+
value: string;
|
|
8
|
+
secure: boolean;
|
|
9
|
+
expires: Date;
|
|
10
|
+
silent?: boolean;
|
|
11
|
+
}
|
|
12
|
+
export interface RemoveCookiesOptions {
|
|
13
|
+
cookieNames?: string[];
|
|
14
|
+
isSecured: boolean;
|
|
15
|
+
cookieDomain: string;
|
|
16
|
+
res: ResponseType;
|
|
17
|
+
req?: RequestType;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Cookie serialization options
|
|
21
|
+
*/
|
|
22
|
+
export interface CookieSerializeOptions {
|
|
23
|
+
domain?: string | undefined;
|
|
24
|
+
expires?: Date | undefined;
|
|
25
|
+
httpOnly?: boolean | undefined;
|
|
26
|
+
maxAge?: number | undefined;
|
|
27
|
+
path?: string | undefined;
|
|
28
|
+
priority?: 'low' | 'medium' | 'high' | undefined;
|
|
29
|
+
sameSite?: true | false | 'lax' | 'strict' | 'none' | undefined;
|
|
30
|
+
secure?: boolean | undefined;
|
|
31
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","names":[],"sources":["../../../../../packages/nextjs/src/utils/cookies/types.ts"],"sourcesContent":["import { IncomingMessage, ServerResponse } from 'http';\n\nexport type RequestType = IncomingMessage | Request;\nexport type ResponseType = ServerResponse;\n\nexport interface CreateCookieOptions extends Pick<CookieSerializeOptions, 'domain' | 'httpOnly' | 'path'> {\n cookieName?: string;\n value: string;\n secure: boolean;\n expires: Date;\n silent?: boolean;\n}\n\nexport interface RemoveCookiesOptions {\n cookieNames?: string[];\n isSecured: boolean;\n cookieDomain: string;\n res: ResponseType;\n req?: RequestType;\n}\n\n/**\n * Cookie serialization options\n */\nexport interface CookieSerializeOptions {\n domain?: string | undefined;\n expires?: Date | undefined;\n httpOnly?: boolean | undefined;\n maxAge?: number | undefined;\n path?: string | undefined;\n priority?: 'low' | 'medium' | 'high' | undefined;\n sameSite?: true | false | 'lax' | 'strict' | 'none' | undefined;\n secure?: boolean | undefined;\n}\n"],"mappings":""}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import JwtManager from '../jwt';
|
|
2
|
+
import fronteggLogger from '../fronteggLogger';
|
|
3
|
+
export default async function createSession(cookie, encryption) {
|
|
4
|
+
const logger = fronteggLogger.child({
|
|
5
|
+
tag: 'SessionCreator.createSession'
|
|
6
|
+
});
|
|
7
|
+
logger.info('Creating new session');
|
|
8
|
+
try {
|
|
9
|
+
if (!cookie) {
|
|
10
|
+
logger.info('no cookies');
|
|
11
|
+
return undefined;
|
|
12
|
+
}
|
|
13
|
+
logger.debug('decrypting Session cookie');
|
|
14
|
+
const tokens = await encryption.unsealTokens(cookie);
|
|
15
|
+
if (!(tokens != null && tokens.accessToken)) {
|
|
16
|
+
logger.info('no accessToken in session');
|
|
17
|
+
return undefined;
|
|
18
|
+
}
|
|
19
|
+
const {
|
|
20
|
+
accessToken,
|
|
21
|
+
refreshToken
|
|
22
|
+
} = tokens;
|
|
23
|
+
logger.debug('Going to verify accessToken');
|
|
24
|
+
const {
|
|
25
|
+
payload
|
|
26
|
+
} = await JwtManager.verify(accessToken);
|
|
27
|
+
logger.debug('Access token verified successfully');
|
|
28
|
+
const session = {
|
|
29
|
+
accessToken,
|
|
30
|
+
user: payload,
|
|
31
|
+
refreshToken
|
|
32
|
+
};
|
|
33
|
+
logger.debug('Check if access token will expire soon');
|
|
34
|
+
if (session.user.exp * 1000 < Date.now()) {
|
|
35
|
+
return undefined;
|
|
36
|
+
}
|
|
37
|
+
logger.info('Successfully create session object');
|
|
38
|
+
return session;
|
|
39
|
+
} catch (e) {
|
|
40
|
+
logger.error('Failed to create session', e);
|
|
41
|
+
return undefined;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":["JwtManager","fronteggLogger","createSession","cookie","encryption","logger","child","tag","info","undefined","debug","tokens","unsealTokens","accessToken","refreshToken","payload","verify","session","user","exp","Date","now","e","error"],"sources":["../../../../../packages/nextjs/src/utils/createSession/index.ts"],"sourcesContent":["import JwtManager from '../jwt';\nimport type { EncryptionUtils, FronteggNextJSSession } from '../../types';\nimport fronteggLogger from '../fronteggLogger';\n\nexport default async function createSession(\n cookie: string | undefined,\n encryption: EncryptionUtils\n): Promise<FronteggNextJSSession | undefined> {\n const logger = fronteggLogger.child({ tag: 'SessionCreator.createSession' });\n logger.info('Creating new session');\n try {\n if (!cookie) {\n logger.info('no cookies');\n return undefined;\n }\n\n logger.debug('decrypting Session cookie');\n const tokens = await encryption.unsealTokens(cookie);\n if (!tokens?.accessToken) {\n logger.info('no accessToken in session');\n return undefined;\n }\n const { accessToken, refreshToken } = tokens;\n\n logger.debug('Going to verify accessToken');\n const { payload }: any = await JwtManager.verify(accessToken);\n\n logger.debug('Access token verified successfully');\n const session: FronteggNextJSSession = {\n accessToken,\n user: payload,\n refreshToken,\n };\n\n logger.debug('Check if access token will expire soon');\n if (session.user.exp * 1000 < Date.now()) {\n return undefined;\n }\n\n logger.info('Successfully create session object');\n return session;\n } catch (e) {\n logger.error('Failed to create session', e);\n return undefined;\n }\n}\n"],"mappings":"AAAA,OAAOA,UAAU,MAAM,QAAQ;AAE/B,OAAOC,cAAc,MAAM,mBAAmB;AAE9C,eAAe,eAAeC,aAAa,CACzCC,MAA0B,EAC1BC,UAA2B,EACiB;EAC5C,MAAMC,MAAM,GAAGJ,cAAc,CAACK,KAAK,CAAC;IAAEC,GAAG,EAAE;EAA+B,CAAC,CAAC;EAC5EF,MAAM,CAACG,IAAI,CAAC,sBAAsB,CAAC;EACnC,IAAI;IACF,IAAI,CAACL,MAAM,EAAE;MACXE,MAAM,CAACG,IAAI,CAAC,YAAY,CAAC;MACzB,OAAOC,SAAS;IAClB;IAEAJ,MAAM,CAACK,KAAK,CAAC,2BAA2B,CAAC;IACzC,MAAMC,MAAM,GAAG,MAAMP,UAAU,CAACQ,YAAY,CAACT,MAAM,CAAC;IACpD,IAAI,EAACQ,MAAM,YAANA,MAAM,CAAEE,WAAW,GAAE;MACxBR,MAAM,CAACG,IAAI,CAAC,2BAA2B,CAAC;MACxC,OAAOC,SAAS;IAClB;IACA,MAAM;MAAEI,WAAW;MAAEC;IAAa,CAAC,GAAGH,MAAM;IAE5CN,MAAM,CAACK,KAAK,CAAC,6BAA6B,CAAC;IAC3C,MAAM;MAAEK;IAAa,CAAC,GAAG,MAAMf,UAAU,CAACgB,MAAM,CAACH,WAAW,CAAC;IAE7DR,MAAM,CAACK,KAAK,CAAC,oCAAoC,CAAC;IAClD,MAAMO,OAA8B,GAAG;MACrCJ,WAAW;MACXK,IAAI,EAAEH,OAAO;MACbD;IACF,CAAC;IAEDT,MAAM,CAACK,KAAK,CAAC,wCAAwC,CAAC;IACtD,IAAIO,OAAO,CAACC,IAAI,CAACC,GAAG,GAAG,IAAI,GAAGC,IAAI,CAACC,GAAG,EAAE,EAAE;MACxC,OAAOZ,SAAS;IAClB;IAEAJ,MAAM,CAACG,IAAI,CAAC,oCAAoC,CAAC;IACjD,OAAOS,OAAO;EAChB,CAAC,CAAC,OAAOK,CAAC,EAAE;IACVjB,MAAM,CAACkB,KAAK,CAAC,0BAA0B,EAAED,CAAC,CAAC;IAC3C,OAAOb,SAAS;EAClB;AACF"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
// noinspection DuplicatedCode
|
|
2
|
+
// duplicated code for standard iron-session and iron-session/edge
|
|
3
|
+
|
|
4
|
+
import { unsealData, sealData } from 'iron-session';
|
|
5
|
+
import config from '../../config';
|
|
6
|
+
/**
|
|
7
|
+
* IMPORTANT NOTE:
|
|
8
|
+
* This utils can be used only in server/client runtime, for edge runtime use the ./utils/encryption-edge
|
|
9
|
+
**/
|
|
10
|
+
|
|
11
|
+
const unsealTokens = async data => {
|
|
12
|
+
const jwtData = await unsealData(data, {
|
|
13
|
+
password: config.password
|
|
14
|
+
});
|
|
15
|
+
return JSON.parse(jwtData);
|
|
16
|
+
};
|
|
17
|
+
const sealTokens = async (tokens, ttl) => {
|
|
18
|
+
const dataToSeal = JSON.stringify(tokens);
|
|
19
|
+
return sealData(dataToSeal, {
|
|
20
|
+
password: config.password,
|
|
21
|
+
ttl
|
|
22
|
+
});
|
|
23
|
+
};
|
|
24
|
+
const encryptionUtils = {
|
|
25
|
+
unsealTokens,
|
|
26
|
+
sealTokens
|
|
27
|
+
};
|
|
28
|
+
export default encryptionUtils;
|
|
29
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":["unsealData","sealData","config","unsealTokens","data","jwtData","password","JSON","parse","sealTokens","tokens","ttl","dataToSeal","stringify","encryptionUtils"],"sources":["../../../../../packages/nextjs/src/utils/encryption/index.ts"],"sourcesContent":["// noinspection DuplicatedCode\n// duplicated code for standard iron-session and iron-session/edge\n\nimport { unsealData, sealData } from 'iron-session';\nimport config from '../../config';\nimport type { EncryptionUtils, FronteggUserTokens } from '../../types';\n\n/**\n * IMPORTANT NOTE:\n * This utils can be used only in server/client runtime, for edge runtime use the ./utils/encryption-edge\n **/\n\nconst unsealTokens = async (data: string): Promise<FronteggUserTokens | undefined> => {\n const jwtData: string = await unsealData(data, {\n password: config.password,\n });\n return JSON.parse(jwtData);\n};\n\nconst sealTokens = async (tokens: FronteggUserTokens, ttl: number): Promise<string> => {\n const dataToSeal = JSON.stringify(tokens);\n return sealData(dataToSeal, {\n password: config.password,\n ttl,\n });\n};\n\nconst encryptionUtils: EncryptionUtils = {\n unsealTokens,\n sealTokens,\n};\n\nexport default encryptionUtils;\n"],"mappings":"AAAA;AACA;;AAEA,SAASA,UAAU,EAAEC,QAAQ,QAAQ,cAAc;AACnD,OAAOC,MAAM,MAAM,cAAc;AAGjC;AACA;AACA;AACA;;AAEA,MAAMC,YAAY,GAAG,MAAOC,IAAY,IAA8C;EACpF,MAAMC,OAAe,GAAG,MAAML,UAAU,CAACI,IAAI,EAAE;IAC7CE,QAAQ,EAAEJ,MAAM,CAACI;EACnB,CAAC,CAAC;EACF,OAAOC,IAAI,CAACC,KAAK,CAACH,OAAO,CAAC;AAC5B,CAAC;AAED,MAAMI,UAAU,GAAG,OAAOC,MAA0B,EAAEC,GAAW,KAAsB;EACrF,MAAMC,UAAU,GAAGL,IAAI,CAACM,SAAS,CAACH,MAAM,CAAC;EACzC,OAAOT,QAAQ,CAACW,UAAU,EAAE;IAC1BN,QAAQ,EAAEJ,MAAM,CAACI,QAAQ;IACzBK;EACF,CAAC,CAAC;AACJ,CAAC;AAED,MAAMG,eAAgC,GAAG;EACvCX,YAAY;EACZM;AACF,CAAC;AAED,eAAeK,eAAe"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
// noinspection DuplicatedCode
|
|
2
|
+
// duplicated code for standard iron-session and iron-session/edge
|
|
3
|
+
|
|
4
|
+
import config from '../../config';
|
|
5
|
+
import { unsealData, sealData } from 'iron-session/edge';
|
|
6
|
+
/**
|
|
7
|
+
* IMPORTANT NOTE:
|
|
8
|
+
* This utils can be used only in edge runtime, for server/client runtime use the ./utils/encryption
|
|
9
|
+
**/
|
|
10
|
+
|
|
11
|
+
const unsealTokens = async cookie => {
|
|
12
|
+
const jwtData = await unsealData(cookie, {
|
|
13
|
+
password: config.password
|
|
14
|
+
});
|
|
15
|
+
return JSON.parse(jwtData);
|
|
16
|
+
};
|
|
17
|
+
const sealTokens = async (tokens, ttl) => {
|
|
18
|
+
const dataToSeal = JSON.stringify(tokens);
|
|
19
|
+
return sealData(dataToSeal, {
|
|
20
|
+
password: config.password,
|
|
21
|
+
ttl
|
|
22
|
+
});
|
|
23
|
+
};
|
|
24
|
+
const encryptionUtils = {
|
|
25
|
+
unsealTokens,
|
|
26
|
+
sealTokens
|
|
27
|
+
};
|
|
28
|
+
export default encryptionUtils;
|
|
29
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":["config","unsealData","sealData","unsealTokens","cookie","jwtData","password","JSON","parse","sealTokens","tokens","ttl","dataToSeal","stringify","encryptionUtils"],"sources":["../../../../../packages/nextjs/src/utils/encryption-edge/index.ts"],"sourcesContent":["// noinspection DuplicatedCode\n// duplicated code for standard iron-session and iron-session/edge\n\nimport config from '../../config';\nimport { unsealData, sealData } from 'iron-session/edge';\nimport type { FronteggUserTokens, EncryptionUtils } from '../../types';\n\n/**\n * IMPORTANT NOTE:\n * This utils can be used only in edge runtime, for server/client runtime use the ./utils/encryption\n **/\n\nconst unsealTokens = async (cookie: string): Promise<FronteggUserTokens | undefined> => {\n const jwtData: string = await unsealData(cookie, {\n password: config.password,\n });\n return JSON.parse(jwtData);\n};\n\nconst sealTokens = async (tokens: FronteggUserTokens, ttl: number): Promise<string> => {\n const dataToSeal = JSON.stringify(tokens);\n return sealData(dataToSeal, {\n password: config.password,\n ttl,\n });\n};\n\nconst encryptionUtils: EncryptionUtils = {\n unsealTokens,\n sealTokens,\n};\n\nexport default encryptionUtils;\n"],"mappings":"AAAA;AACA;;AAEA,OAAOA,MAAM,MAAM,cAAc;AACjC,SAASC,UAAU,EAAEC,QAAQ,QAAQ,mBAAmB;AAGxD;AACA;AACA;AACA;;AAEA,MAAMC,YAAY,GAAG,MAAOC,MAAc,IAA8C;EACtF,MAAMC,OAAe,GAAG,MAAMJ,UAAU,CAACG,MAAM,EAAE;IAC/CE,QAAQ,EAAEN,MAAM,CAACM;EACnB,CAAC,CAAC;EACF,OAAOC,IAAI,CAACC,KAAK,CAACH,OAAO,CAAC;AAC5B,CAAC;AAED,MAAMI,UAAU,GAAG,OAAOC,MAA0B,EAAEC,GAAW,KAAsB;EACrF,MAAMC,UAAU,GAAGL,IAAI,CAACM,SAAS,CAACH,MAAM,CAAC;EACzC,OAAOR,QAAQ,CAACU,UAAU,EAAE;IAC1BN,QAAQ,EAAEN,MAAM,CAACM,QAAQ;IACzBK;EACF,CAAC,CAAC;AACJ,CAAC;AAED,MAAMG,eAAgC,GAAG;EACvCX,YAAY;EACZM;AACF,CAAC;AAED,eAAeK,eAAe"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export class FronteggEnvNotFound extends Error {
|
|
2
|
+
constructor(...name) {
|
|
3
|
+
const message = `Missing one or more environment variables (${name.join(', ')}). add it to the .env.local file.`;
|
|
4
|
+
super(message);
|
|
5
|
+
Object.setPrototypeOf(this, FronteggEnvNotFound.prototype);
|
|
6
|
+
}
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=FronteggEnvNotFound.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FronteggEnvNotFound.js","names":["FronteggEnvNotFound","Error","constructor","name","message","join","Object","setPrototypeOf","prototype"],"sources":["../../../../../packages/nextjs/src/utils/errors/FronteggEnvNotFound.ts"],"sourcesContent":["export class FronteggEnvNotFound extends Error {\n constructor(...name: string[]) {\n const message = `Missing one or more environment variables (${name.join(', ')}). add it to the .env.local file.`;\n super(message);\n Object.setPrototypeOf(this, FronteggEnvNotFound.prototype);\n }\n}\n"],"mappings":"AAAA,OAAO,MAAMA,mBAAmB,SAASC,KAAK,CAAC;EAC7CC,WAAW,CAAC,GAAGC,IAAc,EAAE;IAC7B,MAAMC,OAAO,GAAI,8CAA6CD,IAAI,CAACE,IAAI,CAAC,IAAI,CAAE,mCAAkC;IAChH,KAAK,CAACD,OAAO,CAAC;IACdE,MAAM,CAACC,cAAc,CAAC,IAAI,EAAEP,mBAAmB,CAACQ,SAAS,CAAC;EAC5D;AACF"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export class InvalidFronteggEnv extends Error {
|
|
2
|
+
constructor(name, type) {
|
|
3
|
+
const message = `Invalid environment variable (${name}), must be a valid ${type}`;
|
|
4
|
+
super(message);
|
|
5
|
+
Object.setPrototypeOf(this, InvalidFronteggEnv.prototype);
|
|
6
|
+
}
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=InvalidFronteggEnv.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"InvalidFronteggEnv.js","names":["InvalidFronteggEnv","Error","constructor","name","type","message","Object","setPrototypeOf","prototype"],"sources":["../../../../../packages/nextjs/src/utils/errors/InvalidFronteggEnv.ts"],"sourcesContent":["export class InvalidFronteggEnv extends Error {\n constructor(name: string, type: string) {\n const message = `Invalid environment variable (${name}), must be a valid ${type}`;\n super(message);\n Object.setPrototypeOf(this, InvalidFronteggEnv.prototype);\n }\n}\n"],"mappings":"AAAA,OAAO,MAAMA,kBAAkB,SAASC,KAAK,CAAC;EAC5CC,WAAW,CAACC,IAAY,EAAEC,IAAY,EAAE;IACtC,MAAMC,OAAO,GAAI,iCAAgCF,IAAK,sBAAqBC,IAAK,EAAC;IACjF,KAAK,CAACC,OAAO,CAAC;IACdC,MAAM,CAACC,cAAc,CAAC,IAAI,EAAEP,kBAAkB,CAACQ,SAAS,CAAC;EAC3D;AACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../../../../packages/nextjs/src/utils/errors/index.ts"],"sourcesContent":["export * from './FronteggEnvNotFound';\nexport * from './InvalidFronteggEnv';\n"],"mappings":"AAAA,cAAc,uBAAuB;AACrC,cAAc,sBAAsB"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { AllUserData, FronteggNextJSSession } from '../../types';
|
|
2
|
+
type FetchUserDataOptions = {
|
|
3
|
+
getSession: () => Promise<FronteggNextJSSession | undefined | null>;
|
|
4
|
+
getHeaders: () => Promise<Record<string, string | string[] | undefined>>;
|
|
5
|
+
};
|
|
6
|
+
export default function fetchUserData(options: FetchUserDataOptions): Promise<AllUserData>;
|
|
7
|
+
export {};
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import _extends from "@babel/runtime/helpers/esm/extends";
|
|
2
|
+
import { getTenants, getUsers } from '../../api';
|
|
3
|
+
import { calculateExpiresInFromExp } from '../common';
|
|
4
|
+
import fronteggLogger from '../fronteggLogger';
|
|
5
|
+
export default async function fetchUserData(options) {
|
|
6
|
+
const {
|
|
7
|
+
getSession,
|
|
8
|
+
getHeaders
|
|
9
|
+
} = options;
|
|
10
|
+
const logger = fronteggLogger.child({
|
|
11
|
+
tag: 'fetchUserData.getAllUserData'
|
|
12
|
+
});
|
|
13
|
+
try {
|
|
14
|
+
const session = await getSession();
|
|
15
|
+
if (!session) {
|
|
16
|
+
logger.info('No session found');
|
|
17
|
+
return {};
|
|
18
|
+
}
|
|
19
|
+
const {
|
|
20
|
+
accessToken
|
|
21
|
+
} = session;
|
|
22
|
+
const reqHeaders = await getHeaders();
|
|
23
|
+
const headers = _extends({}, reqHeaders, {
|
|
24
|
+
authorization: `Bearer ${accessToken}`
|
|
25
|
+
});
|
|
26
|
+
logger.debug('Retrieving user data...');
|
|
27
|
+
const [baseUserResult, tenantsResult] = await Promise.allSettled([getUsers(headers), getTenants(headers)]);
|
|
28
|
+
logger.debug('Retrieved user data:', 'baseUserResult: ', baseUserResult.status, 'tenantsResult:', tenantsResult.status);
|
|
29
|
+
const baseUser = baseUserResult.status === 'fulfilled' ? baseUserResult.value : null;
|
|
30
|
+
const tenants = tenantsResult.status === 'fulfilled' ? tenantsResult.value : null;
|
|
31
|
+
if (!baseUser || !tenants) {
|
|
32
|
+
logger.info('No base user or tenants found');
|
|
33
|
+
return {};
|
|
34
|
+
}
|
|
35
|
+
const user = _extends({}, session.user, baseUser, {
|
|
36
|
+
expiresIn: calculateExpiresInFromExp(session.user.exp)
|
|
37
|
+
});
|
|
38
|
+
logger.info('Retrieved all user data successfully');
|
|
39
|
+
return {
|
|
40
|
+
user,
|
|
41
|
+
session,
|
|
42
|
+
tenants
|
|
43
|
+
};
|
|
44
|
+
} catch (e) {
|
|
45
|
+
// logger.error(e.message, e);
|
|
46
|
+
return {};
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":["getTenants","getUsers","calculateExpiresInFromExp","fronteggLogger","fetchUserData","options","getSession","getHeaders","logger","child","tag","session","info","accessToken","reqHeaders","headers","authorization","debug","baseUserResult","tenantsResult","Promise","allSettled","status","baseUser","value","tenants","user","expiresIn","exp","e"],"sources":["../../../../../packages/nextjs/src/utils/fetchUserData/index.ts"],"sourcesContent":["import { AllUserData, FronteggNextJSSession } from '../../types';\nimport { getTenants, getUsers } from '../../api';\nimport { calculateExpiresInFromExp } from '../common';\nimport fronteggLogger from '../fronteggLogger';\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 = { ...reqHeaders, authorization: `Bearer ${accessToken}` };\n\n logger.debug('Retrieving user data...');\n const [baseUserResult, tenantsResult] = await Promise.allSettled([getUsers(headers), getTenants(headers)]);\n logger.debug(\n 'Retrieved user data:',\n 'baseUserResult: ',\n baseUserResult.status,\n 'tenantsResult:',\n tenantsResult.status\n );\n\n const baseUser = baseUserResult.status === 'fulfilled' ? baseUserResult.value : null;\n const tenants = tenantsResult.status === 'fulfilled' ? tenantsResult.value : null;\n\n if (!baseUser || !tenants) {\n logger.info('No base user or tenants found');\n return {};\n }\n\n const user = {\n ...session.user,\n ...baseUser!,\n expiresIn: calculateExpiresInFromExp(session.user.exp),\n };\n\n logger.info('Retrieved all user data successfully');\n\n return { user, session, tenants };\n } catch (e: any) {\n // logger.error(e.message, e);\n return {};\n }\n}\n"],"mappings":";AACA,SAASA,UAAU,EAAEC,QAAQ,QAAQ,WAAW;AAChD,SAASC,yBAAyB,QAAQ,WAAW;AACrD,OAAOC,cAAc,MAAM,mBAAmB;AAO9C,eAAe,eAAeC,aAAa,CAACC,OAA6B,EAAwB;EAC/F,MAAM;IAAEC,UAAU;IAAEC;EAAW,CAAC,GAAGF,OAAO;EAE1C,MAAMG,MAAM,GAAGL,cAAc,CAACM,KAAK,CAAC;IAAEC,GAAG,EAAE;EAA+B,CAAC,CAAC;EAC5E,IAAI;IACF,MAAMC,OAAO,GAAG,MAAML,UAAU,EAAE;IAClC,IAAI,CAACK,OAAO,EAAE;MACZH,MAAM,CAACI,IAAI,CAAC,kBAAkB,CAAC;MAC/B,OAAO,CAAC,CAAC;IACX;IAEA,MAAM;MAAEC;IAAY,CAAC,GAAGF,OAAO;IAC/B,MAAMG,UAAU,GAAG,MAAMP,UAAU,EAAE;IACrC,MAAMQ,OAAO,gBAAQD,UAAU;MAAEE,aAAa,EAAG,UAASH,WAAY;IAAC,EAAE;IAEzEL,MAAM,CAACS,KAAK,CAAC,yBAAyB,CAAC;IACvC,MAAM,CAACC,cAAc,EAAEC,aAAa,CAAC,GAAG,MAAMC,OAAO,CAACC,UAAU,CAAC,CAACpB,QAAQ,CAACc,OAAO,CAAC,EAAEf,UAAU,CAACe,OAAO,CAAC,CAAC,CAAC;IAC1GP,MAAM,CAACS,KAAK,CACV,sBAAsB,EACtB,kBAAkB,EAClBC,cAAc,CAACI,MAAM,EACrB,gBAAgB,EAChBH,aAAa,CAACG,MAAM,CACrB;IAED,MAAMC,QAAQ,GAAGL,cAAc,CAACI,MAAM,KAAK,WAAW,GAAGJ,cAAc,CAACM,KAAK,GAAG,IAAI;IACpF,MAAMC,OAAO,GAAGN,aAAa,CAACG,MAAM,KAAK,WAAW,GAAGH,aAAa,CAACK,KAAK,GAAG,IAAI;IAEjF,IAAI,CAACD,QAAQ,IAAI,CAACE,OAAO,EAAE;MACzBjB,MAAM,CAACI,IAAI,CAAC,+BAA+B,CAAC;MAC5C,OAAO,CAAC,CAAC;IACX;IAEA,MAAMc,IAAI,gBACLf,OAAO,CAACe,IAAI,EACZH,QAAQ;MACXI,SAAS,EAAEzB,yBAAyB,CAACS,OAAO,CAACe,IAAI,CAACE,GAAG;IAAC,EACvD;IAEDpB,MAAM,CAACI,IAAI,CAAC,sCAAsC,CAAC;IAEnD,OAAO;MAAEc,IAAI;MAAEf,OAAO;MAAEc;IAAQ,CAAC;EACnC,CAAC,CAAC,OAAOI,CAAM,EAAE;IACf;IACA,OAAO,CAAC,CAAC;EACX;AACF"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Map between level code and severity message
|
|
3
|
+
*/
|
|
4
|
+
export declare const LEVELS: Record<number, string>;
|
|
5
|
+
/**
|
|
6
|
+
* Map between severity message and level code
|
|
7
|
+
*/
|
|
8
|
+
export declare const LEVEL_NAMES: {
|
|
9
|
+
error: number;
|
|
10
|
+
warn: number;
|
|
11
|
+
info: number;
|
|
12
|
+
debug: number;
|
|
13
|
+
};
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Map between level code and severity message
|
|
3
|
+
*/
|
|
4
|
+
export const LEVELS = {
|
|
5
|
+
40: 'ERROR',
|
|
6
|
+
30: 'WARN',
|
|
7
|
+
20: 'INFO',
|
|
8
|
+
10: 'DEBUG'
|
|
9
|
+
};
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Map between severity message and level code
|
|
13
|
+
*/
|
|
14
|
+
export const LEVEL_NAMES = {
|
|
15
|
+
error: 40,
|
|
16
|
+
warn: 30,
|
|
17
|
+
info: 20,
|
|
18
|
+
debug: 10
|
|
19
|
+
};
|
|
20
|
+
//# sourceMappingURL=constants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.js","names":["LEVELS","LEVEL_NAMES","error","warn","info","debug"],"sources":["../../../../../packages/nextjs/src/utils/fronteggLogger/constants.ts"],"sourcesContent":["/**\n * Map between level code and severity message\n */\nexport const LEVELS: Record<number, string> = {\n 40: 'ERROR',\n 30: 'WARN',\n 20: 'INFO',\n 10: 'DEBUG',\n};\n\n/**\n * Map between severity message and level code\n */\nexport const LEVEL_NAMES = {\n error: 40,\n warn: 30,\n info: 20,\n debug: 10,\n};\n"],"mappings":"AAAA;AACA;AACA;AACA,OAAO,MAAMA,MAA8B,GAAG;EAC5C,EAAE,EAAE,OAAO;EACX,EAAE,EAAE,MAAM;EACV,EAAE,EAAE,MAAM;EACV,EAAE,EAAE;AACN,CAAC;;AAED;AACA;AACA;AACA,OAAO,MAAMC,WAAW,GAAG;EACzBC,KAAK,EAAE,EAAE;EACTC,IAAI,EAAE,EAAE;EACRC,IAAI,EAAE,EAAE;EACRC,KAAK,EAAE;AACT,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { LEVEL_NAMES } from './constants';
|
|
2
|
+
type FronteggLoggerOptions = {
|
|
3
|
+
tag: string;
|
|
4
|
+
level?: keyof typeof LEVEL_NAMES;
|
|
5
|
+
};
|
|
6
|
+
declare class FronteggLogger {
|
|
7
|
+
private readonly tag;
|
|
8
|
+
private readonly level;
|
|
9
|
+
constructor(options: FronteggLoggerOptions);
|
|
10
|
+
private prepare;
|
|
11
|
+
debug(...args: any[]): void;
|
|
12
|
+
info(...args: any[]): void;
|
|
13
|
+
warn(...args: any[]): void;
|
|
14
|
+
error(...args: any[]): void;
|
|
15
|
+
static child(options: FronteggLoggerOptions): FronteggLogger;
|
|
16
|
+
}
|
|
17
|
+
export default FronteggLogger;
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { LEVEL_NAMES, LEVELS } from './constants';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* @see [enabling-debug-logging](https://docs.github.com/en/actions/monitoring-and-troubleshooting-workflows/enabling-debug-logging)
|
|
5
|
+
* in GitHub actions in failed tests for more debugging logs
|
|
6
|
+
*/
|
|
7
|
+
const isGithubRunnerDebugMode = process.env.ACTIONS_STEP_DEBUG === 'true' || process.env.ACTIONS_RUNNER_DEBUG === 'true';
|
|
8
|
+
let logLevel = 'warn';
|
|
9
|
+
if (process.env.FRONTEGG_LOG_LEVEL) {
|
|
10
|
+
logLevel = process.env.FRONTEGG_LOG_LEVEL;
|
|
11
|
+
}
|
|
12
|
+
if (isGithubRunnerDebugMode) {
|
|
13
|
+
logLevel = 'debug';
|
|
14
|
+
}
|
|
15
|
+
if (Object.keys(LEVEL_NAMES).indexOf(logLevel) === -1) {
|
|
16
|
+
logLevel = 'warn';
|
|
17
|
+
}
|
|
18
|
+
const maxTagLength = 25;
|
|
19
|
+
function repeat(num) {
|
|
20
|
+
return [...new Array(num)].map(() => ' ').join('');
|
|
21
|
+
}
|
|
22
|
+
class FronteggLogger {
|
|
23
|
+
constructor(options) {
|
|
24
|
+
var _options$level;
|
|
25
|
+
this.tag = void 0;
|
|
26
|
+
this.level = void 0;
|
|
27
|
+
if (options.tag.length > maxTagLength) {
|
|
28
|
+
this.tag = options.tag.slice(0, 7) + '...' + options.tag.slice(options.tag.length - maxTagLength + 10);
|
|
29
|
+
} else {
|
|
30
|
+
this.tag = repeat(maxTagLength - options.tag.length) + options.tag;
|
|
31
|
+
}
|
|
32
|
+
this.level = (_options$level = options.level) != null ? _options$level : logLevel;
|
|
33
|
+
}
|
|
34
|
+
prepare(printLevel, args) {
|
|
35
|
+
const levelName = LEVELS[LEVEL_NAMES[printLevel]];
|
|
36
|
+
return [new Date().toISOString(), `|${levelName}| ${this.tag}:`, ...args];
|
|
37
|
+
}
|
|
38
|
+
debug(...args) {
|
|
39
|
+
if (LEVEL_NAMES[this.level] <= LEVEL_NAMES.debug) {
|
|
40
|
+
console.debug.apply(console, this.prepare('debug', args));
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
info(...args) {
|
|
44
|
+
if (LEVEL_NAMES[this.level] <= LEVEL_NAMES.info) {
|
|
45
|
+
console.info.apply(console, this.prepare('info', args));
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
warn(...args) {
|
|
49
|
+
if (LEVEL_NAMES[this.level] <= LEVEL_NAMES.warn) {
|
|
50
|
+
console.warn.apply(console, this.prepare('warn', args));
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
error(...args) {
|
|
54
|
+
console.error.apply(console, this.prepare('error', args));
|
|
55
|
+
}
|
|
56
|
+
static child(options) {
|
|
57
|
+
return new FronteggLogger(options);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
export default FronteggLogger;
|
|
61
|
+
//# sourceMappingURL=index.js.map
|