@smg-automotive/auth 6.8.0-auth0-update-access-token-with-buffer.1 → 6.8.0-auth0-update-split-middleware.1

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 (39) hide show
  1. package/dist/cjs/server/middleware/index.js +89 -0
  2. package/dist/cjs/server/middleware/index.js.map +1 -0
  3. package/dist/cjs/server/middleware/login.d.ts +7 -0
  4. package/dist/cjs/server/middleware/login.js +25 -0
  5. package/dist/cjs/server/middleware/login.js.map +1 -0
  6. package/dist/cjs/server/middleware/logout.d.ts +15 -0
  7. package/dist/cjs/server/middleware/logout.js +121 -0
  8. package/dist/cjs/server/middleware/logout.js.map +1 -0
  9. package/dist/cjs/server/middleware/protectRoute.d.ts +14 -0
  10. package/dist/cjs/server/middleware/protectRoute.js +61 -0
  11. package/dist/cjs/server/middleware/protectRoute.js.map +1 -0
  12. package/dist/cjs/server/middleware/token.d.ts +11 -0
  13. package/dist/cjs/server/middleware/token.js +29 -0
  14. package/dist/cjs/server/middleware/token.js.map +1 -0
  15. package/dist/cjs/server/middleware/types.d.ts +5 -0
  16. package/dist/cjs/server.js +2 -2
  17. package/dist/esm/server/middleware/index.js +87 -0
  18. package/dist/esm/server/middleware/index.js.map +1 -0
  19. package/dist/esm/server/middleware/login.d.ts +7 -0
  20. package/dist/esm/server/middleware/login.js +23 -0
  21. package/dist/esm/server/middleware/login.js.map +1 -0
  22. package/dist/esm/server/middleware/logout.d.ts +15 -0
  23. package/dist/esm/server/middleware/logout.js +118 -0
  24. package/dist/esm/server/middleware/logout.js.map +1 -0
  25. package/dist/esm/server/middleware/protectRoute.d.ts +14 -0
  26. package/dist/esm/server/middleware/protectRoute.js +59 -0
  27. package/dist/esm/server/middleware/protectRoute.js.map +1 -0
  28. package/dist/esm/server/middleware/token.d.ts +11 -0
  29. package/dist/esm/server/middleware/token.js +27 -0
  30. package/dist/esm/server/middleware/token.js.map +1 -0
  31. package/dist/esm/server/middleware/types.d.ts +5 -0
  32. package/dist/esm/server.js +1 -1
  33. package/package.json +1 -1
  34. package/dist/cjs/server/middleware.js +0 -219
  35. package/dist/cjs/server/middleware.js.map +0 -1
  36. package/dist/esm/server/middleware.js +0 -217
  37. package/dist/esm/server/middleware.js.map +0 -1
  38. /package/dist/cjs/server/{middleware.d.ts → middleware/index.d.ts} +0 -0
  39. /package/dist/esm/server/{middleware.d.ts → middleware/index.d.ts} +0 -0
@@ -1,217 +0,0 @@
1
- import { NextResponse } from 'next/server';
2
- import { getLoginLink } from '../lib/authLinks.js';
3
- import { getAuth0Config } from '../config/auth0.js';
4
- import { getAuth0Instance } from './getAuth0Instance.js';
5
-
6
- const redirectToLogin = ({ auth0Config, language, returnTo, origin, }) => {
7
- const loginUrl = getLoginLink({
8
- auth0Config,
9
- language,
10
- returnTo,
11
- });
12
- return NextResponse.redirect(new URL(loginUrl, origin), {
13
- status: 307,
14
- });
15
- };
16
- const isAuthRoute = (pathname, auth0Config) => {
17
- const { loginEndpoint, logoutEndpoint, callbackEndpoint, userProfileEndpoint, tokenEndpoint, } = auth0Config;
18
- return [
19
- loginEndpoint,
20
- logoutEndpoint,
21
- callbackEndpoint,
22
- userProfileEndpoint,
23
- tokenEndpoint,
24
- ].includes(pathname);
25
- };
26
- const getLegacyCookieDomain = (hostname) => {
27
- const parts = hostname.split('.');
28
- if (parts.length < 2)
29
- return `.${hostname}`;
30
- const base = parts.slice(-2).join('.');
31
- return `.${base}`;
32
- };
33
- const getOtherDomainHost = (currentHost) => {
34
- if (currentHost.includes('autoscout24')) {
35
- return currentHost.replace('autoscout24', 'motoscout24');
36
- }
37
- if (currentHost.includes('motoscout24')) {
38
- return currentHost.replace('motoscout24', 'autoscout24');
39
- }
40
- return currentHost;
41
- };
42
- const validateReturnTo = ({ pathOrUrl, host, protocol, otherDomainHost, crossDomainLogout, }) => {
43
- if (typeof pathOrUrl !== 'string')
44
- return false;
45
- if (pathOrUrl.length > 2048)
46
- return false;
47
- try {
48
- const decodedPathOrUrl = decodeURIComponent(pathOrUrl);
49
- const isUrl = decodedPathOrUrl.startsWith('http');
50
- const parsedUrlOrPath = new URL(isUrl ? decodedPathOrUrl : `${protocol}://${host}${decodedPathOrUrl}`);
51
- const decodedPath = parsedUrlOrPath.pathname;
52
- if (crossDomainLogout &&
53
- isUrl &&
54
- parsedUrlOrPath.host !== otherDomainHost) {
55
- return false;
56
- }
57
- if (!crossDomainLogout && parsedUrlOrPath.host !== host) {
58
- return false;
59
- }
60
- if (!decodedPath.startsWith('/') || decodedPath.startsWith('//')) {
61
- return false;
62
- }
63
- // Limit chars in return to path to prevent injections
64
- // eslint-disable-next-line @typescript-eslint/naming-convention
65
- const SAFE_PATH_REGEX = /^\/[a-zA-Z0-9/_\-?.=]*$/;
66
- return SAFE_PATH_REGEX.test(decodedPath);
67
- }
68
- catch (error) {
69
- // eslint-disable-next-line no-console
70
- console.warn('Error parsing URL or path:', error);
71
- return false;
72
- }
73
- };
74
- const authMiddleware = async ({ request, isProtectedRoute, language, host, protocol, isProxied, onError, }) => {
75
- const { origin, pathname, search } = request.nextUrl;
76
- const searchParams = new URLSearchParams(search);
77
- const auth0Instance = getAuth0Instance({ host, protocol, isProxied });
78
- const auth0Config = getAuth0Config({ isProxied });
79
- const { logoutEndpoint, loginEndpoint, tokenEndpoint, globalAuthErrorPath, languageConfig, selectedSellerIdCookie, impersonatedSellerIdCookie, } = auth0Config;
80
- const isAuthErrorRoute = pathname.endsWith(globalAuthErrorPath);
81
- if (pathname === logoutEndpoint) {
82
- const specifiedReturnTo = searchParams.get('returnTo') || '';
83
- const crossDomainLogout = searchParams.get('crossDomain') === 'true';
84
- const otherDomainHost = getOtherDomainHost(host);
85
- let returnTo = `/${searchParams.get('locale') || languageConfig.default}`;
86
- const isSafePath = validateReturnTo({
87
- protocol,
88
- host,
89
- otherDomainHost,
90
- pathOrUrl: specifiedReturnTo,
91
- crossDomainLogout,
92
- });
93
- if (isSafePath) {
94
- returnTo = specifiedReturnTo;
95
- }
96
- if (!crossDomainLogout && otherDomainHost && otherDomainHost !== host) {
97
- const currentDomainUrl = `${protocol}://${host}`;
98
- const backToCurrentDomainUrl = new URL(logoutEndpoint, currentDomainUrl);
99
- backToCurrentDomainUrl.searchParams.set('returnTo', returnTo);
100
- backToCurrentDomainUrl.searchParams.set('crossDomain', 'true');
101
- const otherDomainLogoutUrl = new URL(logoutEndpoint, `${protocol}://${otherDomainHost}`);
102
- otherDomainLogoutUrl.searchParams.set('crossDomain', 'true');
103
- otherDomainLogoutUrl.searchParams.set('returnTo', backToCurrentDomainUrl.toString());
104
- return NextResponse.redirect(otherDomainLogoutUrl, {
105
- status: 302,
106
- });
107
- }
108
- searchParams.set('returnTo', returnTo);
109
- request.nextUrl.search = searchParams.toString();
110
- }
111
- if (pathname === loginEndpoint) {
112
- const hasSellerId = searchParams.has('seller_id');
113
- if (!hasSellerId) {
114
- const sellerId = request.cookies.get(selectedSellerIdCookie.name)?.value;
115
- if (sellerId) {
116
- searchParams.set('seller_id', sellerId);
117
- }
118
- }
119
- const hasImpersonateSellerId = searchParams.has('impersonate_seller_id');
120
- if (!hasImpersonateSellerId) {
121
- const impersonatedSellerId = request.cookies.get(impersonatedSellerIdCookie.name)?.value;
122
- if (impersonatedSellerId) {
123
- searchParams.set('impersonate_seller_id', impersonatedSellerId);
124
- }
125
- }
126
- request.nextUrl.search = searchParams.toString();
127
- }
128
- const authResponse = await auth0Instance.middleware(request);
129
- if (pathname === logoutEndpoint) {
130
- const { authCookieNames, legacyAccessTokenName, legacyRefreshTokenName } = auth0Config;
131
- authCookieNames.forEach((cookieName) => {
132
- authResponse.cookies.delete({
133
- name: cookieName,
134
- maxAge: 0,
135
- path: '/',
136
- });
137
- authResponse.cookies.delete({
138
- name: `${cookieName}__0`,
139
- maxAge: 0,
140
- path: '/',
141
- });
142
- });
143
- const legacyCookieDomain = getLegacyCookieDomain(host);
144
- authResponse.cookies.delete({
145
- name: legacyAccessTokenName,
146
- maxAge: 0,
147
- path: '/',
148
- domain: legacyCookieDomain,
149
- });
150
- authResponse.cookies.delete({
151
- name: legacyRefreshTokenName,
152
- maxAge: 0,
153
- path: '/',
154
- domain: legacyCookieDomain,
155
- });
156
- }
157
- if (pathname === tokenEndpoint) {
158
- const sellerId = searchParams.get('seller_id');
159
- const session = await auth0Instance.getSession(request);
160
- if (sellerId && session?.user) {
161
- const loginUrl = getLoginLink({
162
- auth0Config,
163
- language,
164
- returnTo: tokenEndpoint,
165
- selectedSellerId: sellerId,
166
- });
167
- return NextResponse.redirect(new URL(loginUrl, origin), { status: 302 });
168
- }
169
- }
170
- if (isAuthRoute(pathname, auth0Config) || isAuthErrorRoute) {
171
- return authResponse;
172
- }
173
- const isProtected = !isAuthErrorRoute && isProtectedRoute(pathname);
174
- const session = await auth0Instance.getSession(request);
175
- if (!isProtected && !session?.user) {
176
- return authResponse;
177
- }
178
- if (!session && isProtected) {
179
- return redirectToLogin({
180
- auth0Config,
181
- language,
182
- returnTo: `${pathname}${search}`,
183
- origin,
184
- });
185
- }
186
- try {
187
- const shouldRefresh = (session?.tokenSet.expiresAt || 0) < Date.now() / 1000 + 30;
188
- await auth0Instance.getAccessToken(request, authResponse, {
189
- refresh: shouldRefresh,
190
- });
191
- }
192
- catch (error) {
193
- const authError = error;
194
- onError?.(authError);
195
- if (!isProtected) {
196
- return authResponse;
197
- }
198
- return redirectToLogin({
199
- auth0Config,
200
- language,
201
- returnTo: `${pathname}${search}`,
202
- origin,
203
- });
204
- }
205
- const responseWithCombinedHeaders = NextResponse.next({
206
- request: {
207
- headers: request.headers,
208
- },
209
- });
210
- authResponse.headers.forEach((value, key) => {
211
- responseWithCombinedHeaders.headers.set(key, value);
212
- });
213
- return responseWithCombinedHeaders;
214
- };
215
-
216
- export { authMiddleware };
217
- //# sourceMappingURL=middleware.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"middleware.js","sources":["../../../../src/server/middleware.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}