@q2devel/q2-core 1.0.24 → 1.0.27

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.
@@ -7,6 +7,9 @@ export interface AuthConfig {
7
7
  sameSite?: 'strict' | 'lax' | 'none';
8
8
  expires?: number;
9
9
  };
10
+ customFields?: string[];
11
+ relationshipsFields?: string[];
12
+ control?: any;
10
13
  }
11
14
  export interface AuthContext {
12
15
  config: AuthConfig;
@@ -1 +1 @@
1
- {"version":3,"file":"auth.config.d.ts","sourceRoot":"","sources":["../../../auth/auth/auth.config.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,UAAU;IACvB,aAAa,EAAE,MAAM,CAAA;IACrB,QAAQ,EAAE,MAAM,CAAA;IAChB,YAAY,EAAE,MAAM,CAAA;IACpB,aAAa,CAAC,EAAE;QACZ,MAAM,CAAC,EAAE,OAAO,CAAA;QAChB,QAAQ,CAAC,EAAE,QAAQ,GAAG,KAAK,GAAG,MAAM,CAAA;QACpC,OAAO,CAAC,EAAE,MAAM,CAAA;KACnB,CAAA;CACJ;AAED,MAAM,WAAW,WAAW;IACxB,MAAM,EAAE,UAAU,CAAA;CACrB"}
1
+ {"version":3,"file":"auth.config.d.ts","sourceRoot":"","sources":["../../../auth/auth/auth.config.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,UAAU;IACvB,aAAa,EAAE,MAAM,CAAA;IACrB,QAAQ,EAAE,MAAM,CAAA;IAChB,YAAY,EAAE,MAAM,CAAA;IACpB,aAAa,CAAC,EAAE;QACZ,MAAM,CAAC,EAAE,OAAO,CAAA;QAChB,QAAQ,CAAC,EAAE,QAAQ,GAAG,KAAK,GAAG,MAAM,CAAA;QACpC,OAAO,CAAC,EAAE,MAAM,CAAA;KACnB,CAAA;IACD,YAAY,CAAC,EAAE,MAAM,EAAE,CAAA;IACvB,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAA;IAC9B,OAAO,CAAC,EAAE,GAAG,CAAA;CAChB;AAED,MAAM,WAAW,WAAW;IACxB,MAAM,EAAE,UAAU,CAAA;CACrB"}
@@ -1 +1 @@
1
- {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../../auth/auth/auth.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAC1C,OAAO,EAAE,uBAAuB,EAAE,IAAI,EAAE,MAAM,cAAc,CAAA;AAE5D,MAAM,MAAM,wBAAwB,GAAG;IACnC,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,MAAM,CAAA;CACnB,CAAA;AAED,MAAM,MAAM,mCAAmC,GAAG;IAC9C,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,MAAM,CAAA;CAEjB,CAAA;AAED,MAAM,MAAM,2CAA2C,GAAG;IACtD,WAAW,EAAE,MAAM,CAAA;IACnB,WAAW,EAAE,MAAM,CAAA;CACtB,CAAA;AAED,MAAM,MAAM,wBAAwB,GAAG;IACnC,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,MAAM,CAAA;IAChB,KAAK,EAAE,MAAM,CAAA;CAEhB,CAAA;AAED,MAAM,MAAM,gCAAgC,GAAG;IAC3C,KAAK,EAAE,MAAM,CAAA;CAChB,CAAA;AAED,MAAM,MAAM,+BAA+B,GAAG;IAC1C,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,MAAM,CAAA;CACnB,CAAA;AAED,eAAO,MAAM,aAAa,GACtB,MAAM,wBAAwB,EAC9B,QAAQ,UAAU,KACnB,OAAO,CAAC,uBAAuB,CAAC,IAAI,CAAC,CA+BvC,CAAA;AAED,eAAO,MAAM,mBAAmB,GAC5B,cAAc,MAAM,EACpB,QAAQ,UAAU,KACnB,OAAO,CAAC,uBAAuB,CAAC,IAAI,CAAC,CA6BvC,CAAA;AAGD,eAAO,MAAM,aAAa,GAAU,aAAa,MAAM,EAAE,QAAQ,UAAU,KAAG,OAAO,CAAC,IAAI,CAmCzF,CAAA;AAED,eAAO,MAAM,cAAc,QAAa,OAAO,CAAC,IAAI,CAKnD,CAAA;AAGD,eAAO,MAAM,YAAY,GAAI,WAAW,MAAM,GAAG,IAAI,KAAG,OAQvD,CAAA;AAED,eAAO,MAAM,cAAc,GAAI,SAAS;IAAE,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,KAAG,OAEjF,CAAA"}
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../../auth/auth/auth.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAC1C,OAAO,EAAE,uBAAuB,EAAE,IAAI,EAAE,MAAM,cAAc,CAAA;AAE5D,MAAM,MAAM,wBAAwB,GAAG;IACnC,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,MAAM,CAAA;CACnB,CAAA;AAED,MAAM,MAAM,mCAAmC,GAAG;IAC9C,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,MAAM,CAAA;CAEjB,CAAA;AAED,MAAM,MAAM,2CAA2C,GAAG;IACtD,WAAW,EAAE,MAAM,CAAA;IACnB,WAAW,EAAE,MAAM,CAAA;CACtB,CAAA;AAED,MAAM,MAAM,wBAAwB,GAAG;IACnC,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,MAAM,CAAA;IAChB,KAAK,EAAE,MAAM,CAAA;CAEhB,CAAA;AAED,MAAM,MAAM,gCAAgC,GAAG;IAC3C,KAAK,EAAE,MAAM,CAAA;CAChB,CAAA;AAED,MAAM,MAAM,+BAA+B,GAAG;IAC1C,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,MAAM,CAAA;CACnB,CAAA;AAED,eAAO,MAAM,aAAa,GACtB,MAAM,wBAAwB,EAC9B,QAAQ,UAAU,KACnB,OAAO,CAAC,uBAAuB,CAAC,IAAI,CAAC,CAmCvC,CAAA;AAED,eAAO,MAAM,mBAAmB,GAC5B,cAAc,MAAM,EACpB,QAAQ,UAAU,KACnB,OAAO,CAAC,uBAAuB,CAAC,IAAI,CAAC,CA6BvC,CAAA;AAGD,eAAO,MAAM,aAAa,GAAU,aAAa,MAAM,EAAE,QAAQ,UAAU,KAAG,OAAO,CAAC,IAAI,CAkCzF,CAAA;AAED,eAAO,MAAM,cAAc,QAAa,OAAO,CAAC,IAAI,CAKnD,CAAA;AAGD,eAAO,MAAM,YAAY,GAAI,WAAW,MAAM,GAAG,IAAI,KAAG,OAQvD,CAAA;AAED,eAAO,MAAM,cAAc,GAAI,SAAS;IAAE,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,KAAG,OAEjF,CAAA"}
@@ -19,8 +19,13 @@ export const signInService = async (data, config) => {
19
19
  throw new Error('Invalid credentials');
20
20
  }
21
21
  const tokenData = await response.json();
22
- // Extrahujeme informace o uživateli z tokenu
23
- const userInfo = await fetchUserInfo(tokenData.access_token, config);
22
+ let userInfo;
23
+ try {
24
+ userInfo = await fetchUserInfo(tokenData.access_token, config);
25
+ }
26
+ catch (error) {
27
+ throw new Error('invalid-customer');
28
+ }
24
29
  return {
25
30
  ...userInfo,
26
31
  token: tokenData.access_token,
@@ -64,29 +69,25 @@ export const fetchUserInfo = async (accessToken, config) => {
64
69
  });
65
70
  // Použít existující getUser službu
66
71
  const userData = await getUser({
72
+ authConfig: config,
67
73
  axiosInstance,
68
74
  userId: decoded.sub,
69
75
  token: accessToken,
70
76
  });
71
- // Vrátit data v požadovaném formáte pre AuthContext
72
- return {
73
- id: decoded.sub ?? '',
74
- name: userData.name,
75
- email: userData.email,
76
- username: userData.email,
77
- address: userData.address,
78
- uuid: userData.uuid,
79
- };
77
+ if (config.control && config.control.field_under_customer?.id) {
78
+ const requiredId = config.control.field_under_customer.id;
79
+ const userId = userData.field_under_customer?.id;
80
+ if (userId !== requiredId) {
81
+ throw new Error('User does not have required field_under_customer.id');
82
+ }
83
+ }
84
+ // Base user data
85
+ const baseUserData = { ...userData, id: decoded.sub ?? '' };
86
+ return baseUserData;
80
87
  }
81
88
  catch (error) {
82
89
  console.error('Error fetching user info:', error);
83
- try {
84
- const decoded = jwtDecode(accessToken);
85
- return { id: decoded.sub ?? '' };
86
- }
87
- catch {
88
- return { id: '' };
89
- }
90
+ throw error;
90
91
  }
91
92
  };
92
93
  export const signOutService = async () => {
@@ -9,6 +9,7 @@ export type User = {
9
9
  username?: string | null;
10
10
  address?: UserAddress;
11
11
  uuid?: string;
12
+ [key: string]: any;
12
13
  };
13
14
  export type MakeUserWithAccessToken<U> = U & {
14
15
  token: AccessToken;
@@ -1 +1 @@
1
- {"version":3,"file":"auth.types.d.ts","sourceRoot":"","sources":["../../../auth/auth/auth.types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AACjC,OAAO,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAA;AAC3D,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAE1C,MAAM,MAAM,WAAW,GAAG,MAAM,CAAA;AAEhC,MAAM,MAAM,IAAI,GAAG;IACf,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACrB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,OAAO,CAAC,EAAE,WAAW,CAAA;IACrB,IAAI,CAAC,EAAE,MAAM,CAAA;CAChB,CAAA;AAED,MAAM,MAAM,uBAAuB,CAAC,CAAC,IAAI,CAAC,GAAG;IACzC,KAAK,EAAE,WAAW,CAAA;IAClB,YAAY,EAAE,MAAM,CAAA;IACpB,SAAS,EAAE,MAAM,CAAA;CACpB,CAAA;AAED,MAAM,WAAW,iBAAiB;IAC9B,QAAQ,EAAE,SAAS,CAAA;IACnB,MAAM,EAAE,UAAU,CAAA;IAClB,kBAAkB,CAAC,EAAE,WAAW,CAAA;IAChC,kBAAkB,CAAC,EAAE,IAAI,CAAA;CAC5B;AAED,MAAM,WAAW,gBAAgB;IAC7B,QAAQ,EAAE,OAAO,CAAA;IACjB,OAAO,EAAE,OAAO,CAAA;IAChB,IAAI,EAAE,IAAI,GAAG,SAAS,CAAA;IACtB,WAAW,EAAE,WAAW,GAAG,SAAS,CAAA;IACpC,SAAS,EAAE,MAAM,GAAG,SAAS,CAAA;IAC7B,MAAM,EAAE,UAAU,CAAA;IAClB,OAAO,EAAE,CAAC,KAAK,CAAC,EAAE,IAAI,KAAK,IAAI,CAAA;IAC/B,cAAc,EAAE,CAAC,KAAK,CAAC,EAAE,WAAW,KAAK,IAAI,CAAA;IAC7C,YAAY,EAAE,CAAC,KAAK,CAAC,EAAE,MAAM,KAAK,IAAI,CAAA;IACtC,kBAAkB,EAAE,MAAM,OAAO,CAAC,IAAI,GAAG,SAAS,CAAC,CAAA;IACnD,SAAS,EAAE,OAAO,CAAA;CACrB"}
1
+ {"version":3,"file":"auth.types.d.ts","sourceRoot":"","sources":["../../../auth/auth/auth.types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AACjC,OAAO,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAA;AAC3D,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAE1C,MAAM,MAAM,WAAW,GAAG,MAAM,CAAA;AAEhC,MAAM,MAAM,IAAI,GAAG;IACf,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACrB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,OAAO,CAAC,EAAE,WAAW,CAAA;IACrB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;CACrB,CAAA;AAED,MAAM,MAAM,uBAAuB,CAAC,CAAC,IAAI,CAAC,GAAG;IACzC,KAAK,EAAE,WAAW,CAAA;IAClB,YAAY,EAAE,MAAM,CAAA;IACpB,SAAS,EAAE,MAAM,CAAA;CACpB,CAAA;AAED,MAAM,WAAW,iBAAiB;IAC9B,QAAQ,EAAE,SAAS,CAAA;IACnB,MAAM,EAAE,UAAU,CAAA;IAClB,kBAAkB,CAAC,EAAE,WAAW,CAAA;IAChC,kBAAkB,CAAC,EAAE,IAAI,CAAA;CAC5B;AAED,MAAM,WAAW,gBAAgB;IAC7B,QAAQ,EAAE,OAAO,CAAA;IACjB,OAAO,EAAE,OAAO,CAAA;IAChB,IAAI,EAAE,IAAI,GAAG,SAAS,CAAA;IACtB,WAAW,EAAE,WAAW,GAAG,SAAS,CAAA;IACpC,SAAS,EAAE,MAAM,GAAG,SAAS,CAAA;IAC7B,MAAM,EAAE,UAAU,CAAA;IAClB,OAAO,EAAE,CAAC,KAAK,CAAC,EAAE,IAAI,KAAK,IAAI,CAAA;IAC/B,cAAc,EAAE,CAAC,KAAK,CAAC,EAAE,WAAW,KAAK,IAAI,CAAA;IAC7C,YAAY,EAAE,CAAC,KAAK,CAAC,EAAE,MAAM,KAAK,IAAI,CAAA;IACtC,kBAAkB,EAAE,MAAM,OAAO,CAAC,IAAI,GAAG,SAAS,CAAC,CAAA;IACnD,SAAS,EAAE,OAAO,CAAA;CACrB"}
@@ -1 +1 @@
1
- {"version":3,"file":"AuthContext.d.ts","sourceRoot":"","sources":["../../../auth/context/AuthContext.tsx"],"names":[],"mappings":"AAKA,OAAO,EAAe,gBAAgB,EAAE,iBAAiB,EAAQ,MAAM,oBAAoB,CAAA;AAI3F,eAAO,MAAM,mBAAmB,GAAI,+DAKjC,iBAAiB,4CAsJnB,CAAA;AAED,eAAO,MAAM,OAAO,QAAO,gBAM1B,CAAA"}
1
+ {"version":3,"file":"AuthContext.d.ts","sourceRoot":"","sources":["../../../auth/context/AuthContext.tsx"],"names":[],"mappings":"AAKA,OAAO,EAAe,gBAAgB,EAAE,iBAAiB,EAAQ,MAAM,oBAAoB,CAAA;AAI3F,eAAO,MAAM,mBAAmB,GAAI,+DAKjC,iBAAiB,4CAkKnB,CAAA;AAED,eAAO,MAAM,OAAO,QAAO,gBAM1B,CAAA"}
@@ -1,7 +1,7 @@
1
1
  'use client';
2
2
  import { jsx as _jsx } from "react/jsx-runtime";
3
3
  import Cookies from 'js-cookie';
4
- import { createContext, useCallback, useContext, useEffect, useRef, useState } from 'react';
4
+ import { createContext, useCallback, useContext, useEffect, useMemo, useRef, useState } from 'react';
5
5
  import { fetchUserInfo, refreshTokenService } from '../auth/auth';
6
6
  const AuthContext = createContext(undefined);
7
7
  export const AuthContextProvider = ({ children, config, initialAccessToken, initialCurrentUser, }) => {
@@ -11,11 +11,15 @@ export const AuthContextProvider = ({ children, config, initialAccessToken, init
11
11
  const [isLoading, setIsLoading] = useState(false);
12
12
  const [isReady, setIsReady] = useState(false);
13
13
  const refreshingRef = useRef(false);
14
- const COOKIE_OPTIONS = {
14
+ const COOKIE_OPTIONS = useMemo(() => ({
15
15
  secure: config.cookieOptions?.secure ?? false,
16
16
  sameSite: config.cookieOptions?.sameSite ?? 'strict',
17
17
  expires: config.cookieOptions?.expires ?? 1,
18
- };
18
+ }), [
19
+ config.cookieOptions?.secure,
20
+ config.cookieOptions?.sameSite,
21
+ config.cookieOptions?.expires,
22
+ ]);
19
23
  useEffect(() => {
20
24
  const savedToken = Cookies.get('accessToken');
21
25
  const savedRefreshToken = Cookies.get('refreshToken');
@@ -32,7 +36,8 @@ export const AuthContextProvider = ({ children, config, initialAccessToken, init
32
36
  }
33
37
  if (savedUser) {
34
38
  try {
35
- setUser(JSON.parse(savedUser));
39
+ const parsedUser = JSON.parse(savedUser);
40
+ setUser(parsedUser);
36
41
  }
37
42
  catch (e) {
38
43
  console.error('Failed to parse user from cookie');
@@ -50,14 +55,23 @@ export const AuthContextProvider = ({ children, config, initialAccessToken, init
50
55
  }
51
56
  else {
52
57
  Cookies.remove('accessToken');
53
- Cookies.remove('refreshToken');
54
58
  Cookies.remove('expiresAt');
55
59
  Cookies.remove('user');
56
60
  }
57
61
  }, [accessToken, expiresAt, user, COOKIE_OPTIONS]);
62
+ const clearAllAuth = useCallback(() => {
63
+ Cookies.remove('accessToken');
64
+ Cookies.remove('refreshToken');
65
+ Cookies.remove('expiresAt');
66
+ Cookies.remove('user');
67
+ setAccessToken(undefined);
68
+ setExpiresAt(undefined);
69
+ setUser(undefined);
70
+ }, []);
58
71
  // ✅ Čítajte refresh token priamo z cookies keď ho potrebujete
59
72
  const refreshTokenIfNeeded = useCallback(async () => {
60
73
  const currentRefreshToken = Cookies.get('refreshToken'); // ✅ z cookie
74
+ console.log('🔄 Refresh začína, refresh token:', !!currentRefreshToken); // Debug
61
75
  if (refreshingRef.current || !currentRefreshToken)
62
76
  return;
63
77
  if (expiresAt && Date.now() < expiresAt - 10000)
@@ -68,6 +82,7 @@ export const AuthContextProvider = ({ children, config, initialAccessToken, init
68
82
  const refreshed = await refreshTokenService(currentRefreshToken, config);
69
83
  // ✅ Uložiť nový refresh token priamo do cookie
70
84
  Cookies.set('refreshToken', refreshed.refreshToken, COOKIE_OPTIONS);
85
+ console.log('✅ Nový refresh token uložený'); // Debug
71
86
  setAccessToken(refreshed.token);
72
87
  setExpiresAt(refreshed.expiresAt);
73
88
  setUser({ ...refreshed });
@@ -77,20 +92,14 @@ export const AuthContextProvider = ({ children, config, initialAccessToken, init
77
92
  // Pokud refresh token selhal, můžeme vymazat autentifikační data
78
93
  if (error instanceof Error && error.message === 'Failed to refresh token') {
79
94
  // Odstranění cookies
80
- Cookies.remove('accessToken');
81
- Cookies.remove('refreshToken');
82
- Cookies.remove('expiresAt');
83
- Cookies.remove('user');
84
- setAccessToken(undefined);
85
- setExpiresAt(undefined);
86
- setUser(undefined);
95
+ clearAllAuth();
87
96
  }
88
97
  }
89
98
  finally {
90
99
  setIsLoading(false);
91
100
  refreshingRef.current = false;
92
101
  }
93
- }, [expiresAt, config]);
102
+ }, [expiresAt, config, COOKIE_OPTIONS, clearAllAuth]);
94
103
  // Pravidelný refresh tokenu
95
104
  useEffect(() => {
96
105
  if (!refreshTokenIfNeeded)
@@ -1 +1 @@
1
- {"version":3,"file":"useSignIn.d.ts","sourceRoot":"","sources":["../../../auth/hooks/useSignIn.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,wBAAwB,EAAiB,MAAM,cAAc,CAAA;AACtE,OAAO,EAAE,uBAAuB,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAA;AAGlE,eAAO,MAAM,SAAS,GAAI,iBAAiB,GAAG,wBAAwB;mBAKjD,iBAAiB;;CA0CrC,CAAA"}
1
+ {"version":3,"file":"useSignIn.d.ts","sourceRoot":"","sources":["../../../auth/hooks/useSignIn.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,wBAAwB,EAAiB,MAAM,cAAc,CAAA;AACtE,OAAO,EAAE,uBAAuB,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAA;AAGlE,eAAO,MAAM,SAAS,GAAI,iBAAiB,GAAG,wBAAwB;mBAKjD,iBAAiB;;CA6DrC,CAAA"}
@@ -19,6 +19,7 @@ export const useSignIn = () => {
19
19
  expires: config.cookieOptions?.expires ?? 1,
20
20
  };
21
21
  Cookies.set('refreshToken', result.refreshToken, COOKIE_OPTIONS);
22
+ // Base user data
22
23
  const userData = {
23
24
  id: result.id,
24
25
  name: result.name,
@@ -27,7 +28,22 @@ export const useSignIn = () => {
27
28
  address: result.address,
28
29
  uuid: result.uuid,
29
30
  };
30
- setUser(userData);
31
+ // Custom fields
32
+ const customFields = (config.customFields ?? []).reduce((acc, field) => {
33
+ if (result[field] !== undefined) {
34
+ acc[field] = result[field];
35
+ }
36
+ return acc;
37
+ }, {});
38
+ // Relationships fields
39
+ const relationshipsFields = (config.relationshipsFields ?? []).reduce((acc, field) => {
40
+ if (result[field] !== undefined) {
41
+ acc[field] = result[field];
42
+ }
43
+ return acc;
44
+ }, {});
45
+ const finalUserData = { ...userData, ...customFields, ...relationshipsFields };
46
+ setUser(finalUserData);
31
47
  return result;
32
48
  }
33
49
  catch (error) {
@@ -1 +1 @@
1
- {"version":3,"file":"useSignOut.d.ts","sourceRoot":"","sources":["../../../auth/hooks/useSignOut.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,UAAU;;;CAuBtB,CAAA"}
1
+ {"version":3,"file":"useSignOut.d.ts","sourceRoot":"","sources":["../../../auth/hooks/useSignOut.ts"],"names":[],"mappings":"AAOA,eAAO,MAAM,UAAU;;;CAwBtB,CAAA"}
@@ -2,6 +2,7 @@
2
2
  import { useAuth } from '../context/AuthContext';
3
3
  import { signOutService } from '../auth/auth';
4
4
  import { useCallback, useState } from 'react';
5
+ import Cookies from 'js-cookie';
5
6
  export const useSignOut = () => {
6
7
  const [isLoading, setIsLoading] = useState(false);
7
8
  const { setAccessToken, setExpiresAt, setUser } = useAuth();
@@ -9,6 +10,7 @@ export const useSignOut = () => {
9
10
  try {
10
11
  setIsLoading(true);
11
12
  await signOutService();
13
+ Cookies.remove('refreshToken');
12
14
  setAccessToken(undefined);
13
15
  setExpiresAt(undefined);
14
16
  setUser(undefined);
@@ -1,11 +1,13 @@
1
1
  import { AxiosInstance, AxiosRequestConfig } from 'axios';
2
2
  import { User } from '../auth/auth.types';
3
+ import { AuthConfig } from '../auth/auth.config';
3
4
  type GetUserParams = {
4
5
  axiosInstance: AxiosInstance;
6
+ authConfig?: AuthConfig;
5
7
  config?: AxiosRequestConfig;
6
8
  userId?: string;
7
9
  token?: string;
8
10
  };
9
- export declare const getUser: ({ axiosInstance, config, userId, token, }: GetUserParams) => Promise<User>;
11
+ export declare const getUser: ({ axiosInstance, authConfig, config, userId, token, }: GetUserParams) => Promise<User>;
10
12
  export {};
11
13
  //# sourceMappingURL=user.service.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"user.service.d.ts","sourceRoot":"","sources":["../../../auth/services/user.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,OAAO,CAAA;AAEzD,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAA;AAGzC,KAAK,aAAa,GAAG;IACjB,aAAa,EAAE,aAAa,CAAA;IAC5B,MAAM,CAAC,EAAE,kBAAkB,CAAA;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,KAAK,CAAC,EAAE,MAAM,CAAA;CACjB,CAAA;AAED,eAAO,MAAM,OAAO,GAAU,2CAK3B,aAAa,KAAG,OAAO,CAAC,IAAI,CAoC9B,CAAA"}
1
+ {"version":3,"file":"user.service.d.ts","sourceRoot":"","sources":["../../../auth/services/user.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,OAAO,CAAA;AAEzD,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAA;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAGhD,KAAK,aAAa,GAAG;IACjB,aAAa,EAAE,aAAa,CAAA;IAC5B,UAAU,CAAC,EAAE,UAAU,CAAA;IACvB,MAAM,CAAC,EAAE,kBAAkB,CAAA;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,KAAK,CAAC,EAAE,MAAM,CAAA;CACjB,CAAA;AAED,eAAO,MAAM,OAAO,GAAU,uDAM3B,aAAa,KAAG,OAAO,CAAC,IAAI,CA6E9B,CAAA"}
@@ -1,5 +1,5 @@
1
1
  import { DrupalJsonApiParams } from 'drupal-jsonapi-params';
2
- export const getUser = async ({ axiosInstance, config = {}, userId, token, }) => {
2
+ export const getUser = async ({ axiosInstance, authConfig, config = {}, userId, token, }) => {
3
3
  const params = new DrupalJsonApiParams();
4
4
  userId && params.addFilter('drupal_internal__uid', userId, 'IN');
5
5
  const queryString = params.getQueryString();
@@ -10,11 +10,48 @@ export const getUser = async ({ axiosInstance, config = {}, userId, token, }) =>
10
10
  });
11
11
  const firstItem = data.data?.[0];
12
12
  const customerId = firstItem?.relationships?.customer_profiles?.data?.[0]?.id;
13
+ const attributes = firstItem?.attributes;
14
+ // Base user data
13
15
  let mappedUser = {
14
- name: firstItem?.attributes?.name ?? '',
15
- email: firstItem?.attributes?.mail ?? '',
16
+ name: attributes?.name ?? '',
17
+ email: attributes?.mail ?? '',
16
18
  id: customerId ?? '',
17
19
  };
20
+ // Custom fields
21
+ let customFields = {};
22
+ if (authConfig && authConfig.customFields) {
23
+ customFields = (authConfig.customFields ?? []).reduce((acc, field) => {
24
+ if (attributes && attributes[field] !== undefined) {
25
+ acc[field] = attributes[field];
26
+ }
27
+ return acc;
28
+ }, {});
29
+ }
30
+ // Relationships fields
31
+ let relationshipsFields = {};
32
+ if (authConfig && authConfig.relationshipsFields) {
33
+ relationshipsFields = (authConfig.relationshipsFields ?? []).reduce((acc, field) => {
34
+ const rel = firstItem?.relationships?.[field]?.data;
35
+ if (rel) {
36
+ if (Array.isArray(rel)) {
37
+ // Pokud je to pole (např. více vztahů)
38
+ acc[field] = rel.map((item) => ({
39
+ id: item.id,
40
+ drupal_internal__target_id: item.meta?.drupal_internal__target_id
41
+ }));
42
+ }
43
+ else {
44
+ // Pokud je to objekt
45
+ acc[field] = {
46
+ id: rel.id,
47
+ drupal_internal__target_id: rel.meta?.drupal_internal__target_id
48
+ };
49
+ }
50
+ }
51
+ return acc;
52
+ }, {});
53
+ }
54
+ mappedUser = { ...mappedUser, ...customFields, ...relationshipsFields };
18
55
  if (customerId) {
19
56
  const { data: customerData } = await axiosInstance.get(`/jsonapi/profile/customer/${customerId}`, {
20
57
  ...config,
package/dist/index.d.ts CHANGED
@@ -32,5 +32,6 @@ export * from './context/cart/BasketContext';
32
32
  export * from './api/cart/Cart.service';
33
33
  export * from './api/cart/CartService.types';
34
34
  export * from './utils/mapProducts';
35
+ export * from './utils/mapIncludedResources';
35
36
  export { useUrlModal } from './auth/hooks/useUrlModal';
36
37
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AACA,cAAc,0BAA0B,CAAA;AACxC,cAAc,uBAAuB,CAAA;AAErC,cAAc,yBAAyB,CAAA;AACvC,cAAc,sBAAsB,CAAA;AAGpC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,cAAc,CAAA;AAG5B,cAAc,4BAA4B,CAAA;AAC1C,cAAc,0BAA0B,CAAA;AAGxC,cAAc,+BAA+B,CAAA;AAC7C,cAAc,oCAAoC,CAAA;AAElD,cAAc,6BAA6B,CAAA;AAC3C,cAAc,kCAAkC,CAAA;AAEhD,cAAc,mCAAmC,CAAA;AACjD,cAAc,wCAAwC,CAAA;AAGtD,cAAc,sCAAsC,CAAA;AACpD,cAAc,gDAAgD,CAAA;AAC9D,cAAc,yBAAyB,CAAA;AAGvC,cAAc,kBAAkB,CAAA;AAChC,cAAc,yBAAyB,CAAA;AACvC,cAAc,wBAAwB,CAAA;AACtC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,6BAA6B,CAAA;AAC3C,cAAc,wBAAwB,CAAA;AACtC,cAAc,yBAAyB,CAAA;AAEvC,cAAc,iCAAiC,CAAA;AAC/C,cAAc,sCAAsC,CAAA;AAEpD,cAAc,qCAAqC,CAAA;AACnD,cAAc,8BAA8B,CAAA;AAC5C,cAAc,iCAAiC,CAAA;AAG/C,cAAc,WAAW,CAAA;AACzB,cAAc,8BAA8B,CAAA;AAE5C,cAAc,yBAAyB,CAAA;AACvC,cAAc,8BAA8B,CAAA;AAE5C,cAAc,qBAAqB,CAAA;AAEnC,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AACA,cAAc,0BAA0B,CAAA;AACxC,cAAc,uBAAuB,CAAA;AAErC,cAAc,yBAAyB,CAAA;AACvC,cAAc,sBAAsB,CAAA;AAGpC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,cAAc,CAAA;AAG5B,cAAc,4BAA4B,CAAA;AAC1C,cAAc,0BAA0B,CAAA;AAGxC,cAAc,+BAA+B,CAAA;AAC7C,cAAc,oCAAoC,CAAA;AAElD,cAAc,6BAA6B,CAAA;AAC3C,cAAc,kCAAkC,CAAA;AAEhD,cAAc,mCAAmC,CAAA;AACjD,cAAc,wCAAwC,CAAA;AAGtD,cAAc,sCAAsC,CAAA;AACpD,cAAc,gDAAgD,CAAA;AAC9D,cAAc,yBAAyB,CAAA;AAGvC,cAAc,kBAAkB,CAAA;AAChC,cAAc,yBAAyB,CAAA;AACvC,cAAc,wBAAwB,CAAA;AACtC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,6BAA6B,CAAA;AAC3C,cAAc,wBAAwB,CAAA;AACtC,cAAc,yBAAyB,CAAA;AAEvC,cAAc,iCAAiC,CAAA;AAC/C,cAAc,sCAAsC,CAAA;AAEpD,cAAc,qCAAqC,CAAA;AACnD,cAAc,8BAA8B,CAAA;AAC5C,cAAc,iCAAiC,CAAA;AAG/C,cAAc,WAAW,CAAA;AACzB,cAAc,8BAA8B,CAAA;AAE5C,cAAc,yBAAyB,CAAA;AACvC,cAAc,8BAA8B,CAAA;AAE5C,cAAc,qBAAqB,CAAA;AACnC,cAAc,8BAA8B,CAAA;AAE5C,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAA"}
package/dist/index.js CHANGED
@@ -38,4 +38,5 @@ export * from './context/cart/BasketContext';
38
38
  export * from './api/cart/Cart.service';
39
39
  export * from './api/cart/CartService.types';
40
40
  export * from './utils/mapProducts';
41
+ export * from './utils/mapIncludedResources';
41
42
  export { useUrlModal } from './auth/hooks/useUrlModal';
@@ -1 +1 @@
1
- {"version":3,"file":"mapProducts.d.ts","sourceRoot":"","sources":["../../utils/mapProducts.ts"],"names":[],"mappings":"AACA,OAAO,EAAuB,OAAO,EAAE,MAAM,2BAA2B,CAAC;AA0EzE,wBAAgB,UAAU,CAAC,cAAc,EAAE,GAAG,EAAE,gBAAgB,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,OAAO,CAaxF;AAED,wBAAgB,cAAc,CAAC,cAAc,EAAE,GAAG,EAAE,gBAAgB,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,CAMxF"}
1
+ {"version":3,"file":"mapProducts.d.ts","sourceRoot":"","sources":["../../utils/mapProducts.ts"],"names":[],"mappings":"AACA,OAAO,EAAuB,OAAO,EAAE,MAAM,2BAA2B,CAAC;AA0EzE,wBAAgB,UAAU,CAAC,cAAc,EAAE,GAAG,EAAE,gBAAgB,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,OAAO,CAaxF;AAED,wBAAgB,cAAc,CAAC,cAAc,EAAE,GAAG,EAAE,gBAAgB,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,CAKxF"}
@@ -70,7 +70,6 @@ export function mapProduct(defaultProduct, variationProduct, ctx) {
70
70
  };
71
71
  }
72
72
  export function mapProductLite(defaultProduct, variationProduct, ctx) {
73
- // console.log('Mapping product lite', defaultProduct, variationProduct);
74
73
  return {
75
74
  ...mapProductBase(defaultProduct, variationProduct, ctx),
76
75
  related_products: [],
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@q2devel/q2-core",
3
- "version": "1.0.24",
3
+ "version": "1.0.27",
4
4
  "main": "dist/index.js",
5
5
  "types": "dist/index.d.ts",
6
6
  "exports": {