@smg-automotive/auth 6.8.0-auth0-update-root.7 → 6.8.0-auth0-update-access-token-endpoint.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 (57) hide show
  1. package/dist/cjs/config/auth0.js +1 -2
  2. package/dist/cjs/config/auth0.js.map +1 -1
  3. package/dist/cjs/server/getAuth0Instance.js +1 -0
  4. package/dist/cjs/server/getAuth0Instance.js.map +1 -1
  5. package/dist/cjs/server/middleware/combineHeaders.d.ts +5 -0
  6. package/dist/cjs/server/middleware/combineHeaders.js +11 -0
  7. package/dist/cjs/server/middleware/combineHeaders.js.map +1 -0
  8. package/dist/cjs/server/middleware/index.js +91 -0
  9. package/dist/cjs/server/middleware/index.js.map +1 -0
  10. package/dist/cjs/server/middleware/login.d.ts +6 -0
  11. package/dist/cjs/server/middleware/login.js +25 -0
  12. package/dist/cjs/server/middleware/login.js.map +1 -0
  13. package/dist/cjs/server/middleware/logout.d.ts +14 -0
  14. package/dist/cjs/server/middleware/logout.js +118 -0
  15. package/dist/cjs/server/middleware/logout.js.map +1 -0
  16. package/dist/cjs/server/middleware/protectRoute.d.ts +13 -0
  17. package/dist/cjs/server/middleware/protectRoute.js +51 -0
  18. package/dist/cjs/server/middleware/protectRoute.js.map +1 -0
  19. package/dist/cjs/server/middleware/refreshAccessToken.d.ts +9 -0
  20. package/dist/cjs/server/middleware/refreshAccessToken.js +17 -0
  21. package/dist/cjs/server/middleware/refreshAccessToken.js.map +1 -0
  22. package/dist/cjs/server/middleware/token.d.ts +12 -0
  23. package/dist/cjs/server/middleware/token.js +67 -0
  24. package/dist/cjs/server/middleware/token.js.map +1 -0
  25. package/dist/cjs/server.js +2 -2
  26. package/dist/esm/config/auth0.js +1 -2
  27. package/dist/esm/config/auth0.js.map +1 -1
  28. package/dist/esm/server/getAuth0Instance.js +1 -0
  29. package/dist/esm/server/getAuth0Instance.js.map +1 -1
  30. package/dist/esm/server/middleware/combineHeaders.d.ts +5 -0
  31. package/dist/esm/server/middleware/combineHeaders.js +9 -0
  32. package/dist/esm/server/middleware/combineHeaders.js.map +1 -0
  33. package/dist/esm/server/middleware/index.js +89 -0
  34. package/dist/esm/server/middleware/index.js.map +1 -0
  35. package/dist/esm/server/middleware/login.d.ts +6 -0
  36. package/dist/esm/server/middleware/login.js +23 -0
  37. package/dist/esm/server/middleware/login.js.map +1 -0
  38. package/dist/esm/server/middleware/logout.d.ts +14 -0
  39. package/dist/esm/server/middleware/logout.js +115 -0
  40. package/dist/esm/server/middleware/logout.js.map +1 -0
  41. package/dist/esm/server/middleware/protectRoute.d.ts +13 -0
  42. package/dist/esm/server/middleware/protectRoute.js +49 -0
  43. package/dist/esm/server/middleware/protectRoute.js.map +1 -0
  44. package/dist/esm/server/middleware/refreshAccessToken.d.ts +9 -0
  45. package/dist/esm/server/middleware/refreshAccessToken.js +15 -0
  46. package/dist/esm/server/middleware/refreshAccessToken.js.map +1 -0
  47. package/dist/esm/server/middleware/token.d.ts +12 -0
  48. package/dist/esm/server/middleware/token.js +65 -0
  49. package/dist/esm/server/middleware/token.js.map +1 -0
  50. package/dist/esm/server.js +1 -1
  51. package/package.json +1 -1
  52. package/dist/cjs/server/middleware.js +0 -219
  53. package/dist/cjs/server/middleware.js.map +0 -1
  54. package/dist/esm/server/middleware.js +0 -217
  55. package/dist/esm/server/middleware.js.map +0 -1
  56. /package/dist/cjs/server/{middleware.d.ts → middleware/index.d.ts} +0 -0
  57. /package/dist/esm/server/{middleware.d.ts → middleware/index.d.ts} +0 -0
@@ -0,0 +1,89 @@
1
+ import { NextResponse } from 'next/server';
2
+ import { getAuth0Config } from '../../config/auth0.js';
3
+ import { getAuth0Instance } from '../getAuth0Instance.js';
4
+ import { handleAccessTokenRequest } from './token.js';
5
+ import { protectRoute } from './protectRoute.js';
6
+ import { handleCrossDomainLogout, deleteRelatedSessionCookies } from './logout.js';
7
+ import { addLoginParamsFromCookies } from './login.js';
8
+ import { combineHeaders } from './combineHeaders.js';
9
+
10
+ const isAuthRoute = (pathname, auth0Config) => {
11
+ const { loginEndpoint, logoutEndpoint, callbackEndpoint, userProfileEndpoint, tokenEndpoint, } = auth0Config;
12
+ return [
13
+ loginEndpoint,
14
+ logoutEndpoint,
15
+ callbackEndpoint,
16
+ userProfileEndpoint,
17
+ tokenEndpoint,
18
+ ].includes(pathname);
19
+ };
20
+ const authMiddleware = async ({ request, isProtectedRoute, language, host, protocol, isProxied, onError, }) => {
21
+ const { pathname } = request.nextUrl;
22
+ const auth0Instance = getAuth0Instance({ host, protocol, isProxied });
23
+ const auth0Config = getAuth0Config({ isProxied });
24
+ const isAuthErrorRoute = pathname.endsWith(auth0Config.globalAuthErrorPath);
25
+ const crossDomainLogoutResult = handleCrossDomainLogout({
26
+ host,
27
+ protocol,
28
+ request,
29
+ auth0Config,
30
+ });
31
+ if (crossDomainLogoutResult) {
32
+ return crossDomainLogoutResult;
33
+ }
34
+ const addLoginParamsFromCookiesResult = addLoginParamsFromCookies({
35
+ request,
36
+ auth0Config,
37
+ });
38
+ if (addLoginParamsFromCookiesResult) {
39
+ return addLoginParamsFromCookiesResult;
40
+ }
41
+ const authResponse = await auth0Instance.middleware(request);
42
+ const deleteRelatedSessionCookiesResult = deleteRelatedSessionCookies({
43
+ host,
44
+ request,
45
+ response: authResponse,
46
+ auth0Config,
47
+ });
48
+ if (deleteRelatedSessionCookiesResult) {
49
+ return deleteRelatedSessionCookiesResult;
50
+ }
51
+ const switchSelectedSellerIdResult = await handleAccessTokenRequest({
52
+ request,
53
+ response: authResponse,
54
+ auth0Instance,
55
+ auth0Config,
56
+ language,
57
+ onError,
58
+ });
59
+ if (switchSelectedSellerIdResult) {
60
+ return switchSelectedSellerIdResult;
61
+ }
62
+ if (isAuthRoute(pathname, auth0Config) || isAuthErrorRoute) {
63
+ return authResponse;
64
+ }
65
+ const isProtected = !isAuthErrorRoute && isProtectedRoute(pathname);
66
+ const protectRouteResult = await protectRoute({
67
+ isProtected,
68
+ auth0Instance,
69
+ auth0Config,
70
+ language,
71
+ request,
72
+ response: authResponse,
73
+ onError,
74
+ });
75
+ if (protectRouteResult) {
76
+ return protectRouteResult;
77
+ }
78
+ return combineHeaders({
79
+ middlewareResponse: NextResponse.next({
80
+ request: {
81
+ headers: request.headers,
82
+ },
83
+ }),
84
+ authResponse,
85
+ });
86
+ };
87
+
88
+ export { authMiddleware };
89
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../../../../../src/server/middleware/index.ts"],"sourcesContent":[null],"names":[],"mappings":";;;;;;;;;AAaA,MAAM,WAAW,GAAG,CAAC,QAAgB,EAAE,WAAwB,KAAI;AACjE,IAAA,MAAM,EACJ,aAAa,EACb,cAAc,EACd,gBAAgB,EAChB,mBAAmB,EACnB,aAAa,GACd,GAAG,WAAW;IAEf,OAAO;QACL,aAAa;QACb,cAAc;QACd,gBAAgB;QAChB,mBAAmB;QACnB,aAAa;AACd,KAAA,CAAC,QAAQ,CAAC,QAAQ,CAAC;AACtB,CAAC;MAEY,cAAc,GAAG,OAAO,EACnC,OAAO,EACP,gBAAgB,EAChB,QAAQ,EACR,IAAI,EACJ,QAAQ,EACR,SAAS,EACT,OAAO,GASR,KAA2B;AAC1B,IAAA,MAAM,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,OAAO;AACpC,IAAA,MAAM,aAAa,GAAG,gBAAgB,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC;IAErE,MAAM,WAAW,GAAG,cAAc,CAAC,EAAE,SAAS,EAAE,CAAC;IACjD,MAAM,gBAAgB,GAAG,QAAQ,CAAC,QAAQ,CAAC,WAAW,CAAC,mBAAmB,CAAC;IAE3E,MAAM,uBAAuB,GAAG,uBAAuB,CAAC;QACtD,IAAI;QACJ,QAAQ;QACR,OAAO;QACP,WAAW;AACZ,KAAA,CAAC;IACF,IAAI,uBAAuB,EAAE;AAC3B,QAAA,OAAO,uBAAuB;IAChC;IAEA,MAAM,+BAA+B,GAAG,yBAAyB,CAAC;QAChE,OAAO;QACP,WAAW;AACZ,KAAA,CAAC;IACF,IAAI,+BAA+B,EAAE;AACnC,QAAA,OAAO,+BAA+B;IACxC;IAEA,MAAM,YAAY,GAAG,MAAM,aAAa,CAAC,UAAU,CAAC,OAAO,CAAC;IAE5D,MAAM,iCAAiC,GAAG,2BAA2B,CAAC;QACpE,IAAI;QACJ,OAAO;AACP,QAAA,QAAQ,EAAE,YAAY;QACtB,WAAW;AACZ,KAAA,CAAC;IACF,IAAI,iCAAiC,EAAE;AACrC,QAAA,OAAO,iCAAiC;IAC1C;AAEA,IAAA,MAAM,4BAA4B,GAAG,MAAM,wBAAwB,CAAC;QAClE,OAAO;AACP,QAAA,QAAQ,EAAE,YAAY;QACtB,aAAa;QACb,WAAW;QACX,QAAQ;QACR,OAAO;AACR,KAAA,CAAC;IACF,IAAI,4BAA4B,EAAE;AAChC,QAAA,OAAO,4BAA4B;IACrC;IAEA,IAAI,WAAW,CAAC,QAAQ,EAAE,WAAW,CAAC,IAAI,gBAAgB,EAAE;AAC1D,QAAA,OAAO,YAAY;IACrB;IAEA,MAAM,WAAW,GAAG,CAAC,gBAAgB,IAAI,gBAAgB,CAAC,QAAQ,CAAC;AACnE,IAAA,MAAM,kBAAkB,GAAG,MAAM,YAAY,CAAC;QAC5C,WAAW;QACX,aAAa;QACb,WAAW;QACX,QAAQ;QACR,OAAO;AACP,QAAA,QAAQ,EAAE,YAAY;QACtB,OAAO;AACR,KAAA,CAAC;IACF,IAAI,kBAAkB,EAAE;AACtB,QAAA,OAAO,kBAAkB;IAC3B;AAEA,IAAA,OAAO,cAAc,CAAC;AACpB,QAAA,kBAAkB,EAAE,YAAY,CAAC,IAAI,CAAC;AACpC,YAAA,OAAO,EAAE;gBACP,OAAO,EAAE,OAAO,CAAC,OAAO;AACzB,aAAA;SACF,CAAC;QACF,YAAY;AACb,KAAA,CAAC;AACJ;;;;"}
@@ -0,0 +1,6 @@
1
+ import { NextRequest, NextResponse } from 'next/server';
2
+ import { Auth0Config } from 'src/types';
3
+ export declare const addLoginParamsFromCookies: ({ request, auth0Config: { selectedSellerIdCookie, impersonatedSellerIdCookie, loginEndpoint, }, }: {
4
+ request: NextRequest;
5
+ auth0Config: Auth0Config;
6
+ }) => NextResponse | void;
@@ -0,0 +1,23 @@
1
+ const addLoginParamsFromCookies = ({ request, auth0Config: { selectedSellerIdCookie, impersonatedSellerIdCookie, loginEndpoint, }, }) => {
2
+ if (request.nextUrl.pathname !== loginEndpoint)
3
+ return;
4
+ const searchParams = new URLSearchParams(request.nextUrl.search);
5
+ const hasSellerId = searchParams.has('seller_id');
6
+ if (!hasSellerId) {
7
+ const sellerId = request.cookies.get(selectedSellerIdCookie.name)?.value;
8
+ if (sellerId) {
9
+ searchParams.set('seller_id', sellerId);
10
+ }
11
+ }
12
+ const hasImpersonateSellerId = searchParams.has('impersonate_seller_id');
13
+ if (!hasImpersonateSellerId) {
14
+ const impersonatedSellerId = request.cookies.get(impersonatedSellerIdCookie.name)?.value;
15
+ if (impersonatedSellerId) {
16
+ searchParams.set('impersonate_seller_id', impersonatedSellerId);
17
+ }
18
+ }
19
+ request.nextUrl.search = searchParams.toString();
20
+ };
21
+
22
+ export { addLoginParamsFromCookies };
23
+ //# sourceMappingURL=login.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"login.js","sources":["../../../../../src/server/middleware/login.ts"],"sourcesContent":[null],"names":[],"mappings":"AAIO,MAAM,yBAAyB,GAAG,CAAC,EACxC,OAAO,EACP,WAAW,EAAE,EACX,sBAAsB,EACtB,0BAA0B,EAC1B,aAAa,GACd,GAIF,KAAyB;AACxB,IAAA,IAAI,OAAO,CAAC,OAAO,CAAC,QAAQ,KAAK,aAAa;QAAE;IAEhD,MAAM,YAAY,GAAG,IAAI,eAAe,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC;IAChE,MAAM,WAAW,GAAG,YAAY,CAAC,GAAG,CAAC,WAAW,CAAC;IACjD,IAAI,CAAC,WAAW,EAAE;AAChB,QAAA,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,IAAI,CAAC,EAAE,KAAK;QACxE,IAAI,QAAQ,EAAE;AACZ,YAAA,YAAY,CAAC,GAAG,CAAC,WAAW,EAAE,QAAQ,CAAC;QACzC;IACF;IAEA,MAAM,sBAAsB,GAAG,YAAY,CAAC,GAAG,CAAC,uBAAuB,CAAC;IACxE,IAAI,CAAC,sBAAsB,EAAE;AAC3B,QAAA,MAAM,oBAAoB,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAC9C,0BAA0B,CAAC,IAAI,CAChC,EAAE,KAAK;QAER,IAAI,oBAAoB,EAAE;AACxB,YAAA,YAAY,CAAC,GAAG,CAAC,uBAAuB,EAAE,oBAAoB,CAAC;QACjE;IACF;IAEA,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,YAAY,CAAC,QAAQ,EAAE;AAClD;;;;"}
@@ -0,0 +1,14 @@
1
+ import { NextRequest, NextResponse } from 'next/server';
2
+ import { Auth0Config } from 'src/types';
3
+ export declare const handleCrossDomainLogout: ({ host, protocol, request, auth0Config: { languageConfig, logoutEndpoint }, }: {
4
+ host: string;
5
+ protocol: string;
6
+ request: NextRequest;
7
+ auth0Config: Auth0Config;
8
+ }) => NextResponse | void;
9
+ export declare const deleteRelatedSessionCookies: ({ host, request, response, auth0Config: { logoutEndpoint, authCookieNames, legacyAccessTokenName, legacyRefreshTokenName, }, }: {
10
+ host: string;
11
+ request: NextRequest;
12
+ response: NextResponse;
13
+ auth0Config: Auth0Config;
14
+ }) => NextResponse | void;
@@ -0,0 +1,115 @@
1
+ import { NextResponse } from 'next/server';
2
+
3
+ const validateReturnTo = ({ pathOrUrl, host, protocol, otherDomainHost, crossDomainLogout, }) => {
4
+ if (typeof pathOrUrl !== 'string')
5
+ return false;
6
+ if (pathOrUrl.length > 2048)
7
+ return false;
8
+ try {
9
+ const decodedPathOrUrl = decodeURIComponent(pathOrUrl);
10
+ const isUrl = decodedPathOrUrl.startsWith('http');
11
+ const parsedUrlOrPath = new URL(isUrl ? decodedPathOrUrl : `${protocol}://${host}${decodedPathOrUrl}`);
12
+ const decodedPath = parsedUrlOrPath.pathname;
13
+ if (crossDomainLogout &&
14
+ isUrl &&
15
+ parsedUrlOrPath.host !== otherDomainHost) {
16
+ return false;
17
+ }
18
+ if (!crossDomainLogout && parsedUrlOrPath.host !== host) {
19
+ return false;
20
+ }
21
+ if (!decodedPath.startsWith('/') || decodedPath.startsWith('//')) {
22
+ return false;
23
+ }
24
+ // Limit chars in return to path to prevent injections
25
+ // eslint-disable-next-line @typescript-eslint/naming-convention
26
+ const SAFE_PATH_REGEX = /^\/[a-zA-Z0-9/_\-?.=]*$/;
27
+ return SAFE_PATH_REGEX.test(decodedPath);
28
+ }
29
+ catch (error) {
30
+ // eslint-disable-next-line no-console
31
+ console.warn('Error parsing URL or path:', error);
32
+ return false;
33
+ }
34
+ };
35
+ const getOtherDomainHost = (currentHost) => {
36
+ if (currentHost.includes('autoscout24')) {
37
+ return currentHost.replace('autoscout24', 'motoscout24');
38
+ }
39
+ if (currentHost.includes('motoscout24')) {
40
+ return currentHost.replace('motoscout24', 'autoscout24');
41
+ }
42
+ return currentHost;
43
+ };
44
+ const handleCrossDomainLogout = ({ host, protocol, request, auth0Config: { languageConfig, logoutEndpoint }, }) => {
45
+ if (request.nextUrl.pathname !== logoutEndpoint)
46
+ return;
47
+ const searchParams = new URLSearchParams(request.nextUrl.search);
48
+ const specifiedReturnTo = searchParams.get('returnTo') || '';
49
+ const crossDomainLogout = searchParams.get('crossDomain') === 'true';
50
+ const otherDomainHost = getOtherDomainHost(host);
51
+ let returnTo = `/${searchParams.get('locale') || languageConfig.default}`;
52
+ const isSafePath = validateReturnTo({
53
+ protocol,
54
+ host,
55
+ otherDomainHost,
56
+ pathOrUrl: specifiedReturnTo,
57
+ crossDomainLogout,
58
+ });
59
+ if (isSafePath) {
60
+ returnTo = specifiedReturnTo;
61
+ }
62
+ if (!crossDomainLogout && otherDomainHost && otherDomainHost !== host) {
63
+ const currentDomainUrl = `${protocol}://${host}`;
64
+ const backToCurrentDomainUrl = new URL(logoutEndpoint, currentDomainUrl);
65
+ backToCurrentDomainUrl.searchParams.set('returnTo', returnTo);
66
+ backToCurrentDomainUrl.searchParams.set('crossDomain', 'true');
67
+ const otherDomainLogoutUrl = new URL(logoutEndpoint, `${protocol}://${otherDomainHost}`);
68
+ otherDomainLogoutUrl.searchParams.set('crossDomain', 'true');
69
+ otherDomainLogoutUrl.searchParams.set('returnTo', backToCurrentDomainUrl.toString());
70
+ return NextResponse.redirect(otherDomainLogoutUrl, {
71
+ status: 302,
72
+ });
73
+ }
74
+ searchParams.set('returnTo', returnTo);
75
+ request.nextUrl.search = searchParams.toString();
76
+ };
77
+ const getLegacyCookieDomain = (hostname) => {
78
+ const parts = hostname.split('.');
79
+ if (parts.length < 2)
80
+ return `.${hostname}`;
81
+ const base = parts.slice(-2).join('.');
82
+ return `.${base}`;
83
+ };
84
+ const deleteRelatedSessionCookies = ({ host, request, response, auth0Config: { logoutEndpoint, authCookieNames, legacyAccessTokenName, legacyRefreshTokenName, }, }) => {
85
+ if (request.nextUrl.pathname !== logoutEndpoint || !response)
86
+ return;
87
+ authCookieNames.forEach((cookieName) => {
88
+ response.cookies.delete({
89
+ name: cookieName,
90
+ maxAge: 0,
91
+ path: '/',
92
+ });
93
+ response.cookies.delete({
94
+ name: `${cookieName}__0`,
95
+ maxAge: 0,
96
+ path: '/',
97
+ });
98
+ });
99
+ const legacyCookieDomain = getLegacyCookieDomain(host);
100
+ response.cookies.delete({
101
+ name: legacyAccessTokenName,
102
+ maxAge: 0,
103
+ path: '/',
104
+ domain: legacyCookieDomain,
105
+ });
106
+ response.cookies.delete({
107
+ name: legacyRefreshTokenName,
108
+ maxAge: 0,
109
+ path: '/',
110
+ domain: legacyCookieDomain,
111
+ });
112
+ };
113
+
114
+ export { deleteRelatedSessionCookies, handleCrossDomainLogout };
115
+ //# sourceMappingURL=logout.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logout.js","sources":["../../../../../src/server/middleware/logout.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import { NextRequest, NextResponse } from 'next/server';
2
+ import { Language } from '@smg-automotive/i18n-pkg';
3
+ import { Auth0Client } from '@auth0/nextjs-auth0/server';
4
+ import { Auth0Config } from 'src/types';
5
+ export declare const protectRoute: ({ isProtected, auth0Instance, auth0Config, language, request, response, onError, }: {
6
+ isProtected: boolean;
7
+ auth0Instance: Auth0Client;
8
+ auth0Config: Auth0Config;
9
+ language: Language;
10
+ request: NextRequest;
11
+ response: NextResponse;
12
+ onError?: (error: Error) => void;
13
+ }) => Promise<NextResponse | void>;
@@ -0,0 +1,49 @@
1
+ import { NextResponse } from 'next/server';
2
+ import { getLoginLink } from '../../lib/authLinks.js';
3
+ import { refreshAccessToken } from './refreshAccessToken.js';
4
+
5
+ const redirectToLogin = ({ auth0Config, language, returnTo, origin, }) => {
6
+ const loginUrl = getLoginLink({
7
+ auth0Config,
8
+ language,
9
+ returnTo,
10
+ });
11
+ return NextResponse.redirect(new URL(loginUrl, origin), {
12
+ status: 307,
13
+ });
14
+ };
15
+ const protectRoute = async ({ isProtected, auth0Instance, auth0Config, language, request, response, onError, }) => {
16
+ const session = await auth0Instance.getSession(request);
17
+ const { pathname, search, origin } = request.nextUrl;
18
+ if (!isProtected && !session?.user) {
19
+ return response;
20
+ }
21
+ if (!session && isProtected) {
22
+ return redirectToLogin({
23
+ auth0Config,
24
+ language,
25
+ returnTo: `${pathname}${search}`,
26
+ origin,
27
+ });
28
+ }
29
+ return refreshAccessToken({
30
+ request,
31
+ response,
32
+ auth0Instance,
33
+ onFailure: (authError) => {
34
+ onError?.(authError);
35
+ if (!isProtected) {
36
+ return response;
37
+ }
38
+ return redirectToLogin({
39
+ auth0Config,
40
+ language,
41
+ returnTo: `${pathname}${search}`,
42
+ origin,
43
+ });
44
+ },
45
+ });
46
+ };
47
+
48
+ export { protectRoute };
49
+ //# sourceMappingURL=protectRoute.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"protectRoute.js","sources":["../../../../../src/server/middleware/protectRoute.ts"],"sourcesContent":[null],"names":[],"mappings":";;;;AAUA,MAAM,eAAe,GAAG,CAAC,EACvB,WAAW,EACX,QAAQ,EACR,QAAQ,EACR,MAAM,GAMP,KAAkB;IACjB,MAAM,QAAQ,GAAG,YAAY,CAAC;QAC5B,WAAW;QACX,QAAQ;QACR,QAAQ;AACT,KAAA,CAAC;IAEF,OAAO,YAAY,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,EAAE;AACtD,QAAA,MAAM,EAAE,GAAG;AACZ,KAAA,CAAC;AACJ,CAAC;MAEY,YAAY,GAAG,OAAO,EACjC,WAAW,EACX,aAAa,EACb,WAAW,EACX,QAAQ,EACR,OAAO,EACP,QAAQ,EACR,OAAO,GASR,KAAkC;IACjC,MAAM,OAAO,GAAG,MAAM,aAAa,CAAC,UAAU,CAAC,OAAO,CAAC;IACvD,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO;IAEpD,IAAI,CAAC,WAAW,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE;AAClC,QAAA,OAAO,QAAQ;IACjB;AAEA,IAAA,IAAI,CAAC,OAAO,IAAI,WAAW,EAAE;AAC3B,QAAA,OAAO,eAAe,CAAC;YACrB,WAAW;YACX,QAAQ;AACR,YAAA,QAAQ,EAAE,CAAA,EAAG,QAAQ,CAAA,EAAG,MAAM,CAAA,CAAE;YAChC,MAAM;AACP,SAAA,CAAC;IACJ;AAEA,IAAA,OAAO,kBAAkB,CAAC;QACxB,OAAO;QACP,QAAQ;QACR,aAAa;AACb,QAAA,SAAS,EAAE,CAAC,SAAmB,KAAI;AACjC,YAAA,OAAO,GAAG,SAAS,CAAC;YAEpB,IAAI,CAAC,WAAW,EAAE;AAChB,gBAAA,OAAO,QAAQ;YACjB;AAEA,YAAA,OAAO,eAAe,CAAC;gBACrB,WAAW;gBACX,QAAQ;AACR,gBAAA,QAAQ,EAAE,CAAA,EAAG,QAAQ,CAAA,EAAG,MAAM,CAAA,CAAE;gBAChC,MAAM;AACP,aAAA,CAAC;QACJ,CAAC;AACF,KAAA,CAAC;AACJ;;;;"}
@@ -0,0 +1,9 @@
1
+ import { NextRequest, NextResponse } from 'next/server';
2
+ import { Auth0Client } from '@auth0/nextjs-auth0/server';
3
+ import { SdkError } from '@auth0/nextjs-auth0/errors';
4
+ export declare const refreshAccessToken: ({ request, response, auth0Instance, onFailure, }: {
5
+ request: NextRequest;
6
+ response: NextResponse;
7
+ auth0Instance: Auth0Client;
8
+ onFailure?: (error: SdkError) => NextResponse;
9
+ }) => Promise<NextResponse | void>;
@@ -0,0 +1,15 @@
1
+ const refreshAccessToken = async ({ request, response, auth0Instance, onFailure, }) => {
2
+ const session = await auth0Instance.getSession(request);
3
+ try {
4
+ const shouldRefresh = (session?.tokenSet.expiresAt || 0) < Date.now() / 1000 + 30;
5
+ await auth0Instance.getAccessToken(request, response, {
6
+ refresh: shouldRefresh,
7
+ });
8
+ }
9
+ catch (error) {
10
+ return onFailure?.(error);
11
+ }
12
+ };
13
+
14
+ export { refreshAccessToken };
15
+ //# sourceMappingURL=refreshAccessToken.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"refreshAccessToken.js","sources":["../../../../../src/server/middleware/refreshAccessToken.ts"],"sourcesContent":[null],"names":[],"mappings":"AAIO,MAAM,kBAAkB,GAAG,OAAO,EACvC,OAAO,EACP,QAAQ,EACR,aAAa,EACb,SAAS,GAMV,KAAkC;IACjC,MAAM,OAAO,GAAG,MAAM,aAAa,CAAC,UAAU,CAAC,OAAO,CAAC;AAEvD,IAAA,IAAI;QACF,MAAM,aAAa,GACjB,CAAC,OAAO,EAAE,QAAQ,CAAC,SAAS,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,GAAG,EAAE;AAC7D,QAAA,MAAM,aAAa,CAAC,cAAc,CAAC,OAAO,EAAE,QAAQ,EAAE;AACpD,YAAA,OAAO,EAAE,aAAa;AACvB,SAAA,CAAC;IACJ;IAAE,OAAO,KAAK,EAAE;AACd,QAAA,OAAO,SAAS,GAAG,KAAiB,CAAC;IACvC;AACF;;;;"}
@@ -0,0 +1,12 @@
1
+ import { NextRequest, NextResponse } from 'next/server';
2
+ import { Language } from '@smg-automotive/i18n-pkg';
3
+ import { Auth0Client } from '@auth0/nextjs-auth0/server';
4
+ import { Auth0Config } from 'src/types';
5
+ export declare const handleAccessTokenRequest: ({ language, request, response, auth0Instance, auth0Config, onError, }: {
6
+ language: Language;
7
+ request: NextRequest;
8
+ response: NextResponse;
9
+ auth0Instance: Auth0Client;
10
+ auth0Config: Auth0Config;
11
+ onError?: (error: Error) => void;
12
+ }) => Promise<NextResponse | void>;
@@ -0,0 +1,65 @@
1
+ import { NextResponse } from 'next/server';
2
+ import { AccessTokenErrorCode } from '@auth0/nextjs-auth0/errors';
3
+ import { getLoginLink } from '../../lib/authLinks.js';
4
+ import { combineHeaders } from './combineHeaders.js';
5
+
6
+ const handleAccessTokenRequest = async ({ language, request, response, auth0Instance, auth0Config, onError, }) => {
7
+ if (request.nextUrl.pathname !== auth0Config.tokenEndpoint)
8
+ return;
9
+ const searchParams = new URLSearchParams(request.nextUrl.search);
10
+ const sellerId = searchParams.get('seller_id');
11
+ const session = await auth0Instance.getSession(request);
12
+ if (!session) {
13
+ return NextResponse.json({
14
+ error: {
15
+ message: 'The user does not have an active session.',
16
+ code: AccessTokenErrorCode.MISSING_SESSION,
17
+ },
18
+ }, {
19
+ status: 401,
20
+ });
21
+ }
22
+ if (sellerId && session?.user) {
23
+ const loginUrl = getLoginLink({
24
+ auth0Config,
25
+ language,
26
+ returnTo: auth0Config.tokenEndpoint,
27
+ selectedSellerId: sellerId,
28
+ });
29
+ return NextResponse.redirect(new URL(loginUrl, request.nextUrl.origin), {
30
+ status: 302,
31
+ });
32
+ }
33
+ try {
34
+ const shouldRefresh = (session?.tokenSet.expiresAt || 0) < Date.now() / 1000 + 30;
35
+ const { token, expiresAt } = await auth0Instance.getAccessToken(request, response, {
36
+ refresh: shouldRefresh,
37
+ });
38
+ const tokenResponse = combineHeaders({
39
+ middlewareResponse: NextResponse.json({
40
+ token,
41
+ expiresAt,
42
+ }, {
43
+ headers: request.headers,
44
+ }),
45
+ authResponse: response,
46
+ });
47
+ tokenResponse.headers.set('Cache-Control', 'private, no-cache, no-store, must-revalidate, max-age=0');
48
+ tokenResponse.headers.set('Pragma', 'no-cache');
49
+ tokenResponse.headers.set('Expires', '0');
50
+ return tokenResponse;
51
+ }
52
+ catch (error) {
53
+ const authError = error;
54
+ onError?.(authError);
55
+ return NextResponse.json({
56
+ error: {
57
+ message: authError.message,
58
+ code: authError.code,
59
+ },
60
+ }, { status: 401 });
61
+ }
62
+ };
63
+
64
+ export { handleAccessTokenRequest };
65
+ //# sourceMappingURL=token.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token.js","sources":["../../../../../src/server/middleware/token.ts"],"sourcesContent":[null],"names":[],"mappings":";;;;;MAWa,wBAAwB,GAAG,OAAO,EAC7C,QAAQ,EACR,OAAO,EACP,QAAQ,EACR,aAAa,EACb,WAAW,EACX,OAAO,GAQR,KAAkC;IACjC,IAAI,OAAO,CAAC,OAAO,CAAC,QAAQ,KAAK,WAAW,CAAC,aAAa;QAAE;IAE5D,MAAM,YAAY,GAAG,IAAI,eAAe,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC;IAEhE,MAAM,QAAQ,GAAG,YAAY,CAAC,GAAG,CAAC,WAAW,CAAC;IAC9C,MAAM,OAAO,GAAG,MAAM,aAAa,CAAC,UAAU,CAAC,OAAO,CAAC;IAEvD,IAAI,CAAC,OAAO,EAAE;QACZ,OAAO,YAAY,CAAC,IAAI,CACtB;AACE,YAAA,KAAK,EAAE;AACL,gBAAA,OAAO,EAAE,2CAA2C;gBACpD,IAAI,EAAE,oBAAoB,CAAC,eAAe;AAC3C,aAAA;SACF,EACD;AACE,YAAA,MAAM,EAAE,GAAG;AACZ,SAAA,CACF;IACH;AAEA,IAAA,IAAI,QAAQ,IAAI,OAAO,EAAE,IAAI,EAAE;QAC7B,MAAM,QAAQ,GAAG,YAAY,CAAC;YAC5B,WAAW;YACX,QAAQ;YACR,QAAQ,EAAE,WAAW,CAAC,aAAa;AACnC,YAAA,gBAAgB,EAAE,QAAQ;AAC3B,SAAA,CAAC;AACF,QAAA,OAAO,YAAY,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;AACtE,YAAA,MAAM,EAAE,GAAG;AACZ,SAAA,CAAC;IACJ;AAEA,IAAA,IAAI;QACF,MAAM,aAAa,GACjB,CAAC,OAAO,EAAE,QAAQ,CAAC,SAAS,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,GAAG,EAAE;AAC7D,QAAA,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,MAAM,aAAa,CAAC,cAAc,CAC7D,OAAO,EACP,QAAQ,EACR;AACE,YAAA,OAAO,EAAE,aAAa;AACvB,SAAA,CACF;QAED,MAAM,aAAa,GAAG,cAAc,CAAC;AACnC,YAAA,kBAAkB,EAAE,YAAY,CAAC,IAAI,CACnC;gBACE,KAAK;gBACL,SAAS;aACV,EACD;gBACE,OAAO,EAAE,OAAO,CAAC,OAAO;aACzB,CACF;AACD,YAAA,YAAY,EAAE,QAAQ;AACvB,SAAA,CAAC;QACF,aAAa,CAAC,OAAO,CAAC,GAAG,CACvB,eAAe,EACf,yDAAyD,CAC1D;QACD,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,UAAU,CAAC;QAC/C,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,GAAG,CAAC;AAEzC,QAAA,OAAO,aAAa;IACtB;IAAE,OAAO,KAAK,EAAE;QACd,MAAM,SAAS,GAAG,KAAiB;AACnC,QAAA,OAAO,GAAG,SAAS,CAAC;QAEpB,OAAO,YAAY,CAAC,IAAI,CACtB;AACE,YAAA,KAAK,EAAE;gBACL,OAAO,EAAE,SAAS,CAAC,OAAO;gBAC1B,IAAI,EAAE,SAAS,CAAC,IAAI;AACrB,aAAA;AACF,SAAA,EACD,EAAE,MAAM,EAAE,GAAG,EAAE,CAChB;IACH;AACF;;;;"}
@@ -1,2 +1,2 @@
1
- export { authMiddleware } from './server/middleware.js';
1
+ export { authMiddleware } from './server/middleware/index.js';
2
2
  //# sourceMappingURL=server.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@smg-automotive/auth",
3
- "version": "6.8.0-auth0-update-root.7",
3
+ "version": "6.8.0-auth0-update-access-token-endpoint.1",
4
4
  "description": "SMG Automotive auth package",
5
5
  "exports": {
6
6
  ".": {