@smg-automotive/auth 6.8.0-auth0-update-root.3 → 6.8.0-auth0-update-root.4
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/dist/cjs/lib/authLinks.d.ts +3 -1
- package/dist/cjs/lib/authLinks.js +10 -5
- package/dist/cjs/lib/authLinks.js.map +1 -1
- package/dist/cjs/server/getAuth0Instance.d.ts +3 -1
- package/dist/cjs/server/getAuth0Instance.js +2 -2
- package/dist/cjs/server/getAuth0Instance.js.map +1 -1
- package/dist/cjs/server/hooks/onCallbackFactory.d.ts +3 -2
- package/dist/cjs/server/hooks/onCallbackFactory.js +54 -1
- package/dist/cjs/server/hooks/onCallbackFactory.js.map +1 -1
- package/dist/esm/lib/authLinks.d.ts +3 -1
- package/dist/esm/lib/authLinks.js +10 -5
- package/dist/esm/lib/authLinks.js.map +1 -1
- package/dist/esm/server/getAuth0Instance.d.ts +3 -1
- package/dist/esm/server/getAuth0Instance.js +2 -2
- package/dist/esm/server/getAuth0Instance.js.map +1 -1
- package/dist/esm/server/hooks/onCallbackFactory.d.ts +3 -2
- package/dist/esm/server/hooks/onCallbackFactory.js +54 -1
- package/dist/esm/server/hooks/onCallbackFactory.js.map +1 -1
- package/package.json +1 -1
|
@@ -5,8 +5,10 @@ export declare const getLogoutLink: ({ returnTo, language, auth0Config, }: {
|
|
|
5
5
|
language?: Language;
|
|
6
6
|
auth0Config: Auth0Config | null;
|
|
7
7
|
}) => string;
|
|
8
|
-
export declare const getLoginLink: ({ returnTo, language, auth0Config, }: {
|
|
8
|
+
export declare const getLoginLink: ({ returnTo, language, auth0Config, selectedSellerId, impersonateSellerId, }: {
|
|
9
9
|
returnTo?: string;
|
|
10
10
|
language?: Language;
|
|
11
11
|
auth0Config: Auth0Config | null;
|
|
12
|
+
selectedSellerId?: string;
|
|
13
|
+
impersonateSellerId?: string;
|
|
12
14
|
}) => string;
|
|
@@ -2,14 +2,19 @@
|
|
|
2
2
|
|
|
3
3
|
var i18nPkg = require('@smg-automotive/i18n-pkg');
|
|
4
4
|
|
|
5
|
-
const getLoginLink = ({ returnTo, language = i18nPkg.defaultLanguage, auth0Config, }) => {
|
|
5
|
+
const getLoginLink = ({ returnTo, language = i18nPkg.defaultLanguage, auth0Config, selectedSellerId, impersonateSellerId, }) => {
|
|
6
6
|
if (!auth0Config) {
|
|
7
7
|
throw new Error('Missing auth0Config');
|
|
8
8
|
}
|
|
9
|
-
const
|
|
10
|
-
|
|
11
|
-
:
|
|
12
|
-
|
|
9
|
+
const searchParams = new URLSearchParams({
|
|
10
|
+
locale: language,
|
|
11
|
+
...(selectedSellerId ? { seller_id: selectedSellerId } : {}),
|
|
12
|
+
...(impersonateSellerId
|
|
13
|
+
? { impersonate_seller_id: impersonateSellerId }
|
|
14
|
+
: {}),
|
|
15
|
+
...(returnTo ? { returnTo: returnTo } : {}),
|
|
16
|
+
});
|
|
17
|
+
return `${auth0Config.loginEndpoint}?${searchParams.toString()}`;
|
|
13
18
|
};
|
|
14
19
|
|
|
15
20
|
exports.getLoginLink = getLoginLink;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"authLinks.js","sources":["../../../../src/lib/authLinks.ts"],"sourcesContent":[null],"names":["defaultLanguage"],"mappings":";;;;AAwBO,MAAM,YAAY,GAAG,CAAC,EAC3B,QAAQ,EACR,QAAQ,GAAGA,uBAAe,EAC1B,WAAW,
|
|
1
|
+
{"version":3,"file":"authLinks.js","sources":["../../../../src/lib/authLinks.ts"],"sourcesContent":[null],"names":["defaultLanguage"],"mappings":";;;;AAwBO,MAAM,YAAY,GAAG,CAAC,EAC3B,QAAQ,EACR,QAAQ,GAAGA,uBAAe,EAC1B,WAAW,EACX,gBAAgB,EAChB,mBAAmB,GAOpB,KAAI;IACH,IAAI,CAAC,WAAW,EAAE;AAChB,QAAA,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC;IACxC;AAEA,IAAA,MAAM,YAAY,GAAG,IAAI,eAAe,CAAC;AACvC,QAAA,MAAM,EAAE,QAAQ;AAChB,QAAA,IAAI,gBAAgB,GAAG,EAAE,SAAS,EAAE,gBAAgB,EAAE,GAAG,EAAE,CAAC;AAC5D,QAAA,IAAI;AACF,cAAE,EAAE,qBAAqB,EAAE,mBAAmB;cAC5C,EAAE,CAAC;AACP,QAAA,IAAI,QAAQ,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC;AAC5C,KAAA,CAAC;IAEF,OAAO,CAAA,EAAG,WAAW,CAAC,aAAa,CAAA,CAAA,EAAI,YAAY,CAAC,QAAQ,EAAE,CAAA,CAAE;AAClE;;;;"}
|
|
@@ -4,5 +4,7 @@ type GetAuth0InstanceContext = {
|
|
|
4
4
|
host: string;
|
|
5
5
|
isProxied: boolean;
|
|
6
6
|
};
|
|
7
|
-
export declare const getAuth0Instance: ({ protocol, host, isProxied, }: GetAuth0InstanceContext
|
|
7
|
+
export declare const getAuth0Instance: ({ protocol, host, isProxied, onError, }: GetAuth0InstanceContext & {
|
|
8
|
+
onError?: (error: Error) => void;
|
|
9
|
+
}) => Auth0Client;
|
|
8
10
|
export {};
|
|
@@ -9,7 +9,7 @@ const instances = {};
|
|
|
9
9
|
const buildInstanceKey = ({ host, isProxied, protocol, }) => {
|
|
10
10
|
return `${protocol}-${host}-isProxied-${isProxied}`;
|
|
11
11
|
};
|
|
12
|
-
const getAuth0Instance = ({ protocol, host, isProxied, }) => {
|
|
12
|
+
const getAuth0Instance = ({ protocol, host, isProxied, onError, }) => {
|
|
13
13
|
const key = buildInstanceKey({ host, isProxied, protocol });
|
|
14
14
|
const instance = instances[key];
|
|
15
15
|
if (instance) {
|
|
@@ -34,7 +34,7 @@ const getAuth0Instance = ({ protocol, host, isProxied, }) => {
|
|
|
34
34
|
audience: auth0Config.audience,
|
|
35
35
|
},
|
|
36
36
|
beforeSessionSaved: beforeSessionSavedFactory.beforeSessionSavedFactory(auth0Config),
|
|
37
|
-
onCallback: onCallbackFactory.onCallbackFactory({ auth0Config, appBaseUrl }),
|
|
37
|
+
onCallback: onCallbackFactory.onCallbackFactory({ auth0Config, appBaseUrl, onError }),
|
|
38
38
|
});
|
|
39
39
|
instances[key] = newInstance;
|
|
40
40
|
return newInstance;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getAuth0Instance.js","sources":["../../../../src/server/getAuth0Instance.ts"],"sourcesContent":[null],"names":["getAuth0Config","Auth0Client","beforeSessionSavedFactory","onCallbackFactory"],"mappings":";;;;;;;AAQA,MAAM,SAAS,GAAmB,EAAE;AAQpC,MAAM,gBAAgB,GAAG,CAAC,EACxB,IAAI,EACJ,SAAS,EACT,QAAQ,GACgB,KAAI;AAC5B,IAAA,OAAO,GAAG,QAAQ,CAAA,CAAA,EAAI,IAAI,CAAA,WAAA,EAAc,SAAS,EAAE;AACrD,CAAC;AAEM,MAAM,gBAAgB,GAAG,CAAC,EAC/B,QAAQ,EACR,IAAI,EACJ,SAAS,
|
|
1
|
+
{"version":3,"file":"getAuth0Instance.js","sources":["../../../../src/server/getAuth0Instance.ts"],"sourcesContent":[null],"names":["getAuth0Config","Auth0Client","beforeSessionSavedFactory","onCallbackFactory"],"mappings":";;;;;;;AAQA,MAAM,SAAS,GAAmB,EAAE;AAQpC,MAAM,gBAAgB,GAAG,CAAC,EACxB,IAAI,EACJ,SAAS,EACT,QAAQ,GACgB,KAAI;AAC5B,IAAA,OAAO,GAAG,QAAQ,CAAA,CAAA,EAAI,IAAI,CAAA,WAAA,EAAc,SAAS,EAAE;AACrD,CAAC;AAEM,MAAM,gBAAgB,GAAG,CAAC,EAC/B,QAAQ,EACR,IAAI,EACJ,SAAS,EACT,OAAO,GAGR,KAAiB;AAChB,IAAA,MAAM,GAAG,GAAG,gBAAgB,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC;AAC3D,IAAA,MAAM,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC;IAC/B,IAAI,QAAQ,EAAE;AACZ,QAAA,OAAO,QAAQ;IACjB;IAEA,MAAM,WAAW,GAAGA,oBAAc,CAAC,EAAE,SAAS,EAAE,CAAC;AACjD,IAAA,MAAM,UAAU,GAAG,CAAA,EAAG,QAAQ,CAAA,GAAA,EAAM,IAAI,EAAE;AAC1C,IAAA,MAAM,WAAW,GAAG,IAAIC,kBAAW,CAAC;QAClC,UAAU;AACV,QAAA,MAAM,EAAE;YACN,KAAK,EAAE,WAAW,CAAC,aAAa;YAChC,MAAM,EAAE,WAAW,CAAC,cAAc;YAClC,QAAQ,EAAE,WAAW,CAAC,gBAAgB;AACvC,SAAA;AACD,QAAA,OAAO,EAAE;AACP,YAAA,MAAM,EAAE;gBACN,IAAI,EAAE,WAAW,CAAC,iBAAiB;AACpC,aAAA;AACF,SAAA;AACD,QAAA,uBAAuB,EAAE;YACvB,KAAK,EAAE,WAAW,CAAC,MAAM;YACzB,QAAQ,EAAE,WAAW,CAAC,QAAQ;AAC/B,SAAA;AACD,QAAA,kBAAkB,EAAEC,mDAAyB,CAAC,WAAW,CAAC;QAC1D,UAAU,EAAEC,mCAAiB,CAAC,EAAE,WAAW,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC;AACpE,KAAA,CAAC;AACF,IAAA,SAAS,CAAC,GAAG,CAAC,GAAG,WAAW;AAC5B,IAAA,OAAO,WAAW;AACpB;;;;"}
|
|
@@ -2,7 +2,8 @@ import { NextResponse } from 'next/server';
|
|
|
2
2
|
import type { OnCallbackContext, SessionData } from '@auth0/nextjs-auth0/types';
|
|
3
3
|
import type { SdkError } from '@auth0/nextjs-auth0/errors';
|
|
4
4
|
import { Auth0Config } from 'src/types';
|
|
5
|
-
export declare const onCallbackFactory: ({ auth0Config, appBaseUrl, }: {
|
|
5
|
+
export declare const onCallbackFactory: ({ auth0Config, appBaseUrl, onError, }: {
|
|
6
6
|
auth0Config: Auth0Config;
|
|
7
7
|
appBaseUrl: string;
|
|
8
|
-
|
|
8
|
+
onError?: (error: Error) => void;
|
|
9
|
+
}) => (error: SdkError | null, context: OnCallbackContext, session: SessionData | null) => Promise<NextResponse>;
|
|
@@ -5,7 +5,60 @@ var headers = require('next/headers');
|
|
|
5
5
|
var jose = require('jose');
|
|
6
6
|
|
|
7
7
|
const createCallbackResponse = (context, appBaseUrl) => server.NextResponse.redirect(new URL(context.returnTo || '/', appBaseUrl));
|
|
8
|
-
const
|
|
8
|
+
const getLocaleFromContext = ({ returnTo }) => {
|
|
9
|
+
if (!returnTo) {
|
|
10
|
+
return '';
|
|
11
|
+
}
|
|
12
|
+
try {
|
|
13
|
+
const url = new URL(returnTo);
|
|
14
|
+
return (url.searchParams.get('locale') || url.pathname.split('/')[1]) ?? '';
|
|
15
|
+
}
|
|
16
|
+
catch (parsingError) {
|
|
17
|
+
// eslint-disable-next-line no-console
|
|
18
|
+
console.warn('[Auth-package] Failed to parse locale from returnTo', parsingError);
|
|
19
|
+
}
|
|
20
|
+
return '';
|
|
21
|
+
};
|
|
22
|
+
const errorCodeRegex = /\(([^)(]+)\)/;
|
|
23
|
+
const incompleteTokenErrorCode = 'ERR_INCOMPLETE_TOKEN';
|
|
24
|
+
const handleAuth0Error = ({ error, auth0Config, appBaseUrl, localeFromUrl, onError, }) => {
|
|
25
|
+
const authorizedLocales = auth0Config.languageConfig.supported;
|
|
26
|
+
const locale = authorizedLocales.includes(localeFromUrl)
|
|
27
|
+
? localeFromUrl
|
|
28
|
+
: auth0Config.languageConfig.default;
|
|
29
|
+
const expectedErrors = [
|
|
30
|
+
'UNVERIFIED_EMAIL',
|
|
31
|
+
'INITIAL_UNVERIFIED_EMAIL',
|
|
32
|
+
incompleteTokenErrorCode,
|
|
33
|
+
];
|
|
34
|
+
const matchedErrorCode = (error.message ?? '').match(errorCodeRegex);
|
|
35
|
+
const extractedErrorCode = matchedErrorCode ? matchedErrorCode[1] : '';
|
|
36
|
+
if (extractedErrorCode === incompleteTokenErrorCode) {
|
|
37
|
+
// eslint-disable-next-line no-console
|
|
38
|
+
console.info('[Auth-package] logging out user CAUSE: ERR_INCOMPLETE_TOKEN');
|
|
39
|
+
return server.NextResponse.redirect(new URL(auth0Config.logoutEndpoint, appBaseUrl));
|
|
40
|
+
}
|
|
41
|
+
if (!expectedErrors.includes(extractedErrorCode)) {
|
|
42
|
+
onError?.(error);
|
|
43
|
+
// eslint-disable-next-line no-console
|
|
44
|
+
console.error('[Auth-package] error', error);
|
|
45
|
+
}
|
|
46
|
+
const errorCodeQuery = extractedErrorCode
|
|
47
|
+
? `?code=${extractedErrorCode}`
|
|
48
|
+
: '';
|
|
49
|
+
return server.NextResponse.redirect(new URL(`/${locale}${auth0Config.globalAuthErrorPath}${errorCodeQuery}`, appBaseUrl));
|
|
50
|
+
};
|
|
51
|
+
const onCallbackFactory = ({ auth0Config, appBaseUrl, onError, }) => async (error, context, session) => {
|
|
52
|
+
if (error) {
|
|
53
|
+
const localeFromUrl = getLocaleFromContext(context);
|
|
54
|
+
return handleAuth0Error({
|
|
55
|
+
error,
|
|
56
|
+
auth0Config,
|
|
57
|
+
appBaseUrl,
|
|
58
|
+
localeFromUrl,
|
|
59
|
+
onError,
|
|
60
|
+
});
|
|
61
|
+
}
|
|
9
62
|
if (!session?.tokenSet?.accessToken) {
|
|
10
63
|
return createCallbackResponse(context, appBaseUrl);
|
|
11
64
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"onCallbackFactory.js","sources":["../../../../../src/server/hooks/onCallbackFactory.ts"],"sourcesContent":[null],"names":["NextResponse","cookies","decodeJwt"],"mappings":";;;;;;AASA,MAAM,sBAAsB,GAAG,CAC7B,OAA0B,EAC1B,UAAkB,KACfA,mBAAY,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,QAAQ,IAAI,GAAG,EAAE,UAAU,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"onCallbackFactory.js","sources":["../../../../../src/server/hooks/onCallbackFactory.ts"],"sourcesContent":[null],"names":["NextResponse","cookies","decodeJwt"],"mappings":"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"}
|
|
@@ -5,8 +5,10 @@ export declare const getLogoutLink: ({ returnTo, language, auth0Config, }: {
|
|
|
5
5
|
language?: Language;
|
|
6
6
|
auth0Config: Auth0Config | null;
|
|
7
7
|
}) => string;
|
|
8
|
-
export declare const getLoginLink: ({ returnTo, language, auth0Config, }: {
|
|
8
|
+
export declare const getLoginLink: ({ returnTo, language, auth0Config, selectedSellerId, impersonateSellerId, }: {
|
|
9
9
|
returnTo?: string;
|
|
10
10
|
language?: Language;
|
|
11
11
|
auth0Config: Auth0Config | null;
|
|
12
|
+
selectedSellerId?: string;
|
|
13
|
+
impersonateSellerId?: string;
|
|
12
14
|
}) => string;
|
|
@@ -1,13 +1,18 @@
|
|
|
1
1
|
import { defaultLanguage } from '@smg-automotive/i18n-pkg';
|
|
2
2
|
|
|
3
|
-
const getLoginLink = ({ returnTo, language = defaultLanguage, auth0Config, }) => {
|
|
3
|
+
const getLoginLink = ({ returnTo, language = defaultLanguage, auth0Config, selectedSellerId, impersonateSellerId, }) => {
|
|
4
4
|
if (!auth0Config) {
|
|
5
5
|
throw new Error('Missing auth0Config');
|
|
6
6
|
}
|
|
7
|
-
const
|
|
8
|
-
|
|
9
|
-
:
|
|
10
|
-
|
|
7
|
+
const searchParams = new URLSearchParams({
|
|
8
|
+
locale: language,
|
|
9
|
+
...(selectedSellerId ? { seller_id: selectedSellerId } : {}),
|
|
10
|
+
...(impersonateSellerId
|
|
11
|
+
? { impersonate_seller_id: impersonateSellerId }
|
|
12
|
+
: {}),
|
|
13
|
+
...(returnTo ? { returnTo: returnTo } : {}),
|
|
14
|
+
});
|
|
15
|
+
return `${auth0Config.loginEndpoint}?${searchParams.toString()}`;
|
|
11
16
|
};
|
|
12
17
|
|
|
13
18
|
export { getLoginLink };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"authLinks.js","sources":["../../../../src/lib/authLinks.ts"],"sourcesContent":[null],"names":[],"mappings":";;AAwBO,MAAM,YAAY,GAAG,CAAC,EAC3B,QAAQ,EACR,QAAQ,GAAG,eAAe,EAC1B,WAAW,
|
|
1
|
+
{"version":3,"file":"authLinks.js","sources":["../../../../src/lib/authLinks.ts"],"sourcesContent":[null],"names":[],"mappings":";;AAwBO,MAAM,YAAY,GAAG,CAAC,EAC3B,QAAQ,EACR,QAAQ,GAAG,eAAe,EAC1B,WAAW,EACX,gBAAgB,EAChB,mBAAmB,GAOpB,KAAI;IACH,IAAI,CAAC,WAAW,EAAE;AAChB,QAAA,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC;IACxC;AAEA,IAAA,MAAM,YAAY,GAAG,IAAI,eAAe,CAAC;AACvC,QAAA,MAAM,EAAE,QAAQ;AAChB,QAAA,IAAI,gBAAgB,GAAG,EAAE,SAAS,EAAE,gBAAgB,EAAE,GAAG,EAAE,CAAC;AAC5D,QAAA,IAAI;AACF,cAAE,EAAE,qBAAqB,EAAE,mBAAmB;cAC5C,EAAE,CAAC;AACP,QAAA,IAAI,QAAQ,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC;AAC5C,KAAA,CAAC;IAEF,OAAO,CAAA,EAAG,WAAW,CAAC,aAAa,CAAA,CAAA,EAAI,YAAY,CAAC,QAAQ,EAAE,CAAA,CAAE;AAClE;;;;"}
|
|
@@ -4,5 +4,7 @@ type GetAuth0InstanceContext = {
|
|
|
4
4
|
host: string;
|
|
5
5
|
isProxied: boolean;
|
|
6
6
|
};
|
|
7
|
-
export declare const getAuth0Instance: ({ protocol, host, isProxied, }: GetAuth0InstanceContext
|
|
7
|
+
export declare const getAuth0Instance: ({ protocol, host, isProxied, onError, }: GetAuth0InstanceContext & {
|
|
8
|
+
onError?: (error: Error) => void;
|
|
9
|
+
}) => Auth0Client;
|
|
8
10
|
export {};
|
|
@@ -7,7 +7,7 @@ const instances = {};
|
|
|
7
7
|
const buildInstanceKey = ({ host, isProxied, protocol, }) => {
|
|
8
8
|
return `${protocol}-${host}-isProxied-${isProxied}`;
|
|
9
9
|
};
|
|
10
|
-
const getAuth0Instance = ({ protocol, host, isProxied, }) => {
|
|
10
|
+
const getAuth0Instance = ({ protocol, host, isProxied, onError, }) => {
|
|
11
11
|
const key = buildInstanceKey({ host, isProxied, protocol });
|
|
12
12
|
const instance = instances[key];
|
|
13
13
|
if (instance) {
|
|
@@ -32,7 +32,7 @@ const getAuth0Instance = ({ protocol, host, isProxied, }) => {
|
|
|
32
32
|
audience: auth0Config.audience,
|
|
33
33
|
},
|
|
34
34
|
beforeSessionSaved: beforeSessionSavedFactory(auth0Config),
|
|
35
|
-
onCallback: onCallbackFactory({ auth0Config, appBaseUrl }),
|
|
35
|
+
onCallback: onCallbackFactory({ auth0Config, appBaseUrl, onError }),
|
|
36
36
|
});
|
|
37
37
|
instances[key] = newInstance;
|
|
38
38
|
return newInstance;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getAuth0Instance.js","sources":["../../../../src/server/getAuth0Instance.ts"],"sourcesContent":[null],"names":[],"mappings":";;;;;AAQA,MAAM,SAAS,GAAmB,EAAE;AAQpC,MAAM,gBAAgB,GAAG,CAAC,EACxB,IAAI,EACJ,SAAS,EACT,QAAQ,GACgB,KAAI;AAC5B,IAAA,OAAO,GAAG,QAAQ,CAAA,CAAA,EAAI,IAAI,CAAA,WAAA,EAAc,SAAS,EAAE;AACrD,CAAC;AAEM,MAAM,gBAAgB,GAAG,CAAC,EAC/B,QAAQ,EACR,IAAI,EACJ,SAAS,
|
|
1
|
+
{"version":3,"file":"getAuth0Instance.js","sources":["../../../../src/server/getAuth0Instance.ts"],"sourcesContent":[null],"names":[],"mappings":";;;;;AAQA,MAAM,SAAS,GAAmB,EAAE;AAQpC,MAAM,gBAAgB,GAAG,CAAC,EACxB,IAAI,EACJ,SAAS,EACT,QAAQ,GACgB,KAAI;AAC5B,IAAA,OAAO,GAAG,QAAQ,CAAA,CAAA,EAAI,IAAI,CAAA,WAAA,EAAc,SAAS,EAAE;AACrD,CAAC;AAEM,MAAM,gBAAgB,GAAG,CAAC,EAC/B,QAAQ,EACR,IAAI,EACJ,SAAS,EACT,OAAO,GAGR,KAAiB;AAChB,IAAA,MAAM,GAAG,GAAG,gBAAgB,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC;AAC3D,IAAA,MAAM,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC;IAC/B,IAAI,QAAQ,EAAE;AACZ,QAAA,OAAO,QAAQ;IACjB;IAEA,MAAM,WAAW,GAAG,cAAc,CAAC,EAAE,SAAS,EAAE,CAAC;AACjD,IAAA,MAAM,UAAU,GAAG,CAAA,EAAG,QAAQ,CAAA,GAAA,EAAM,IAAI,EAAE;AAC1C,IAAA,MAAM,WAAW,GAAG,IAAI,WAAW,CAAC;QAClC,UAAU;AACV,QAAA,MAAM,EAAE;YACN,KAAK,EAAE,WAAW,CAAC,aAAa;YAChC,MAAM,EAAE,WAAW,CAAC,cAAc;YAClC,QAAQ,EAAE,WAAW,CAAC,gBAAgB;AACvC,SAAA;AACD,QAAA,OAAO,EAAE;AACP,YAAA,MAAM,EAAE;gBACN,IAAI,EAAE,WAAW,CAAC,iBAAiB;AACpC,aAAA;AACF,SAAA;AACD,QAAA,uBAAuB,EAAE;YACvB,KAAK,EAAE,WAAW,CAAC,MAAM;YACzB,QAAQ,EAAE,WAAW,CAAC,QAAQ;AAC/B,SAAA;AACD,QAAA,kBAAkB,EAAE,yBAAyB,CAAC,WAAW,CAAC;QAC1D,UAAU,EAAE,iBAAiB,CAAC,EAAE,WAAW,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC;AACpE,KAAA,CAAC;AACF,IAAA,SAAS,CAAC,GAAG,CAAC,GAAG,WAAW;AAC5B,IAAA,OAAO,WAAW;AACpB;;;;"}
|
|
@@ -2,7 +2,8 @@ import { NextResponse } from 'next/server';
|
|
|
2
2
|
import type { OnCallbackContext, SessionData } from '@auth0/nextjs-auth0/types';
|
|
3
3
|
import type { SdkError } from '@auth0/nextjs-auth0/errors';
|
|
4
4
|
import { Auth0Config } from 'src/types';
|
|
5
|
-
export declare const onCallbackFactory: ({ auth0Config, appBaseUrl, }: {
|
|
5
|
+
export declare const onCallbackFactory: ({ auth0Config, appBaseUrl, onError, }: {
|
|
6
6
|
auth0Config: Auth0Config;
|
|
7
7
|
appBaseUrl: string;
|
|
8
|
-
|
|
8
|
+
onError?: (error: Error) => void;
|
|
9
|
+
}) => (error: SdkError | null, context: OnCallbackContext, session: SessionData | null) => Promise<NextResponse>;
|
|
@@ -3,7 +3,60 @@ import { cookies } from 'next/headers';
|
|
|
3
3
|
import { decodeJwt } from 'jose';
|
|
4
4
|
|
|
5
5
|
const createCallbackResponse = (context, appBaseUrl) => NextResponse.redirect(new URL(context.returnTo || '/', appBaseUrl));
|
|
6
|
-
const
|
|
6
|
+
const getLocaleFromContext = ({ returnTo }) => {
|
|
7
|
+
if (!returnTo) {
|
|
8
|
+
return '';
|
|
9
|
+
}
|
|
10
|
+
try {
|
|
11
|
+
const url = new URL(returnTo);
|
|
12
|
+
return (url.searchParams.get('locale') || url.pathname.split('/')[1]) ?? '';
|
|
13
|
+
}
|
|
14
|
+
catch (parsingError) {
|
|
15
|
+
// eslint-disable-next-line no-console
|
|
16
|
+
console.warn('[Auth-package] Failed to parse locale from returnTo', parsingError);
|
|
17
|
+
}
|
|
18
|
+
return '';
|
|
19
|
+
};
|
|
20
|
+
const errorCodeRegex = /\(([^)(]+)\)/;
|
|
21
|
+
const incompleteTokenErrorCode = 'ERR_INCOMPLETE_TOKEN';
|
|
22
|
+
const handleAuth0Error = ({ error, auth0Config, appBaseUrl, localeFromUrl, onError, }) => {
|
|
23
|
+
const authorizedLocales = auth0Config.languageConfig.supported;
|
|
24
|
+
const locale = authorizedLocales.includes(localeFromUrl)
|
|
25
|
+
? localeFromUrl
|
|
26
|
+
: auth0Config.languageConfig.default;
|
|
27
|
+
const expectedErrors = [
|
|
28
|
+
'UNVERIFIED_EMAIL',
|
|
29
|
+
'INITIAL_UNVERIFIED_EMAIL',
|
|
30
|
+
incompleteTokenErrorCode,
|
|
31
|
+
];
|
|
32
|
+
const matchedErrorCode = (error.message ?? '').match(errorCodeRegex);
|
|
33
|
+
const extractedErrorCode = matchedErrorCode ? matchedErrorCode[1] : '';
|
|
34
|
+
if (extractedErrorCode === incompleteTokenErrorCode) {
|
|
35
|
+
// eslint-disable-next-line no-console
|
|
36
|
+
console.info('[Auth-package] logging out user CAUSE: ERR_INCOMPLETE_TOKEN');
|
|
37
|
+
return NextResponse.redirect(new URL(auth0Config.logoutEndpoint, appBaseUrl));
|
|
38
|
+
}
|
|
39
|
+
if (!expectedErrors.includes(extractedErrorCode)) {
|
|
40
|
+
onError?.(error);
|
|
41
|
+
// eslint-disable-next-line no-console
|
|
42
|
+
console.error('[Auth-package] error', error);
|
|
43
|
+
}
|
|
44
|
+
const errorCodeQuery = extractedErrorCode
|
|
45
|
+
? `?code=${extractedErrorCode}`
|
|
46
|
+
: '';
|
|
47
|
+
return NextResponse.redirect(new URL(`/${locale}${auth0Config.globalAuthErrorPath}${errorCodeQuery}`, appBaseUrl));
|
|
48
|
+
};
|
|
49
|
+
const onCallbackFactory = ({ auth0Config, appBaseUrl, onError, }) => async (error, context, session) => {
|
|
50
|
+
if (error) {
|
|
51
|
+
const localeFromUrl = getLocaleFromContext(context);
|
|
52
|
+
return handleAuth0Error({
|
|
53
|
+
error,
|
|
54
|
+
auth0Config,
|
|
55
|
+
appBaseUrl,
|
|
56
|
+
localeFromUrl,
|
|
57
|
+
onError,
|
|
58
|
+
});
|
|
59
|
+
}
|
|
7
60
|
if (!session?.tokenSet?.accessToken) {
|
|
8
61
|
return createCallbackResponse(context, appBaseUrl);
|
|
9
62
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"onCallbackFactory.js","sources":["../../../../../src/server/hooks/onCallbackFactory.ts"],"sourcesContent":[null],"names":[],"mappings":";;;;AASA,MAAM,sBAAsB,GAAG,CAC7B,OAA0B,EAC1B,UAAkB,KACf,YAAY,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,QAAQ,IAAI,GAAG,EAAE,UAAU,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"onCallbackFactory.js","sources":["../../../../../src/server/hooks/onCallbackFactory.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|