@smg-automotive/auth 8.2.0 → 8.2.1-instrumentation-with-debug.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 (44) hide show
  1. package/README.md +66 -0
  2. package/dist/cjs/server/helpers/getAccessToken.js +12 -0
  3. package/dist/cjs/server/helpers/getAccessToken.js.map +1 -1
  4. package/dist/cjs/server/helpers/getUser.js +39 -7
  5. package/dist/cjs/server/helpers/getUser.js.map +1 -1
  6. package/dist/cjs/server/middleware/index.js +42 -0
  7. package/dist/cjs/server/middleware/index.js.map +1 -1
  8. package/dist/cjs/server/middleware/logout.d.ts +4 -2
  9. package/dist/cjs/server/middleware/logout.js +34 -13
  10. package/dist/cjs/server/middleware/logout.js.map +1 -1
  11. package/dist/cjs/server/middleware/proactivelyRefreshAccessToken.d.ts +2 -1
  12. package/dist/cjs/server/middleware/proactivelyRefreshAccessToken.js +26 -4
  13. package/dist/cjs/server/middleware/proactivelyRefreshAccessToken.js.map +1 -1
  14. package/dist/cjs/server/middleware/profile.d.ts +2 -1
  15. package/dist/cjs/server/middleware/profile.js +27 -3
  16. package/dist/cjs/server/middleware/profile.js.map +1 -1
  17. package/dist/cjs/server/middleware/protectRoute.d.ts +2 -1
  18. package/dist/cjs/server/middleware/protectRoute.js +26 -2
  19. package/dist/cjs/server/middleware/protectRoute.js.map +1 -1
  20. package/dist/cjs/server/middleware/token.d.ts +2 -1
  21. package/dist/cjs/server/middleware/token.js +20 -1
  22. package/dist/cjs/server/middleware/token.js.map +1 -1
  23. package/dist/esm/server/helpers/getAccessToken.js +8 -0
  24. package/dist/esm/server/helpers/getAccessToken.js.map +1 -1
  25. package/dist/esm/server/helpers/getUser.js +35 -7
  26. package/dist/esm/server/helpers/getUser.js.map +1 -1
  27. package/dist/esm/server/middleware/index.js +38 -0
  28. package/dist/esm/server/middleware/index.js.map +1 -1
  29. package/dist/esm/server/middleware/logout.d.ts +4 -2
  30. package/dist/esm/server/middleware/logout.js +30 -13
  31. package/dist/esm/server/middleware/logout.js.map +1 -1
  32. package/dist/esm/server/middleware/proactivelyRefreshAccessToken.d.ts +2 -1
  33. package/dist/esm/server/middleware/proactivelyRefreshAccessToken.js +22 -4
  34. package/dist/esm/server/middleware/proactivelyRefreshAccessToken.js.map +1 -1
  35. package/dist/esm/server/middleware/profile.d.ts +2 -1
  36. package/dist/esm/server/middleware/profile.js +23 -3
  37. package/dist/esm/server/middleware/profile.js.map +1 -1
  38. package/dist/esm/server/middleware/protectRoute.d.ts +2 -1
  39. package/dist/esm/server/middleware/protectRoute.js +22 -2
  40. package/dist/esm/server/middleware/protectRoute.js.map +1 -1
  41. package/dist/esm/server/middleware/token.d.ts +2 -1
  42. package/dist/esm/server/middleware/token.js +16 -1
  43. package/dist/esm/server/middleware/token.js.map +1 -1
  44. package/package.json +3 -1
@@ -2,7 +2,8 @@ import { NextRequest, NextResponse } from 'next/server';
2
2
  import { Language } from '@smg-automotive/i18n-pkg';
3
3
  import { Auth0Client } from '@auth0/nextjs-auth0/server';
4
4
  import { Auth0Config } from 'src/types';
5
- export declare const protectRoute: ({ isProtected, auth0Instance, auth0Config, language, request, response, onError, }: {
5
+ export declare const protectRoute: ({ requestId, isProtected, auth0Instance, auth0Config, language, request, response, onError, }: {
6
+ requestId: string;
6
7
  isProtected: boolean;
7
8
  auth0Instance: Auth0Client;
8
9
  auth0Config: Auth0Config;
@@ -1,9 +1,15 @@
1
1
  'use strict';
2
2
 
3
3
  var server = require('next/server');
4
+ var debug = require('debug');
4
5
  var authLinks = require('../../lib/authLinks.js');
5
6
  var proactivelyRefreshAccessToken = require('./proactivelyRefreshAccessToken.js');
6
7
 
8
+ function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'default' in e ? e : { default: e }; }
9
+
10
+ var debug__default = /*#__PURE__*/_interopDefaultCompat(debug);
11
+
12
+ const log = debug__default.default('@smg-automotive/auth:protectRoute');
7
13
  const redirectToLogin = ({ auth0Config, language, returnTo, origin, }) => {
8
14
  const loginUrl = authLinks.getLoginLink({
9
15
  auth0Config,
@@ -14,13 +20,23 @@ const redirectToLogin = ({ auth0Config, language, returnTo, origin, }) => {
14
20
  status: 307,
15
21
  });
16
22
  };
17
- const protectRoute = async ({ isProtected, auth0Instance, auth0Config, language, request, response, onError, }) => {
18
- const session = await auth0Instance.getSession(request);
23
+ const protectRoute = async ({ requestId, isProtected, auth0Instance, auth0Config, language, request, response, onError, }) => {
19
24
  const { pathname, search, origin } = request.nextUrl;
25
+ log('Checking route protection', { requestId, pathname, isProtected });
26
+ const session = await auth0Instance.getSession(request);
27
+ log('Session check', {
28
+ requestId,
29
+ hasSession: !!session,
30
+ hasUser: !!session?.user,
31
+ });
20
32
  if (!isProtected && !session?.user) {
33
+ log('Route not protected and no user session, allowing', { requestId });
21
34
  return response;
22
35
  }
23
36
  if (!session && isProtected) {
37
+ log('Protected route without session, redirecting to login', {
38
+ requestId,
39
+ });
24
40
  return redirectToLogin({
25
41
  auth0Config,
26
42
  language,
@@ -29,15 +45,23 @@ const protectRoute = async ({ isProtected, auth0Instance, auth0Config, language,
29
45
  });
30
46
  }
31
47
  try {
48
+ log('Refreshing token for protected route', { requestId });
32
49
  await proactivelyRefreshAccessToken.proactivelyRefreshAccessToken({
50
+ requestId,
33
51
  request,
34
52
  response,
35
53
  auth0Instance,
36
54
  auth0Config,
37
55
  });
56
+ log('Token refreshed successfully, allowing access', { requestId });
38
57
  }
39
58
  catch (error) {
40
59
  const authError = error;
60
+ log('Token refresh failed for protected route', {
61
+ requestId,
62
+ message: authError.message,
63
+ code: authError.code,
64
+ });
41
65
  onError?.(authError);
42
66
  return redirectToLogin({
43
67
  auth0Config,
@@ -1 +1 @@
1
- {"version":3,"file":"protectRoute.js","sources":["../../../../../src/server/middleware/protectRoute.ts"],"sourcesContent":[null],"names":["getLoginLink","NextResponse","proactivelyRefreshAccessToken"],"mappings":";;;;;;AAUA,MAAM,eAAe,GAAG,CAAC,EACvB,WAAW,EACX,QAAQ,EACR,QAAQ,EACR,MAAM,GAMP,KAAkB;IACjB,MAAM,QAAQ,GAAGA,sBAAY,CAAC;QAC5B,WAAW;QACX,QAAQ;QACR,QAAQ;AACT,KAAA,CAAC;IAEF,OAAOC,mBAAY,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,IAAI;AACF,QAAA,MAAMC,2DAA6B,CAAC;YAClC,OAAO;YACP,QAAQ;YACR,aAAa;YACb,WAAW;AACZ,SAAA,CAAC;IACJ;IAAE,OAAO,KAAK,EAAE;QACd,MAAM,SAAS,GAAG,KAAiB;AACnC,QAAA,OAAO,GAAG,SAAS,CAAC;AAEpB,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;AACF;;;;"}
1
+ {"version":3,"file":"protectRoute.js","sources":["../../../../../src/server/middleware/protectRoute.ts"],"sourcesContent":[null],"names":["debug","getLoginLink","NextResponse","proactivelyRefreshAccessToken"],"mappings":";;;;;;;;;;;AAWA,MAAM,GAAG,GAAGA,sBAAK,CAAC,mCAAmC,CAAC;AAEtD,MAAM,eAAe,GAAG,CAAC,EACvB,WAAW,EACX,QAAQ,EACR,QAAQ,EACR,MAAM,GAMP,KAAkB;IACjB,MAAM,QAAQ,GAAGC,sBAAY,CAAC;QAC5B,WAAW;QACX,QAAQ;QACR,QAAQ;AACT,KAAA,CAAC;IAEF,OAAOC,mBAAY,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,EAAE;AACtD,QAAA,MAAM,EAAE,GAAG;AACZ,KAAA,CAAC;AACJ,CAAC;AAEM,MAAM,YAAY,GAAG,OAAO,EACjC,SAAS,EACT,WAAW,EACX,aAAa,EACb,WAAW,EACX,QAAQ,EACR,OAAO,EACP,QAAQ,EACR,OAAO,GAUR,KAAkC;IACjC,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO;IACpD,GAAG,CAAC,2BAA2B,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC;IAEtE,MAAM,OAAO,GAAG,MAAM,aAAa,CAAC,UAAU,CAAC,OAAO,CAAC;IACvD,GAAG,CAAC,eAAe,EAAE;QACnB,SAAS;QACT,UAAU,EAAE,CAAC,CAAC,OAAO;AACrB,QAAA,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,IAAI;AACzB,KAAA,CAAC;IAEF,IAAI,CAAC,WAAW,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE;AAClC,QAAA,GAAG,CAAC,mDAAmD,EAAE,EAAE,SAAS,EAAE,CAAC;AACvE,QAAA,OAAO,QAAQ;IACjB;AAEA,IAAA,IAAI,CAAC,OAAO,IAAI,WAAW,EAAE;QAC3B,GAAG,CAAC,uDAAuD,EAAE;YAC3D,SAAS;AACV,SAAA,CAAC;AACF,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,IAAI;AACF,QAAA,GAAG,CAAC,sCAAsC,EAAE,EAAE,SAAS,EAAE,CAAC;AAC1D,QAAA,MAAMC,2DAA6B,CAAC;YAClC,SAAS;YACT,OAAO;YACP,QAAQ;YACR,aAAa;YACb,WAAW;AACZ,SAAA,CAAC;AACF,QAAA,GAAG,CAAC,+CAA+C,EAAE,EAAE,SAAS,EAAE,CAAC;IACrE;IAAE,OAAO,KAAK,EAAE;QACd,MAAM,SAAS,GAAG,KAAiB;QACnC,GAAG,CAAC,0CAA0C,EAAE;YAC9C,SAAS;YACT,OAAO,EAAE,SAAS,CAAC,OAAO;YAC1B,IAAI,EAAE,SAAS,CAAC,IAAI;AACrB,SAAA,CAAC;AACF,QAAA,OAAO,GAAG,SAAS,CAAC;AAEpB,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;AACF;;;;"}
@@ -1,7 +1,8 @@
1
1
  import { NextRequest, NextResponse } from 'next/server';
2
2
  import { Auth0Client } from '@auth0/nextjs-auth0/server';
3
3
  import { Auth0Config } from 'src/types';
4
- export declare const handleAccessTokenRequest: ({ request, response, auth0Instance, auth0Config, onError, }: {
4
+ export declare const handleAccessTokenRequest: ({ requestId, request, response, auth0Instance, auth0Config, onError, }: {
5
+ requestId: string;
5
6
  request: NextRequest;
6
7
  response: NextResponse;
7
8
  auth0Instance: Auth0Client;
@@ -1,17 +1,28 @@
1
1
  'use strict';
2
2
 
3
3
  var server = require('next/server');
4
+ var debug = require('debug');
4
5
  var errors = require('@auth0/nextjs-auth0/errors');
5
6
  var proactivelyRefreshAccessToken = require('./proactivelyRefreshAccessToken.js');
6
7
  var combineHeaders = require('./combineHeaders.js');
7
8
  var combineCookies = require('./combineCookies.js');
8
9
  var addCachingHeaders = require('./addCachingHeaders.js');
9
10
 
10
- const handleAccessTokenRequest = async ({ request, response, auth0Instance, auth0Config, onError, }) => {
11
+ function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'default' in e ? e : { default: e }; }
12
+
13
+ var debug__default = /*#__PURE__*/_interopDefaultCompat(debug);
14
+
15
+ const log = debug__default.default('@smg-automotive/auth:token');
16
+ const handleAccessTokenRequest = async ({ requestId, request, response, auth0Instance, auth0Config, onError, }) => {
11
17
  if (request.nextUrl.pathname !== auth0Config.tokenEndpoint)
12
18
  return;
19
+ log('Handling access token request', {
20
+ requestId,
21
+ pathname: request.nextUrl.pathname,
22
+ });
13
23
  const session = await auth0Instance.getSession(request);
14
24
  if (!session) {
25
+ log('Access token request failed: no session', { requestId });
15
26
  return server.NextResponse.json({
16
27
  error: {
17
28
  message: 'The user does not have an active session.',
@@ -22,12 +33,15 @@ const handleAccessTokenRequest = async ({ request, response, auth0Instance, auth
22
33
  });
23
34
  }
24
35
  try {
36
+ log('Refreshing access token', { requestId });
25
37
  const { token, expiresAt } = await proactivelyRefreshAccessToken.proactivelyRefreshAccessToken({
38
+ requestId,
26
39
  request,
27
40
  response,
28
41
  auth0Instance,
29
42
  auth0Config,
30
43
  });
44
+ log('Access token refreshed successfully', { requestId, expiresAt });
31
45
  const tokenResponse = server.NextResponse.json({
32
46
  token,
33
47
  expiresAt,
@@ -47,6 +61,11 @@ const handleAccessTokenRequest = async ({ request, response, auth0Instance, auth
47
61
  }
48
62
  catch (error) {
49
63
  const authError = error;
64
+ log('Access token request error', {
65
+ requestId,
66
+ message: authError.message,
67
+ code: authError.code,
68
+ });
50
69
  onError?.(authError);
51
70
  return server.NextResponse.json({ error: { message: authError.message, code: authError.code } }, { status: 401 });
52
71
  }
@@ -1 +1 @@
1
- {"version":3,"file":"token.js","sources":["../../../../../src/server/middleware/token.ts"],"sourcesContent":[null],"names":["NextResponse","AccessTokenErrorCode","proactivelyRefreshAccessToken","combineHeaders","addCachingHeaders","combineCookies"],"mappings":";;;;;;;;;AAWO,MAAM,wBAAwB,GAAG,OAAO,EAC7C,OAAO,EACP,QAAQ,EACR,aAAa,EACb,WAAW,EACX,OAAO,GAOR,KAAkC;IACjC,IAAI,OAAO,CAAC,OAAO,CAAC,QAAQ,KAAK,WAAW,CAAC,aAAa;QAAE;IAE5D,MAAM,OAAO,GAAG,MAAM,aAAa,CAAC,UAAU,CAAC,OAAO,CAAC;IAEvD,IAAI,CAAC,OAAO,EAAE;QACZ,OAAOA,mBAAY,CAAC,IAAI,CACtB;AACE,YAAA,KAAK,EAAE;AACL,gBAAA,OAAO,EAAE,2CAA2C;gBACpD,IAAI,EAAEC,2BAAoB,CAAC,eAAe;AAC3C,aAAA;SACF,EACD;AACE,YAAA,MAAM,EAAE,GAAG;AACZ,SAAA,CACF;IACH;AAEA,IAAA,IAAI;QACF,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,MAAMC,2DAA6B,CAAC;YAC/D,OAAO;YACP,QAAQ;YACR,aAAa;YACb,WAAW;AACZ,SAAA,CAAC;AACF,QAAA,MAAM,aAAa,GAAGF,mBAAY,CAAC,IAAI,CAAC;YACtC,KAAK;YACL,SAAS;AACV,SAAA,CAAC;QACF,MAAM,2BAA2B,GAAGG,6BAAc,CAAC;AACjD,YAAA,kBAAkB,EAAE,aAAa;AACjC,YAAA,YAAY,EAAE,QAAQ;AACtB,YAAA,eAAe,EAAE,IAAI;AACtB,SAAA,CAAC;QACFC,mCAAiB,CAAC,2BAA2B,CAAC;;AAE9C,QAAAC,6BAAc,CAAC;AACb,YAAA,cAAc,EAAE,QAAQ;AACxB,YAAA,cAAc,EAAE,2BAA2B;AAC5C,SAAA,CAAC;AACF,QAAA,OAAO,2BAA2B;IACpC;IAAE,OAAO,KAAK,EAAE;QACd,MAAM,SAAS,GAAG,KAAiB;AACnC,QAAA,OAAO,GAAG,SAAS,CAAC;AACpB,QAAA,OAAOL,mBAAY,CAAC,IAAI,CACtB,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,SAAS,CAAC,IAAI,EAAE,EAAE,EAC/D,EAAE,MAAM,EAAE,GAAG,EAAE,CAChB;IACH;AACF;;;;"}
1
+ {"version":3,"file":"token.js","sources":["../../../../../src/server/middleware/token.ts"],"sourcesContent":[null],"names":["debug","NextResponse","AccessTokenErrorCode","proactivelyRefreshAccessToken","combineHeaders","addCachingHeaders","combineCookies"],"mappings":";;;;;;;;;;;;;;AAYA,MAAM,GAAG,GAAGA,sBAAK,CAAC,4BAA4B,CAAC;MAElC,wBAAwB,GAAG,OAAO,EAC7C,SAAS,EACT,OAAO,EACP,QAAQ,EACR,aAAa,EACb,WAAW,EACX,OAAO,GAQR,KAAkC;IACjC,IAAI,OAAO,CAAC,OAAO,CAAC,QAAQ,KAAK,WAAW,CAAC,aAAa;QAAE;IAE5D,GAAG,CAAC,+BAA+B,EAAE;QACnC,SAAS;AACT,QAAA,QAAQ,EAAE,OAAO,CAAC,OAAO,CAAC,QAAQ;AACnC,KAAA,CAAC;IACF,MAAM,OAAO,GAAG,MAAM,aAAa,CAAC,UAAU,CAAC,OAAO,CAAC;IAEvD,IAAI,CAAC,OAAO,EAAE;AACZ,QAAA,GAAG,CAAC,yCAAyC,EAAE,EAAE,SAAS,EAAE,CAAC;QAC7D,OAAOC,mBAAY,CAAC,IAAI,CACtB;AACE,YAAA,KAAK,EAAE;AACL,gBAAA,OAAO,EAAE,2CAA2C;gBACpD,IAAI,EAAEC,2BAAoB,CAAC,eAAe;AAC3C,aAAA;SACF,EACD;AACE,YAAA,MAAM,EAAE,GAAG;AACZ,SAAA,CACF;IACH;AAEA,IAAA,IAAI;AACF,QAAA,GAAG,CAAC,yBAAyB,EAAE,EAAE,SAAS,EAAE,CAAC;QAC7C,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,MAAMC,2DAA6B,CAAC;YAC/D,SAAS;YACT,OAAO;YACP,QAAQ;YACR,aAAa;YACb,WAAW;AACZ,SAAA,CAAC;QACF,GAAG,CAAC,qCAAqC,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC;AACpE,QAAA,MAAM,aAAa,GAAGF,mBAAY,CAAC,IAAI,CAAC;YACtC,KAAK;YACL,SAAS;AACV,SAAA,CAAC;QACF,MAAM,2BAA2B,GAAGG,6BAAc,CAAC;AACjD,YAAA,kBAAkB,EAAE,aAAa;AACjC,YAAA,YAAY,EAAE,QAAQ;AACtB,YAAA,eAAe,EAAE,IAAI;AACtB,SAAA,CAAC;QACFC,mCAAiB,CAAC,2BAA2B,CAAC;;AAE9C,QAAAC,6BAAc,CAAC;AACb,YAAA,cAAc,EAAE,QAAQ;AACxB,YAAA,cAAc,EAAE,2BAA2B;AAC5C,SAAA,CAAC;AACF,QAAA,OAAO,2BAA2B;IACpC;IAAE,OAAO,KAAK,EAAE;QACd,MAAM,SAAS,GAAG,KAAiB;QACnC,GAAG,CAAC,4BAA4B,EAAE;YAChC,SAAS;YACT,OAAO,EAAE,SAAS,CAAC,OAAO;YAC1B,IAAI,EAAE,SAAS,CAAC,IAAI;AACrB,SAAA,CAAC;AACF,QAAA,OAAO,GAAG,SAAS,CAAC;AACpB,QAAA,OAAOL,mBAAY,CAAC,IAAI,CACtB,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,SAAS,CAAC,IAAI,EAAE,EAAE,EAC/D,EAAE,MAAM,EAAE,GAAG,EAAE,CAChB;IACH;AACF;;;;"}
@@ -1,10 +1,18 @@
1
+ import debug from 'debug';
1
2
  import { getAuth0Instance } from '../getAuth0Instance.js';
2
3
 
4
+ const log = debug('@smg-automotive/auth:token');
3
5
  const getAccessToken = async ({ protocol, host, context, }) => {
6
+ log('Getting access token', {
7
+ host,
8
+ protocol,
9
+ hasRequest: !!context?.request,
10
+ });
4
11
  const auth0Instance = getAuth0Instance({ protocol, host });
5
12
  const { token } = context?.request
6
13
  ? await auth0Instance.getAccessToken(context.request, context.response)
7
14
  : await auth0Instance.getAccessToken();
15
+ log('Access token retrieved', { tokenLength: token?.length || 0 });
8
16
  return token;
9
17
  };
10
18
 
@@ -1 +1 @@
1
- {"version":3,"file":"getAccessToken.js","sources":["../../../../../src/server/helpers/getAccessToken.ts"],"sourcesContent":[null],"names":[],"mappings":";;AAIO,MAAM,cAAc,GAAG,OAAO,EACnC,QAAQ,EACR,IAAI,EACJ,OAAO,GACwC,KAAI;IACnD,MAAM,aAAa,GAAG,gBAAgB,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAC1D,IAAA,MAAM,EAAE,KAAK,EAAE,GAAG,OAAO,EAAE;AACzB,UAAE,MAAM,aAAa,CAAC,cAAc,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,QAAQ;AACtE,UAAE,MAAM,aAAa,CAAC,cAAc,EAAE;AACxC,IAAA,OAAO,KAAK;AACd;;;;"}
1
+ {"version":3,"file":"getAccessToken.js","sources":["../../../../../src/server/helpers/getAccessToken.ts"],"sourcesContent":[null],"names":[],"mappings":";;;AAMA,MAAM,GAAG,GAAG,KAAK,CAAC,4BAA4B,CAAC;AAExC,MAAM,cAAc,GAAG,OAAO,EACnC,QAAQ,EACR,IAAI,EACJ,OAAO,GACwC,KAAI;IACnD,GAAG,CAAC,sBAAsB,EAAE;QAC1B,IAAI;QACJ,QAAQ;AACR,QAAA,UAAU,EAAE,CAAC,CAAC,OAAO,EAAE,OAAO;AAC/B,KAAA,CAAC;IACF,MAAM,aAAa,GAAG,gBAAgB,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAC1D,IAAA,MAAM,EAAE,KAAK,EAAE,GAAG,OAAO,EAAE;AACzB,UAAE,MAAM,aAAa,CAAC,cAAc,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,QAAQ;AACtE,UAAE,MAAM,aAAa,CAAC,cAAc,EAAE;AACxC,IAAA,GAAG,CAAC,wBAAwB,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,IAAI,CAAC,EAAE,CAAC;AAClE,IAAA,OAAO,KAAK;AACd;;;;"}
@@ -1,33 +1,61 @@
1
+ import debug from 'debug';
1
2
  import { getAccessToken } from './getAccessToken.js';
2
3
  import { getAuth0Instance } from '../getAuth0Instance.js';
3
4
  import { enrichUser } from '../../lib/enrichUser/session.js';
4
5
 
6
+ const log = debug('@smg-automotive/auth:user');
5
7
  const getSessionData = async ({ protocol, host, context, }) => {
8
+ log('Retrieving session data', {
9
+ host,
10
+ protocol,
11
+ hasRequest: !!context?.request,
12
+ });
6
13
  const auth0Instance = getAuth0Instance({ host, protocol });
7
- return context?.request
8
- ? auth0Instance.getSession(context.request)
9
- : auth0Instance.getSession();
14
+ const session = context?.request
15
+ ? await auth0Instance.getSession(context.request)
16
+ : await auth0Instance.getSession();
17
+ log('Session retrieved', { hasSession: !!session, hasUser: !!session?.user });
18
+ return session;
10
19
  };
11
20
  const getUser = async ({ context, host, protocol, }) => {
21
+ log('Getting user', { host, protocol });
12
22
  const sessionData = await getSessionData({ host, protocol, context });
13
- if (!sessionData || !sessionData.user)
23
+ if (!sessionData || !sessionData.user) {
24
+ log('No session or user found');
14
25
  return null;
15
- return sessionData.user;
26
+ }
27
+ const user = sessionData.user;
28
+ log('User retrieved', {
29
+ userId: user.userId,
30
+ sellerId: user.sellerId,
31
+ });
32
+ return user;
16
33
  };
17
34
  const getEnrichedUser = async ({ brand, context, host, protocol, }) => {
35
+ log('Getting enriched user', { brand, host, protocol });
18
36
  const user = await getUser({ host, protocol, context });
19
- if (!user)
37
+ if (!user) {
38
+ log('No user found, cannot enrich');
20
39
  return null;
40
+ }
41
+ log('Retrieving access token for enrichment');
21
42
  const accessToken = await getAccessToken({
22
43
  host,
23
44
  protocol,
24
45
  context,
25
46
  });
26
- return enrichUser({
47
+ log('Access token retrieved, enriching user');
48
+ const enrichedUser = await enrichUser({
27
49
  user,
28
50
  accessToken,
29
51
  brand,
30
52
  });
53
+ log('User enriched successfully', {
54
+ userId: enrichedUser.userId,
55
+ sellerId: enrichedUser.sellerId,
56
+ hasEntitlements: !!enrichedUser.entitlements,
57
+ });
58
+ return enrichedUser;
31
59
  };
32
60
 
33
61
  export { getEnrichedUser, getUser };
@@ -1 +1 @@
1
- {"version":3,"file":"getUser.js","sources":["../../../../../src/server/helpers/getUser.ts"],"sourcesContent":[null],"names":[],"mappings":";;;;AAUA,MAAM,cAAc,GAAG,OAAO,EAC5B,QAAQ,EACR,IAAI,EACJ,OAAO,GACwC,KAAI;IACnD,MAAM,aAAa,GAAG,gBAAgB,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;IAE1D,OAAO,OAAO,EAAE;UACZ,aAAa,CAAC,UAAU,CAAC,OAAO,CAAC,OAAO;AAC1C,UAAE,aAAa,CAAC,UAAU,EAAE;AAChC,CAAC;AAEM,MAAM,OAAO,GAAG,OAAO,EAC5B,OAAO,EACP,IAAI,EACJ,QAAQ,GAEY,KAAiC;AACrD,IAAA,MAAM,WAAW,GAAG,MAAM,cAAc,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;AACrE,IAAA,IAAI,CAAC,WAAW,IAAI,CAAC,WAAW,CAAC,IAAI;AAAE,QAAA,OAAO,IAAI;IAElD,OAAO,WAAW,CAAC,IAAmB;AACxC;AAEO,MAAM,eAAe,GAAG,OAAO,EACpC,KAAK,EACL,OAAO,EACP,IAAI,EACJ,QAAQ,GAIP,KAAyC;AAC1C,IAAA,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;AACvD,IAAA,IAAI,CAAC,IAAI;AAAE,QAAA,OAAO,IAAI;AAEtB,IAAA,MAAM,WAAW,GAAG,MAAM,cAAc,CAAC;QACvC,IAAI;QACJ,QAAQ;QACR,OAAO;AACR,KAAA,CAAC;AACF,IAAA,OAAO,UAAU,CAAC;QAChB,IAAI;QACJ,WAAW;QACX,KAAK;AACN,KAAA,CAAC;AACJ;;;;"}
1
+ {"version":3,"file":"getUser.js","sources":["../../../../../src/server/helpers/getUser.ts"],"sourcesContent":[null],"names":[],"mappings":";;;;;AAYA,MAAM,GAAG,GAAG,KAAK,CAAC,2BAA2B,CAAC;AAE9C,MAAM,cAAc,GAAG,OAAO,EAC5B,QAAQ,EACR,IAAI,EACJ,OAAO,GACwC,KAAI;IACnD,GAAG,CAAC,yBAAyB,EAAE;QAC7B,IAAI;QACJ,QAAQ;AACR,QAAA,UAAU,EAAE,CAAC,CAAC,OAAO,EAAE,OAAO;AAC/B,KAAA,CAAC;IACF,MAAM,aAAa,GAAG,gBAAgB,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;AAE1D,IAAA,MAAM,OAAO,GAAG,OAAO,EAAE;UACrB,MAAM,aAAa,CAAC,UAAU,CAAC,OAAO,CAAC,OAAO;AAChD,UAAE,MAAM,aAAa,CAAC,UAAU,EAAE;AAEpC,IAAA,GAAG,CAAC,mBAAmB,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC;AAC7E,IAAA,OAAO,OAAO;AAChB,CAAC;AAEM,MAAM,OAAO,GAAG,OAAO,EAC5B,OAAO,EACP,IAAI,EACJ,QAAQ,GAEY,KAAiC;IACrD,GAAG,CAAC,cAAc,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;AACvC,IAAA,MAAM,WAAW,GAAG,MAAM,cAAc,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;IACrE,IAAI,CAAC,WAAW,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE;QACrC,GAAG,CAAC,0BAA0B,CAAC;AAC/B,QAAA,OAAO,IAAI;IACb;AAEA,IAAA,MAAM,IAAI,GAAG,WAAW,CAAC,IAAmB;IAC5C,GAAG,CAAC,gBAAgB,EAAE;QACpB,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,QAAQ,EAAE,IAAI,CAAC,QAAQ;AACxB,KAAA,CAAC;AACF,IAAA,OAAO,IAAI;AACb;AAEO,MAAM,eAAe,GAAG,OAAO,EACpC,KAAK,EACL,OAAO,EACP,IAAI,EACJ,QAAQ,GAIP,KAAyC;IAC1C,GAAG,CAAC,uBAAuB,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;AACvD,IAAA,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;IACvD,IAAI,CAAC,IAAI,EAAE;QACT,GAAG,CAAC,8BAA8B,CAAC;AACnC,QAAA,OAAO,IAAI;IACb;IAEA,GAAG,CAAC,wCAAwC,CAAC;AAC7C,IAAA,MAAM,WAAW,GAAG,MAAM,cAAc,CAAC;QACvC,IAAI;QACJ,QAAQ;QACR,OAAO;AACR,KAAA,CAAC;IACF,GAAG,CAAC,wCAAwC,CAAC;AAC7C,IAAA,MAAM,YAAY,GAAG,MAAM,UAAU,CAAC;QACpC,IAAI;QACJ,WAAW;QACX,KAAK;AACN,KAAA,CAAC;IACF,GAAG,CAAC,4BAA4B,EAAE;QAChC,MAAM,EAAE,YAAY,CAAC,MAAM;QAC3B,QAAQ,EAAE,YAAY,CAAC,QAAQ;AAC/B,QAAA,eAAe,EAAE,CAAC,CAAC,YAAY,CAAC,YAAY;AAC7C,KAAA,CAAC;AACF,IAAA,OAAO,YAAY;AACrB;;;;"}
@@ -1,4 +1,5 @@
1
1
  import { NextResponse } from 'next/server';
2
+ import debug from 'debug';
2
3
  import { getAuth0Config } from '../../config/auth0.js';
3
4
  import { getAuth0Instance } from '../getAuth0Instance.js';
4
5
  import { handleAccessTokenRequest } from './token.js';
@@ -8,6 +9,17 @@ import { handleCrossDomainLogout, deleteRelatedSessionCookies } from './logout.j
8
9
  import { addLoginParams } from './login.js';
9
10
  import { combineHeaders } from './combineHeaders.js';
10
11
 
12
+ const log = debug('@smg-automotive/auth:middleware');
13
+ const generateRequestId = () => {
14
+ // UUID v4 format: xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx
15
+ // where x is any hex digit and y is one of 8, 9, A, B
16
+ return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {
17
+ // eslint-disable-next-line sonarjs/pseudo-random
18
+ const r = (Math.random() * 16) | 0;
19
+ const v = c === 'x' ? r : (r & 0x3) | 0x8;
20
+ return v.toString(16);
21
+ });
22
+ };
11
23
  const isAuthRoute = (pathname, auth0Config) => {
12
24
  const { loginEndpoint, logoutEndpoint, callbackEndpoint, userProfileEndpoint, tokenEndpoint, } = auth0Config;
13
25
  return [
@@ -19,34 +31,49 @@ const isAuthRoute = (pathname, auth0Config) => {
19
31
  ].includes(pathname);
20
32
  };
21
33
  const authMiddleware = async ({ request, isProtectedRoute, language, host, protocol, onError, brand, }) => {
34
+ const requestId = generateRequestId();
22
35
  const { pathname } = request.nextUrl;
36
+ log('Processing request', {
37
+ requestId,
38
+ pathname,
39
+ host,
40
+ protocol,
41
+ method: request.method,
42
+ });
23
43
  const auth0Instance = getAuth0Instance({
24
44
  host,
25
45
  protocol,
26
46
  });
27
47
  const auth0Config = getAuth0Config();
28
48
  const isAuthErrorRoute = pathname.endsWith(auth0Config.globalAuthErrorPath);
49
+ log('Auth route check', { requestId, pathname, isAuthErrorRoute });
29
50
  const crossDomainLogoutResult = handleCrossDomainLogout({
51
+ requestId,
30
52
  host,
31
53
  protocol,
32
54
  request,
33
55
  auth0Config,
34
56
  });
35
57
  if (crossDomainLogoutResult) {
58
+ log('Cross-domain logout detected, redirecting', { requestId });
36
59
  return crossDomainLogoutResult;
37
60
  }
38
61
  addLoginParams({
39
62
  request,
40
63
  auth0Config,
41
64
  });
65
+ log('Calling Auth0 middleware', { requestId });
42
66
  const authResponse = await auth0Instance.middleware(request);
67
+ log('Auth0 middleware completed', { requestId, status: authResponse.status });
43
68
  deleteRelatedSessionCookies({
69
+ requestId,
44
70
  host,
45
71
  request,
46
72
  response: authResponse,
47
73
  auth0Config,
48
74
  });
49
75
  const accessTokenRequestResult = await handleAccessTokenRequest({
76
+ requestId,
50
77
  request,
51
78
  response: authResponse,
52
79
  auth0Instance,
@@ -54,9 +81,11 @@ const authMiddleware = async ({ request, isProtectedRoute, language, host, proto
54
81
  onError,
55
82
  });
56
83
  if (accessTokenRequestResult) {
84
+ log('Access token request handled', { requestId });
57
85
  return accessTokenRequestResult;
58
86
  }
59
87
  const handleUserProfileResult = await handleUserProfile({
88
+ requestId,
60
89
  request,
61
90
  response: authResponse,
62
91
  auth0Instance,
@@ -64,13 +93,17 @@ const authMiddleware = async ({ request, isProtectedRoute, language, host, proto
64
93
  brand,
65
94
  });
66
95
  if (handleUserProfileResult) {
96
+ log('User profile request handled', { requestId });
67
97
  return handleUserProfileResult;
68
98
  }
69
99
  if (isAuthRoute(pathname, auth0Config) || isAuthErrorRoute) {
100
+ log('Auth route, returning response', { requestId });
70
101
  return authResponse;
71
102
  }
72
103
  const isProtected = !isAuthErrorRoute && isProtectedRoute(pathname);
104
+ log('Route protection check', { requestId, pathname, isProtected });
73
105
  const protectRouteResult = await protectRoute({
106
+ requestId,
74
107
  isProtected,
75
108
  auth0Instance,
76
109
  auth0Config,
@@ -80,8 +113,13 @@ const authMiddleware = async ({ request, isProtectedRoute, language, host, proto
80
113
  onError,
81
114
  });
82
115
  if (protectRouteResult) {
116
+ log('Route protection handled', {
117
+ requestId,
118
+ redirected: protectRouteResult.status === 307,
119
+ });
83
120
  return protectRouteResult;
84
121
  }
122
+ log('Request completed, combining headers', { requestId });
85
123
  return combineHeaders({
86
124
  middlewareResponse: NextResponse.next({
87
125
  request: {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../../../src/server/middleware/index.ts"],"sourcesContent":[null],"names":[],"mappings":";;;;;;;;;;AAeA,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,OAAO,EACP,KAAK,GASN,KAA2B;AAC1B,IAAA,MAAM,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,OAAO;IACpC,MAAM,aAAa,GAAG,gBAAgB,CAAC;QACrC,IAAI;QACJ,QAAQ;AACT,KAAA,CAAC;AAEF,IAAA,MAAM,WAAW,GAAG,cAAc,EAAE;IACpC,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;AAEA,IAAA,cAAc,CAAC;QACb,OAAO;QACP,WAAW;AACZ,KAAA,CAAC;IAEF,MAAM,YAAY,GAAG,MAAM,aAAa,CAAC,UAAU,CAAC,OAAO,CAAC;AAE5D,IAAA,2BAA2B,CAAC;QAC1B,IAAI;QACJ,OAAO;AACP,QAAA,QAAQ,EAAE,YAAY;QACtB,WAAW;AACZ,KAAA,CAAC;AAEF,IAAA,MAAM,wBAAwB,GAAG,MAAM,wBAAwB,CAAC;QAC9D,OAAO;AACP,QAAA,QAAQ,EAAE,YAAY;QACtB,aAAa;QACb,WAAW;QACX,OAAO;AACR,KAAA,CAAC;IACF,IAAI,wBAAwB,EAAE;AAC5B,QAAA,OAAO,wBAAwB;IACjC;AAEA,IAAA,MAAM,uBAAuB,GAAG,MAAM,iBAAiB,CAAC;QACtD,OAAO;AACP,QAAA,QAAQ,EAAE,YAAY;QACtB,aAAa;QACb,WAAW;QACX,KAAK;AACN,KAAA,CAAC;IACF,IAAI,uBAAuB,EAAE;AAC3B,QAAA,OAAO,uBAAuB;IAChC;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;;;;"}
1
+ {"version":3,"file":"index.js","sources":["../../../../../src/server/middleware/index.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
@@ -1,12 +1,14 @@
1
1
  import { NextRequest, NextResponse } from 'next/server';
2
2
  import { Auth0Config } from 'src/types';
3
- export declare const handleCrossDomainLogout: ({ host, protocol, request, auth0Config: { languageConfig, logoutEndpoint }, }: {
3
+ export declare const handleCrossDomainLogout: ({ requestId, host, protocol, request, auth0Config: { languageConfig, logoutEndpoint }, }: {
4
+ requestId: string;
4
5
  host: string;
5
6
  protocol: string;
6
7
  request: NextRequest;
7
8
  auth0Config: Auth0Config;
8
9
  }) => NextResponse | void;
9
- export declare const deleteRelatedSessionCookies: ({ host, request, response, auth0Config: { logoutEndpoint, authCookieNames, legacyAccessTokenName, legacyRefreshTokenName, }, }: {
10
+ export declare const deleteRelatedSessionCookies: ({ requestId, host, request, response, auth0Config: { logoutEndpoint, authCookieNames, legacyAccessTokenName, legacyRefreshTokenName, }, }: {
11
+ requestId: string;
10
12
  host: string;
11
13
  request: NextRequest;
12
14
  response: NextResponse;
@@ -1,5 +1,7 @@
1
1
  import { NextResponse } from 'next/server';
2
+ import debug from 'debug';
2
3
 
4
+ const log = debug('@smg-automotive/auth:logout');
3
5
  const validateReturnTo = ({ pathOrUrl, host, protocol, otherDomainHost, crossDomainLogout, }) => {
4
6
  if (typeof pathOrUrl !== 'string')
5
7
  return false;
@@ -41,12 +43,14 @@ const getOtherDomainHost = (currentHost) => {
41
43
  }
42
44
  return currentHost;
43
45
  };
44
- const handleCrossDomainLogout = ({ host, protocol, request, auth0Config: { languageConfig, logoutEndpoint }, }) => {
46
+ const handleCrossDomainLogout = ({ requestId, host, protocol, request, auth0Config: { languageConfig, logoutEndpoint }, }) => {
45
47
  if (request.nextUrl.pathname !== logoutEndpoint)
46
48
  return;
49
+ log('Handling logout request', { requestId, host, protocol });
47
50
  const searchParams = new URLSearchParams(request.nextUrl.search);
48
51
  const specifiedReturnTo = searchParams.get('returnTo') || '';
49
52
  const crossDomainLogout = searchParams.get('crossDomain') === 'true';
53
+ log('Logout parameters', { requestId, specifiedReturnTo, crossDomainLogout });
50
54
  const otherDomainHost = getOtherDomainHost(host);
51
55
  const currentDomainUrl = `${protocol}://${host}`;
52
56
  const locale = searchParams.get('locale');
@@ -58,16 +62,23 @@ const handleCrossDomainLogout = ({ host, protocol, request, auth0Config: { langu
58
62
  pathOrUrl: specifiedReturnTo,
59
63
  crossDomainLogout,
60
64
  });
65
+ log('ReturnTo validation', { requestId, isSafePath, specifiedReturnTo });
61
66
  if (isSafePath && specifiedReturnTo) {
62
67
  returnTo = specifiedReturnTo;
63
68
  }
64
69
  if (!crossDomainLogout && otherDomainHost && otherDomainHost !== host) {
70
+ log('Initiating cross-domain logout', { requestId, otherDomainHost });
65
71
  const backToCurrentDomainUrl = new URL(logoutEndpoint, currentDomainUrl);
66
72
  backToCurrentDomainUrl.searchParams.set('returnTo', returnTo);
67
73
  backToCurrentDomainUrl.searchParams.set('crossDomain', 'true');
68
74
  const otherDomainLogoutUrl = new URL(logoutEndpoint, `${protocol}://${otherDomainHost}`);
69
75
  otherDomainLogoutUrl.searchParams.set('crossDomain', 'true');
70
76
  otherDomainLogoutUrl.searchParams.set('returnTo', backToCurrentDomainUrl.toString());
77
+ log('Redirecting to other domain for logout', {
78
+ requestId,
79
+ otherDomainHost,
80
+ returnUrl: backToCurrentDomainUrl.toString(),
81
+ });
71
82
  return NextResponse.redirect(otherDomainLogoutUrl, {
72
83
  status: 302,
73
84
  });
@@ -91,27 +102,32 @@ const getLegacyCookieDomain = (hostname) => {
91
102
  const base = parts.slice(-2).join('.');
92
103
  return `.${base}`;
93
104
  };
94
- const deleteRelatedSessionCookies = ({ host, request, response, auth0Config: { logoutEndpoint, authCookieNames, legacyAccessTokenName, legacyRefreshTokenName, }, }) => {
105
+ const deleteRelatedSessionCookies = ({ requestId, host, request, response, auth0Config: { logoutEndpoint, authCookieNames, legacyAccessTokenName, legacyRefreshTokenName, }, }) => {
95
106
  if (request.nextUrl.pathname !== logoutEndpoint || !response)
96
107
  return;
97
- authCookieNames.forEach((cookieName) => {
108
+ const cookiesToDelete = authCookieNames.flatMap((cookieName) => [
109
+ cookieName,
110
+ `${cookieName}__0`,
111
+ `${cookieName}__1`,
112
+ ]);
113
+ log('Deleting session cookies', {
114
+ requestId,
115
+ host,
116
+ cookies: cookiesToDelete,
117
+ });
118
+ cookiesToDelete.forEach((cookieName) => {
98
119
  response.cookies.delete({
99
120
  name: cookieName,
100
121
  maxAge: 0,
101
122
  path: '/',
102
123
  });
103
- response.cookies.delete({
104
- name: `${cookieName}__0`,
105
- maxAge: 0,
106
- path: '/',
107
- });
108
- response.cookies.delete({
109
- name: `${cookieName}__1`,
110
- maxAge: 0,
111
- path: '/',
112
- });
113
124
  });
114
125
  const legacyCookieDomain = getLegacyCookieDomain(host);
126
+ log('Deleting legacy cookies', {
127
+ requestId,
128
+ cookies: [legacyAccessTokenName, legacyRefreshTokenName],
129
+ legacyCookieDomain,
130
+ });
115
131
  response.cookies.delete({
116
132
  name: legacyAccessTokenName,
117
133
  maxAge: 0,
@@ -124,6 +140,7 @@ const deleteRelatedSessionCookies = ({ host, request, response, auth0Config: { l
124
140
  path: '/',
125
141
  domain: legacyCookieDomain,
126
142
  });
143
+ log('All session cookies deleted', { requestId });
127
144
  };
128
145
 
129
146
  export { deleteRelatedSessionCookies, handleCrossDomainLogout };
@@ -1 +1 @@
1
- {"version":3,"file":"logout.js","sources":["../../../../../src/server/middleware/logout.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"logout.js","sources":["../../../../../src/server/middleware/logout.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
@@ -1,7 +1,8 @@
1
1
  import { NextRequest, NextResponse } from 'next/server';
2
2
  import { Auth0Client } from '@auth0/nextjs-auth0/server';
3
3
  import { Auth0Config } from 'src/types/auth0/config';
4
- export declare const proactivelyRefreshAccessToken: ({ request, response, auth0Instance, auth0Config, }: {
4
+ export declare const proactivelyRefreshAccessToken: ({ requestId, request, response, auth0Instance, auth0Config, }: {
5
+ requestId: string;
5
6
  request: NextRequest;
6
7
  response: NextResponse;
7
8
  auth0Instance: Auth0Client;
@@ -1,10 +1,28 @@
1
- const proactivelyRefreshAccessToken = async ({ request, response, auth0Instance, auth0Config, }) => {
1
+ import debug from 'debug';
2
+
3
+ const log = debug('@smg-automotive/auth:token');
4
+ const proactivelyRefreshAccessToken = async ({ requestId, request, response, auth0Instance, auth0Config, }) => {
5
+ log('Checking if token refresh is needed', { requestId });
2
6
  const session = await auth0Instance.getSession(request);
3
- const shouldRefresh = auth0Config.debugForceTokenRefresh ||
4
- (session?.tokenSet.expiresAt || 0) < Date.now() / 1000 + 30;
5
- return auth0Instance.getAccessToken(request, response, {
7
+ const expiresAt = session?.tokenSet.expiresAt || 0;
8
+ const expiresInSeconds = expiresAt - Date.now() / 1000;
9
+ const shouldRefresh = auth0Config.debugForceTokenRefresh || expiresAt < Date.now() / 1000 + 30;
10
+ log('Token refresh decision', {
11
+ requestId,
12
+ shouldRefresh,
13
+ expiresInSeconds: Math.round(expiresInSeconds),
14
+ debugForceRefresh: auth0Config.debugForceTokenRefresh,
15
+ hasSession: !!session,
16
+ });
17
+ const result = await auth0Instance.getAccessToken(request, response, {
6
18
  refresh: shouldRefresh,
7
19
  });
20
+ log('Access token retrieved', {
21
+ requestId,
22
+ expiresAt: result.expiresAt,
23
+ tokenLength: result.token.length,
24
+ });
25
+ return result;
8
26
  };
9
27
 
10
28
  export { proactivelyRefreshAccessToken };
@@ -1 +1 @@
1
- {"version":3,"file":"proactivelyRefreshAccessToken.js","sources":["../../../../../src/server/middleware/proactivelyRefreshAccessToken.ts"],"sourcesContent":[null],"names":[],"mappings":"AAKO,MAAM,6BAA6B,GAAG,OAAO,EAClD,OAAO,EACP,QAAQ,EACR,aAAa,EACb,WAAW,GAMZ,KAAmD;IAClD,MAAM,OAAO,GAAG,MAAM,aAAa,CAAC,UAAU,CAAC,OAAO,CAAC;AAEvD,IAAA,MAAM,aAAa,GACjB,WAAW,CAAC,sBAAsB;AAClC,QAAA,CAAC,OAAO,EAAE,QAAQ,CAAC,SAAS,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,GAAG,EAAE;AAC7D,IAAA,OAAO,aAAa,CAAC,cAAc,CAAC,OAAO,EAAE,QAAQ,EAAE;AACrD,QAAA,OAAO,EAAE,aAAa;AACvB,KAAA,CAAC;AACJ;;;;"}
1
+ {"version":3,"file":"proactivelyRefreshAccessToken.js","sources":["../../../../../src/server/middleware/proactivelyRefreshAccessToken.ts"],"sourcesContent":[null],"names":[],"mappings":";;AAMA,MAAM,GAAG,GAAG,KAAK,CAAC,4BAA4B,CAAC;AAExC,MAAM,6BAA6B,GAAG,OAAO,EAClD,SAAS,EACT,OAAO,EACP,QAAQ,EACR,aAAa,EACb,WAAW,GAOZ,KAAmD;AAClD,IAAA,GAAG,CAAC,qCAAqC,EAAE,EAAE,SAAS,EAAE,CAAC;IACzD,MAAM,OAAO,GAAG,MAAM,aAAa,CAAC,UAAU,CAAC,OAAO,CAAC;IAEvD,MAAM,SAAS,GAAG,OAAO,EAAE,QAAQ,CAAC,SAAS,IAAI,CAAC;IAClD,MAAM,gBAAgB,GAAG,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI;AACtD,IAAA,MAAM,aAAa,GACjB,WAAW,CAAC,sBAAsB,IAAI,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,GAAG,EAAE;IAE1E,GAAG,CAAC,wBAAwB,EAAE;QAC5B,SAAS;QACT,aAAa;AACb,QAAA,gBAAgB,EAAE,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC;QAC9C,iBAAiB,EAAE,WAAW,CAAC,sBAAsB;QACrD,UAAU,EAAE,CAAC,CAAC,OAAO;AACtB,KAAA,CAAC;IAEF,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,cAAc,CAAC,OAAO,EAAE,QAAQ,EAAE;AACnE,QAAA,OAAO,EAAE,aAAa;AACvB,KAAA,CAAC;IAEF,GAAG,CAAC,wBAAwB,EAAE;QAC5B,SAAS;QACT,SAAS,EAAE,MAAM,CAAC,SAAS;AAC3B,QAAA,WAAW,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM;AACjC,KAAA,CAAC;AAEF,IAAA,OAAO,MAAM;AACf;;;;"}
@@ -2,7 +2,8 @@ import { NextRequest, NextResponse } from 'next/server';
2
2
  import { Auth0Client } from '@auth0/nextjs-auth0/server';
3
3
  import { Brand } from 'src/types/brand';
4
4
  import { Auth0Config } from 'src/types';
5
- export declare const handleUserProfile: ({ request, response, auth0Instance, auth0Config, brand, }: {
5
+ export declare const handleUserProfile: ({ requestId, request, response, auth0Instance, auth0Config, brand, }: {
6
+ requestId: string;
6
7
  request: NextRequest;
7
8
  response: NextResponse;
8
9
  auth0Instance: Auth0Client;