@q2devel/q2-core 1.0.5 → 1.0.7

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 (47) hide show
  1. package/dist/api/content/getBanners.d.ts.map +1 -1
  2. package/dist/api/content/getBanners.js +8 -0
  3. package/dist/api/content/getBlog.js +3 -3
  4. package/dist/api/getTerms.d.ts.map +1 -1
  5. package/dist/api/getTerms.js +6 -4
  6. package/dist/api/pages/branch/branch.service.d.ts.map +1 -1
  7. package/dist/api/pages/branch/branch.service.js +8 -5
  8. package/dist/api/pages/faq/faq.service.d.ts.map +1 -1
  9. package/dist/api/pages/faq/faq.service.js +8 -5
  10. package/dist/api/pages/page/page.service.d.ts.map +1 -1
  11. package/dist/api/pages/page/page.service.js +8 -5
  12. package/dist/api/products/getProducts.js +9 -8
  13. package/dist/auth/auth/auth.config.d.ts +14 -0
  14. package/dist/auth/auth/auth.config.d.ts.map +1 -0
  15. package/dist/auth/auth/auth.config.js +1 -0
  16. package/dist/auth/auth/auth.d.ts +36 -0
  17. package/dist/auth/auth/auth.d.ts.map +1 -0
  18. package/dist/auth/auth/auth.js +111 -0
  19. package/dist/auth/auth/auth.types.d.ts +38 -0
  20. package/dist/auth/auth/auth.types.d.ts.map +1 -0
  21. package/dist/auth/auth/auth.types.js +1 -0
  22. package/dist/auth/context/AuthContext.d.ts +4 -0
  23. package/dist/auth/context/AuthContext.d.ts.map +1 -0
  24. package/dist/auth/context/AuthContext.js +158 -0
  25. package/dist/auth/hooks/useCurrentUser.d.ts +11 -0
  26. package/dist/auth/hooks/useCurrentUser.d.ts.map +1 -0
  27. package/dist/auth/hooks/useCurrentUser.js +15 -0
  28. package/dist/auth/hooks/useSignIn.d.ts +7 -0
  29. package/dist/auth/hooks/useSignIn.d.ts.map +1 -0
  30. package/dist/auth/hooks/useSignIn.js +33 -0
  31. package/dist/auth/hooks/useSignOut.d.ts +5 -0
  32. package/dist/auth/hooks/useSignOut.d.ts.map +1 -0
  33. package/dist/auth/hooks/useSignOut.js +27 -0
  34. package/dist/auth/services/user.service.d.ts +11 -0
  35. package/dist/auth/services/user.service.d.ts.map +1 -0
  36. package/dist/auth/services/user.service.js +24 -0
  37. package/dist/auth/services/userService.types.d.ts +42 -0
  38. package/dist/auth/services/userService.types.d.ts.map +1 -0
  39. package/dist/auth/services/userService.types.js +1 -0
  40. package/dist/hooks/user/useGetUser.d.ts +1 -1
  41. package/dist/hooks/user/useGetUser.d.ts.map +1 -1
  42. package/dist/index.d.ts +11 -6
  43. package/dist/index.d.ts.map +1 -1
  44. package/dist/index.js +13 -7
  45. package/dist/types/Term.d.ts +1 -0
  46. package/dist/types/Term.d.ts.map +1 -1
  47. package/package.json +5 -1
@@ -1 +1 @@
1
- {"version":3,"file":"getBanners.d.ts","sourceRoot":"","sources":["../../../api/content/getBanners.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAGzD,KAAK,eAAe,GAAG;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,GAAG,KAAK,UAAU,CAAC;CACpD,CAAC;AAEF,eAAO,MAAM,UAAU,GACrB,KAAK,WAAW,EAChB,qBAAqB,eAAe,KACnC,OAAO,CAAC,UAAU,EAAE,CAoCtB,CAAC"}
1
+ {"version":3,"file":"getBanners.d.ts","sourceRoot":"","sources":["../../../api/content/getBanners.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAGzD,KAAK,eAAe,GAAG;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,GAAG,KAAK,UAAU,CAAC;CACpD,CAAC;AAEF,eAAO,MAAM,UAAU,GACrB,KAAK,WAAW,EAChB,qBAAqB,eAAe,KACnC,OAAO,CAAC,UAAU,EAAE,CA6CtB,CAAC"}
@@ -2,6 +2,11 @@ import { DrupalJsonApiParams } from 'drupal-jsonapi-params';
2
2
  import mapIncludedResources from '../../utils/mapIncludedResources';
3
3
  export const getBanners = async (ctx, { location, mapFn }) => {
4
4
  const cacheKey = ['banner', ctx.locale, location].join(':');
5
+ if (ctx.getCache) {
6
+ const cached = await ctx.getCache(cacheKey);
7
+ if (cached)
8
+ return cached;
9
+ }
5
10
  const url = ctx.locale === ctx.defaultLocale
6
11
  ? `/jsonapi/media/banners`
7
12
  : `/${ctx.locale}/jsonapi/media/banners`;
@@ -28,5 +33,8 @@ export const getBanners = async (ctx, { location, mapFn }) => {
28
33
  };
29
34
  return mapFn ? mapFn(base, item) : base;
30
35
  });
36
+ if (ctx.setCache) {
37
+ await ctx.setCache(cacheKey, mapped);
38
+ }
31
39
  return mapped;
32
40
  };
@@ -36,8 +36,8 @@ export const getBlog = async (ctx, { blogId, limit, include = ['field_image'], m
36
36
  };
37
37
  return mapFn ? mapFn(base, item) : base;
38
38
  });
39
- // if (ctx.setCache) {
40
- // await ctx.setCache(cacheKey, mapped);
41
- // }
39
+ if (ctx.setCache) {
40
+ await ctx.setCache(cacheKey, mapped);
41
+ }
42
42
  return mapped;
43
43
  };
@@ -1 +1 @@
1
- {"version":3,"file":"getTerms.d.ts","sourceRoot":"","sources":["../../api/getTerms.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzC,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAIrC,KAAK,aAAa,GAAG;IACnB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACxD,CAAC;AAEF,eAAO,MAAM,QAAQ,GACnB,KAAK,WAAW,EAChB,gCAA0F,aAAa,KACtG,OAAO,CAAC,IAAI,EAAE,CAsEhB,CAAC"}
1
+ {"version":3,"file":"getTerms.d.ts","sourceRoot":"","sources":["../../api/getTerms.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzC,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAIrC,KAAK,aAAa,GAAG;IACnB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACxD,CAAC;AAEF,eAAO,MAAM,QAAQ,GACnB,KAAK,WAAW,EAChB,gCAA0I,aAAa,KACtJ,OAAO,CAAC,IAAI,EAAE,CAsEhB,CAAC"}
@@ -1,10 +1,11 @@
1
1
  // api/getTerms.ts
2
2
  import { DrupalJsonApiParams } from 'drupal-jsonapi-params';
3
3
  import mapIncludedResources from '../utils/mapIncludedResources';
4
- export const getTerms = async (ctx, { categoryId, include = ['parent', 'field_icon', 'field_icon.field_media_image'], mapFn }) => {
4
+ export const getTerms = async (ctx, { categoryId, include = ['parent', 'field_icon', 'field_icon.field_media_image', 'field_image', 'field_image.field_media_image'], mapFn }) => {
5
5
  const cacheKey = ['terms', ctx.locale, ...(categoryId ?? []), ...(include ?? [])].join(':');
6
- // const cached = await ctx.getCache?.<Term[]>(cacheKey);
7
- // if (cached) return cached;
6
+ const cached = await ctx.getCache?.(cacheKey);
7
+ if (cached)
8
+ return cached;
8
9
  const baseUrl = ctx.locale === ctx.defaultLocale
9
10
  ? `/jsonapi/taxonomy_term/produktykategorie`
10
11
  : `/${ctx.locale}/jsonapi/taxonomy_term/produktykategorie`;
@@ -49,9 +50,10 @@ export const getTerms = async (ctx, { categoryId, include = ['parent', 'field_ic
49
50
  description: item.description?.processed ?? '',
50
51
  parent: item.parent?.[0],
51
52
  icon: item?.field_icon?.field_media_image.uri?.url ? ctx.makeAbsoluteUrl(item.field_icon.field_media_image.uri.url) : undefined,
53
+ image: item?.field_image?.field_media_image.uri?.url ? ctx.makeAbsoluteUrl(item.field_image.field_media_image.uri.url) : undefined,
52
54
  };
53
55
  return mapFn ? await mapFn(base, item) : base;
54
56
  }));
55
- // await ctx.setCache?.(cacheKey, mapped);
57
+ await ctx.setCache?.(cacheKey, mapped);
56
58
  return mapped;
57
59
  };
@@ -1 +1 @@
1
- {"version":3,"file":"branch.service.d.ts","sourceRoot":"","sources":["../../../../api/pages/branch/branch.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAG/C,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAEhD,KAAK,cAAc,GAAG;IACpB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,KAAK,OAAO,CAAC;CAC9C,CAAC;AAEF,eAAO,MAAM,SAAS,GACpB,KAAK,WAAW,EAChB,oBAAuC,cAAc,KACpD,OAAO,CAAC,OAAO,GAAG,IAAI,CA8CxB,CAAC"}
1
+ {"version":3,"file":"branch.service.d.ts","sourceRoot":"","sources":["../../../../api/pages/branch/branch.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAG/C,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAEhD,KAAK,cAAc,GAAG;IACpB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,KAAK,OAAO,CAAC;CAC9C,CAAC;AAEF,eAAO,MAAM,SAAS,GACpB,KAAK,WAAW,EAChB,oBAAuC,cAAc,KACpD,OAAO,CAAC,OAAO,GAAG,IAAI,CAgDxB,CAAC"}
@@ -2,10 +2,11 @@ import { DrupalJsonApiParams } from 'drupal-jsonapi-params';
2
2
  import mapIncludedResources from '../../../utils/mapIncludedResources';
3
3
  export const getBranch = async (ctx, { include = ['field_branch'], mapFn }) => {
4
4
  const cacheKey = ['branch', ctx.locale].join(':');
5
- // const cached = await ctx.redis.get(cacheKey);
6
- // if (cached) {
7
- // return cached as Contact;
8
- // }
5
+ if (ctx.getCache) {
6
+ const cached = await ctx.getCache(cacheKey);
7
+ if (cached)
8
+ return cached;
9
+ }
9
10
  const url = ctx.locale === ctx.defaultLocale
10
11
  ? `/jsonapi/node/contact_page`
11
12
  : `/${ctx.locale}/jsonapi/node/contact_page`;
@@ -34,6 +35,8 @@ export const getBranch = async (ctx, { include = ['field_branch'], mapFn }) => {
34
35
  })) || [],
35
36
  };
36
37
  const mapped = mapFn ? mapFn(base, contactBranchSection) : base;
37
- // await ctx.redis.set(cacheKey, mapped);
38
+ if (ctx.setCache) {
39
+ await ctx.setCache(cacheKey, mapped);
40
+ }
38
41
  return mapped;
39
42
  };
@@ -1 +1 @@
1
- {"version":3,"file":"faq.service.d.ts","sourceRoot":"","sources":["../../../../api/pages/faq/faq.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAG/C,OAAO,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAC;AAEzC,KAAK,WAAW,GAAG;IACjB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,KAAK,GAAG,CAAC;CACtC,CAAC;AAEF,eAAO,MAAM,MAAM,GACjB,KAAK,WAAW,EAChB,oBAA0C,WAAW,KACpD,OAAO,CAAC,GAAG,GAAG,IAAI,CAwCpB,CAAC"}
1
+ {"version":3,"file":"faq.service.d.ts","sourceRoot":"","sources":["../../../../api/pages/faq/faq.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAG/C,OAAO,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAC;AAEzC,KAAK,WAAW,GAAG;IACjB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,KAAK,GAAG,CAAC;CACtC,CAAC;AAEF,eAAO,MAAM,MAAM,GACjB,KAAK,WAAW,EAChB,oBAA0C,WAAW,KACpD,OAAO,CAAC,GAAG,GAAG,IAAI,CA0CpB,CAAC"}
@@ -2,10 +2,11 @@ import { DrupalJsonApiParams } from 'drupal-jsonapi-params';
2
2
  import mapIncludedResources from '../../../utils/mapIncludedResources';
3
3
  export const getFaq = async (ctx, { include = ['field_questions'], mapFn }) => {
4
4
  const cacheKey = ['faq', ctx.locale].join(':');
5
- // const cached = await ctx.redis.get(cacheKey);
6
- // if (cached) {
7
- // return cached as Faq;
8
- // }
5
+ if (ctx.getCache) {
6
+ const cached = await ctx.getCache(cacheKey);
7
+ if (cached)
8
+ return cached;
9
+ }
9
10
  const url = ctx.locale === ctx.defaultLocale
10
11
  ? `/jsonapi/node/faq`
11
12
  : `/${ctx.locale}/jsonapi/node/faq`;
@@ -28,6 +29,8 @@ export const getFaq = async (ctx, { include = ['field_questions'], mapFn }) => {
28
29
  })) || [],
29
30
  };
30
31
  const mapped = mapFn ? mapFn(base, faqItem) : base;
31
- // await ctx.redis.set(cacheKey, mapped);
32
+ if (ctx.setCache) {
33
+ await ctx.setCache(cacheKey, mapped);
34
+ }
32
35
  return mapped;
33
36
  };
@@ -1 +1 @@
1
- {"version":3,"file":"page.service.d.ts","sourceRoot":"","sources":["../../../../api/pages/page/page.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAG/C,OAAO,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAE3C,KAAK,YAAY,GAAG;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,KAAK,IAAI,CAAC;CACxC,CAAC;AAEF,eAAO,MAAM,OAAO,GAClB,KAAK,WAAW,EAChB,4BAA4C,YAAY,KACvD,OAAO,CAAC,IAAI,GAAG,IAAI,CAwCrB,CAAC"}
1
+ {"version":3,"file":"page.service.d.ts","sourceRoot":"","sources":["../../../../api/pages/page/page.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAG/C,OAAO,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAE3C,KAAK,YAAY,GAAG;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,KAAK,IAAI,CAAC;CACxC,CAAC;AAEF,eAAO,MAAM,OAAO,GAClB,KAAK,WAAW,EAChB,4BAA4C,YAAY,KACvD,OAAO,CAAC,IAAI,GAAG,IAAI,CA0CrB,CAAC"}
@@ -2,10 +2,11 @@ import { DrupalJsonApiParams } from 'drupal-jsonapi-params';
2
2
  import mapIncludedResources from '../../../utils/mapIncludedResources';
3
3
  export const getPage = async (ctx, { pageId, include = ['node_type'], mapFn }) => {
4
4
  const cacheKey = ['page', ctx.locale, pageId].join(':');
5
- // const cached = await ctx.redis.get(cacheKey);
6
- // if (cached) {
7
- // return cached as Page;
8
- // }
5
+ if (ctx.getCache) {
6
+ const cached = await ctx.getCache(cacheKey);
7
+ if (cached)
8
+ return cached;
9
+ }
9
10
  const url = ctx.locale === ctx.defaultLocale
10
11
  ? `/jsonapi/node/page`
11
12
  : `/${ctx.locale}/jsonapi/node/page`;
@@ -28,6 +29,8 @@ export const getPage = async (ctx, { pageId, include = ['node_type'], mapFn }) =
28
29
  return mapFn ? mapFn(base, item) : base;
29
30
  });
30
31
  const page = mappedPages[0];
31
- // await ctx.redis.set(cacheKey, page);
32
+ if (ctx.setCache) {
33
+ await ctx.setCache(cacheKey, page);
34
+ }
32
35
  return page;
33
36
  };
@@ -17,12 +17,13 @@ export const getProducts = async (ctx, { categoryId, productId, searchTerm, limi
17
17
  offset ? `offset:${offset}` : '',
18
18
  filters.length ? `filters:${JSON.stringify(filters)}` : '',
19
19
  sort ? `sort:${sort}` : '',
20
- tag ? `tag:${tag}` : '',
20
+ // tag ? `tag:${tag}` : '',
21
21
  ].filter(Boolean).join(':');
22
- // if (cache && ctx.getCache) {
23
- // const cached = await ctx.getCache<Product[]>(cacheKey);
24
- // if (cached) return cached;
25
- // }
22
+ if (cache && ctx.getCache) {
23
+ const cached = await ctx.getCache(cacheKey);
24
+ if (cached)
25
+ return cached;
26
+ }
26
27
  const params = new DrupalJsonApiParams()
27
28
  .addInclude(include)
28
29
  .addFilter('langcode', ctx.locale);
@@ -56,9 +57,9 @@ export const getProducts = async (ctx, { categoryId, productId, searchTerm, limi
56
57
  }
57
58
  return base;
58
59
  }));
59
- // if (cache && ctx.setCache) {
60
- // await ctx.setCache(cacheKey, mappedProducts);
61
- // }
60
+ if (cache && ctx.setCache) {
61
+ await ctx.setCache(cacheKey, mappedProducts);
62
+ }
62
63
  return mappedProducts;
63
64
  };
64
65
  export const getProductCount = async (ctx, { categoryId = [], tag = '', cache = true, }) => {
@@ -0,0 +1,14 @@
1
+ export interface AuthConfig {
2
+ drupalBaseUrl: string;
3
+ clientId: string;
4
+ clientSecret: string;
5
+ cookieOptions?: {
6
+ secure?: boolean;
7
+ sameSite?: 'strict' | 'lax' | 'none';
8
+ expires?: number;
9
+ };
10
+ }
11
+ export interface AuthContext {
12
+ config: AuthConfig;
13
+ }
14
+ //# sourceMappingURL=auth.config.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,36 @@
1
+ import { AuthConfig } from './auth.config';
2
+ import { MakeUserWithAccessToken, User } from './auth.types';
3
+ export type DefaultSignInRequestData = {
4
+ username: string;
5
+ password: string;
6
+ };
7
+ export type DefaultUpdateCurrentUserRequestData = {
8
+ name?: string;
9
+ email?: string;
10
+ };
11
+ export type DefaultUpdateCurrentUserPasswordRequestData = {
12
+ oldPassword: string;
13
+ newPassword: string;
14
+ };
15
+ export type DefaultSignUpRequestData = {
16
+ username: string;
17
+ password: string;
18
+ email: string;
19
+ };
20
+ export type DefaultForgotPasswordRequestData = {
21
+ email: string;
22
+ };
23
+ export type DefaultResetPasswordRequestData = {
24
+ token: string;
25
+ password: string;
26
+ };
27
+ export declare const signInService: (data: DefaultSignInRequestData, config: AuthConfig) => Promise<MakeUserWithAccessToken<User>>;
28
+ export declare const refreshTokenService: (refreshToken: string, config: AuthConfig) => Promise<MakeUserWithAccessToken<User>>;
29
+ export declare const fetchUserInfo: (accessToken: string, config: AuthConfig) => Promise<User>;
30
+ export declare const signOutService: () => Promise<void>;
31
+ export declare const isTokenValid: (expiresAt: string | null) => boolean;
32
+ export declare const hasAuthCookies: (cookies: {
33
+ accessToken?: string;
34
+ user?: string;
35
+ }) => boolean;
36
+ //# sourceMappingURL=auth.d.ts.map
@@ -0,0 +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,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"}
@@ -0,0 +1,111 @@
1
+ import axios from 'axios';
2
+ import { jwtDecode } from 'jwt-decode';
3
+ import { getUser } from '../services/user.service';
4
+ export const signInService = async (data, config) => {
5
+ const formData = new URLSearchParams();
6
+ formData.append('grant_type', 'password');
7
+ formData.append('client_id', config.clientId);
8
+ formData.append('client_secret', config.clientSecret);
9
+ formData.append('username', data.username);
10
+ formData.append('password', data.password);
11
+ const response = await fetch(`${config.drupalBaseUrl}/oauth/token`, {
12
+ method: 'POST',
13
+ body: formData,
14
+ headers: {
15
+ 'Content-Type': 'application/x-www-form-urlencoded',
16
+ },
17
+ });
18
+ if (!response.ok) {
19
+ throw new Error('Invalid credentials');
20
+ }
21
+ const tokenData = await response.json();
22
+ // Extrahujeme informace o uživateli z tokenu
23
+ const userInfo = await fetchUserInfo(tokenData.access_token, config);
24
+ return {
25
+ ...userInfo,
26
+ token: tokenData.access_token,
27
+ refreshToken: tokenData.refresh_token,
28
+ expiresAt: Date.now() + tokenData.expires_in * 1000,
29
+ };
30
+ };
31
+ export const refreshTokenService = async (refreshToken, config) => {
32
+ const formData = new URLSearchParams();
33
+ formData.append('grant_type', 'refresh_token');
34
+ formData.append('client_id', config.clientId);
35
+ formData.append('client_secret', config.clientSecret);
36
+ formData.append('refresh_token', refreshToken);
37
+ const response = await fetch(`${config.drupalBaseUrl}/oauth/token`, {
38
+ method: 'POST',
39
+ body: formData,
40
+ headers: {
41
+ 'Content-Type': 'application/x-www-form-urlencoded',
42
+ },
43
+ });
44
+ if (!response.ok) {
45
+ throw new Error('Failed to refresh token');
46
+ }
47
+ const tokenData = await response.json();
48
+ const userInfo = await fetchUserInfo(tokenData.access_token, config);
49
+ return {
50
+ ...userInfo,
51
+ token: tokenData.access_token,
52
+ refreshToken: tokenData.refresh_token || refreshToken,
53
+ expiresAt: Date.now() + tokenData.expires_in * 1000,
54
+ };
55
+ };
56
+ // Pomocná funkce pro získání informací o uživateli z tokenu nebo z API
57
+ export const fetchUserInfo = async (accessToken, config) => {
58
+ try {
59
+ // Dekódovat token a získat základní informace
60
+ const decoded = jwtDecode(accessToken);
61
+ // Vytvořit instanci Axiosu pro použití s getUser
62
+ const axiosInstance = axios.create({
63
+ baseURL: config.drupalBaseUrl,
64
+ });
65
+ // Použít existující getUser službu
66
+ const userData = await getUser({
67
+ axiosInstance,
68
+ userId: decoded.sub,
69
+ token: accessToken,
70
+ });
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
+ };
79
+ }
80
+ catch (error) {
81
+ console.error('Error fetching user info:', error);
82
+ try {
83
+ const decoded = jwtDecode(accessToken);
84
+ return { id: decoded.sub ?? '' };
85
+ }
86
+ catch {
87
+ return { id: '' };
88
+ }
89
+ }
90
+ };
91
+ export const signOutService = async () => {
92
+ // Zde můžeš implementovat volání API pro odhlášení, pokud je potřeba
93
+ // V jednoduchém případě stačí vymazat tokeny z lokálního úložiště
94
+ localStorage.removeItem('auth');
95
+ return Promise.resolve();
96
+ };
97
+ // Utility funkcie pre middleware - môžu sa použiť v akýchkoľvek frameworkoch
98
+ export const isTokenValid = (expiresAt) => {
99
+ if (!expiresAt)
100
+ return false;
101
+ try {
102
+ const expires = parseInt(expiresAt);
103
+ return Date.now() < expires;
104
+ }
105
+ catch {
106
+ return false;
107
+ }
108
+ };
109
+ export const hasAuthCookies = (cookies) => {
110
+ return !!(cookies.accessToken && cookies.user);
111
+ };
@@ -0,0 +1,38 @@
1
+ import { ReactNode } from 'react';
2
+ import { UserAddress } from '../services/userService.types';
3
+ import { AuthConfig } from './auth.config';
4
+ export type AccessToken = string;
5
+ export type User = {
6
+ id: string;
7
+ name?: string | null;
8
+ email?: string | null;
9
+ username?: string | null;
10
+ address?: UserAddress;
11
+ };
12
+ export type MakeUserWithAccessToken<U> = U & {
13
+ token: AccessToken;
14
+ refreshToken: string;
15
+ expiresAt: number;
16
+ };
17
+ export interface AuthProviderProps {
18
+ children: ReactNode;
19
+ config: AuthConfig;
20
+ initialAccessToken?: AccessToken;
21
+ initialCurrentUser?: User;
22
+ }
23
+ export interface AuthContextValue {
24
+ isLogged: boolean;
25
+ isReady: boolean;
26
+ user: User | undefined;
27
+ accessToken: AccessToken | undefined;
28
+ refreshToken: string | undefined;
29
+ expiresAt: number | undefined;
30
+ config: AuthConfig;
31
+ setUser: (value?: User) => void;
32
+ setAccessToken: (value?: AccessToken) => void;
33
+ setRefreshToken: (value?: string) => void;
34
+ setExpiresAt: (value?: number) => void;
35
+ refetchCurrentUser: () => Promise<User | undefined>;
36
+ isLoading: boolean;
37
+ }
38
+ //# sourceMappingURL=auth.types.d.ts.map
@@ -0,0 +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;CACxB,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,YAAY,EAAE,MAAM,GAAG,SAAS,CAAA;IAChC,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,eAAe,EAAE,CAAC,KAAK,CAAC,EAAE,MAAM,KAAK,IAAI,CAAA;IACzC,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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,4 @@
1
+ import { AuthContextValue, AuthProviderProps } from '../auth/auth.types';
2
+ export declare const AuthContextProvider: ({ children, config, initialAccessToken, initialCurrentUser, }: AuthProviderProps) => import("react/jsx-runtime").JSX.Element;
3
+ export declare const useAuth: () => AuthContextValue;
4
+ //# sourceMappingURL=AuthContext.d.ts.map
@@ -0,0 +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;AAK3F,eAAO,MAAM,mBAAmB,GAAI,+DAKjC,iBAAiB,4CA+JnB,CAAA;AAED,eAAO,MAAM,OAAO,QAAO,gBAM1B,CAAA"}
@@ -0,0 +1,158 @@
1
+ 'use client';
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import Cookies from 'js-cookie';
4
+ import { createContext, useCallback, useContext, useEffect, useRef, useState } from 'react';
5
+ import { fetchUserInfo, refreshTokenService } from '../auth/auth';
6
+ const AuthContext = createContext(undefined);
7
+ export const AuthContextProvider = ({ children, config, initialAccessToken, initialCurrentUser, }) => {
8
+ const [user, setUser] = useState(initialCurrentUser);
9
+ const [accessToken, setAccessToken] = useState(initialAccessToken);
10
+ const [refreshToken, setRefreshToken] = useState();
11
+ const [expiresAt, setExpiresAt] = useState();
12
+ const [isLoading, setIsLoading] = useState(false);
13
+ const [isReady, setIsReady] = useState(false);
14
+ const refreshingRef = useRef(false);
15
+ const COOKIE_OPTIONS = {
16
+ secure: config.cookieOptions?.secure ?? false,
17
+ sameSite: config.cookieOptions?.sameSite ?? 'strict',
18
+ expires: config.cookieOptions?.expires ?? 7,
19
+ };
20
+ useEffect(() => {
21
+ const savedToken = Cookies.get('accessToken');
22
+ const savedRefreshToken = Cookies.get('refreshToken');
23
+ const savedExpiresAt = Cookies.get('expiresAt');
24
+ const savedUser = Cookies.get('user');
25
+ if (savedToken) {
26
+ setAccessToken(savedToken);
27
+ }
28
+ if (savedRefreshToken) {
29
+ setRefreshToken(savedRefreshToken);
30
+ }
31
+ if (savedExpiresAt) {
32
+ setExpiresAt(parseInt(savedExpiresAt));
33
+ }
34
+ if (savedUser) {
35
+ try {
36
+ setUser(JSON.parse(savedUser));
37
+ }
38
+ catch (e) {
39
+ console.error('Failed to parse user from cookie');
40
+ }
41
+ }
42
+ setIsReady(true);
43
+ }, []);
44
+ useEffect(() => {
45
+ if (accessToken && user) {
46
+ Cookies.set('accessToken', accessToken, COOKIE_OPTIONS);
47
+ if (refreshToken) {
48
+ Cookies.set('refreshToken', refreshToken, COOKIE_OPTIONS);
49
+ }
50
+ if (expiresAt) {
51
+ Cookies.set('expiresAt', expiresAt.toString(), COOKIE_OPTIONS);
52
+ }
53
+ Cookies.set('user', JSON.stringify(user), COOKIE_OPTIONS);
54
+ }
55
+ else {
56
+ // Pokud nemáme token nebo uživatele, vymažeme cookies
57
+ Cookies.remove('accessToken');
58
+ Cookies.remove('refreshToken');
59
+ Cookies.remove('expiresAt');
60
+ Cookies.remove('user');
61
+ }
62
+ }, [accessToken, refreshToken, expiresAt, user, COOKIE_OPTIONS]);
63
+ const refreshTokenIfNeeded = useCallback(async () => {
64
+ if (refreshingRef.current || !refreshToken)
65
+ return;
66
+ if (expiresAt && Date.now() < expiresAt - 10000)
67
+ return;
68
+ try {
69
+ refreshingRef.current = true;
70
+ setIsLoading(true);
71
+ const refreshed = await refreshTokenService(refreshToken, config);
72
+ setAccessToken(refreshed.token);
73
+ setRefreshToken(refreshed.refreshToken);
74
+ setExpiresAt(refreshed.expiresAt);
75
+ setUser({
76
+ id: refreshed.id,
77
+ name: refreshed.name,
78
+ email: refreshed.email,
79
+ username: refreshed.username,
80
+ address: refreshed.address,
81
+ });
82
+ }
83
+ catch (error) {
84
+ console.error('Failed to refresh token:', error);
85
+ // Pokud refresh token selhal, můžeme vymazat autentifikační data
86
+ if (error instanceof Error && error.message === 'Failed to refresh token') {
87
+ // Odstranění cookies
88
+ Cookies.remove('accessToken');
89
+ Cookies.remove('refreshToken');
90
+ Cookies.remove('expiresAt');
91
+ Cookies.remove('user');
92
+ setAccessToken(undefined);
93
+ setRefreshToken(undefined);
94
+ setExpiresAt(undefined);
95
+ setUser(undefined);
96
+ }
97
+ }
98
+ finally {
99
+ setIsLoading(false);
100
+ refreshingRef.current = false;
101
+ }
102
+ }, [refreshToken, expiresAt, config]);
103
+ // Pravidelný refresh tokenu
104
+ useEffect(() => {
105
+ if (!refreshToken || !expiresAt)
106
+ return;
107
+ // Pokud token vyprší za méně než 30 sekund, spustíme refresh hned
108
+ if (Date.now() > expiresAt - 30000) {
109
+ refreshTokenIfNeeded();
110
+ }
111
+ // Nastavíme interval pro pravidelnou kontrolu
112
+ const interval = setInterval(() => {
113
+ refreshTokenIfNeeded();
114
+ }, 20000); // Kontrolujeme každých 20 sekund
115
+ return () => clearInterval(interval);
116
+ }, [refreshToken, expiresAt, refreshTokenIfNeeded]);
117
+ // Funkce pro získání aktuálních dat o uživateli z API
118
+ const refetchCurrentUser = useCallback(async () => {
119
+ if (!accessToken)
120
+ return undefined;
121
+ try {
122
+ setIsLoading(true);
123
+ const userData = await fetchUserInfo(accessToken, config);
124
+ setUser(userData);
125
+ return userData;
126
+ }
127
+ catch (error) {
128
+ console.error('Failed to fetch user data:', error);
129
+ return undefined;
130
+ }
131
+ finally {
132
+ setIsLoading(false);
133
+ }
134
+ }, [accessToken, config]);
135
+ const value = {
136
+ isLogged: !!accessToken && !!user,
137
+ isReady,
138
+ user,
139
+ accessToken,
140
+ refreshToken,
141
+ expiresAt,
142
+ config,
143
+ setUser,
144
+ setAccessToken,
145
+ setRefreshToken,
146
+ setExpiresAt,
147
+ refetchCurrentUser,
148
+ isLoading,
149
+ };
150
+ return _jsx(AuthContext.Provider, { value: value, children: children });
151
+ };
152
+ export const useAuth = () => {
153
+ const context = useContext(AuthContext);
154
+ if (context === undefined) {
155
+ throw new Error('useAuth must be used within an AuthContextProvider');
156
+ }
157
+ return context;
158
+ };
@@ -0,0 +1,11 @@
1
+ export declare const useCurrentUser: () => {
2
+ user: import("../..").User | undefined;
3
+ isLogged: boolean;
4
+ isReady: boolean;
5
+ refetchCurrentUser: () => Promise<import("../..").User | undefined>;
6
+ setUser: (value?: import("../..").User) => void;
7
+ setAccessToken: (value?: import("../..").AccessToken) => void;
8
+ isLoading: boolean;
9
+ accessToken: string | undefined;
10
+ };
11
+ //# sourceMappingURL=useCurrentUser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useCurrentUser.d.ts","sourceRoot":"","sources":["../../../auth/hooks/useCurrentUser.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,cAAc;;;;;;;;;CAa1B,CAAA"}
@@ -0,0 +1,15 @@
1
+ 'use client';
2
+ import { useAuth } from "../context/AuthContext";
3
+ export const useCurrentUser = () => {
4
+ const { user, isLogged, isReady, accessToken, refetchCurrentUser, setUser, setAccessToken, isLoading } = useAuth();
5
+ return {
6
+ user,
7
+ isLogged,
8
+ isReady,
9
+ refetchCurrentUser,
10
+ setUser,
11
+ setAccessToken,
12
+ isLoading,
13
+ accessToken,
14
+ };
15
+ };
@@ -0,0 +1,7 @@
1
+ import { DefaultSignInRequestData } from '../auth/auth';
2
+ import { MakeUserWithAccessToken, User } from '../auth/auth.types';
3
+ export declare const useSignIn: <SignInRequestData = DefaultSignInRequestData>() => {
4
+ signIn: (data: SignInRequestData) => Promise<MakeUserWithAccessToken<User> | undefined>;
5
+ isLoading: boolean;
6
+ };
7
+ //# sourceMappingURL=useSignIn.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useSignIn.d.ts","sourceRoot":"","sources":["../../../auth/hooks/useSignIn.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,wBAAwB,EAAiB,MAAM,cAAc,CAAA;AACtE,OAAO,EAAE,uBAAuB,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAA;AAIlE,eAAO,MAAM,SAAS,GAAI,iBAAiB,GAAG,wBAAwB;mBAKjD,iBAAiB;;CAiCrC,CAAA"}
@@ -0,0 +1,33 @@
1
+ 'use client';
2
+ import { signInService } from '../auth/auth';
3
+ import { useAuth } from '../context/AuthContext';
4
+ import { useCallback, useState } from 'react';
5
+ export const useSignIn = () => {
6
+ const [isLoading, setIsLoading] = useState(false);
7
+ const { setAccessToken, setRefreshToken, setExpiresAt, setUser, config } = useAuth();
8
+ const signIn = useCallback(async (data) => {
9
+ try {
10
+ setIsLoading(true);
11
+ const result = await signInService(data, config);
12
+ setAccessToken(result.token);
13
+ setRefreshToken(result.refreshToken);
14
+ setExpiresAt(result.expiresAt);
15
+ const userData = {
16
+ id: result.id,
17
+ name: result.name,
18
+ email: result.email,
19
+ username: result.username,
20
+ };
21
+ setUser(userData);
22
+ return result;
23
+ }
24
+ catch (error) {
25
+ console.error('Sign in failed:', error);
26
+ return undefined;
27
+ }
28
+ finally {
29
+ setIsLoading(false);
30
+ }
31
+ }, [setAccessToken, setRefreshToken, setExpiresAt, setUser, config]);
32
+ return { signIn, isLoading };
33
+ };
@@ -0,0 +1,5 @@
1
+ export declare const useSignOut: () => {
2
+ signOut: () => Promise<boolean>;
3
+ isLoading: boolean;
4
+ };
5
+ //# sourceMappingURL=useSignOut.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useSignOut.d.ts","sourceRoot":"","sources":["../../../auth/hooks/useSignOut.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,UAAU;;;CAwBtB,CAAA"}
@@ -0,0 +1,27 @@
1
+ 'use client';
2
+ import { useAuth } from '../context/AuthContext';
3
+ import { signOutService } from '../auth/auth';
4
+ import { useCallback, useState } from 'react';
5
+ export const useSignOut = () => {
6
+ const [isLoading, setIsLoading] = useState(false);
7
+ const { setAccessToken, setRefreshToken, setExpiresAt, setUser } = useAuth();
8
+ const signOut = useCallback(async () => {
9
+ try {
10
+ setIsLoading(true);
11
+ await signOutService();
12
+ setAccessToken(undefined);
13
+ setRefreshToken(undefined);
14
+ setExpiresAt(undefined);
15
+ setUser(undefined);
16
+ return true;
17
+ }
18
+ catch (error) {
19
+ console.error('Sign out failed:', error);
20
+ return false;
21
+ }
22
+ finally {
23
+ setIsLoading(false);
24
+ }
25
+ }, [setAccessToken, setRefreshToken, setExpiresAt, setUser]);
26
+ return { signOut, isLoading };
27
+ };
@@ -0,0 +1,11 @@
1
+ import { AxiosInstance, AxiosRequestConfig } from 'axios';
2
+ import { User } from './userService.types';
3
+ type GetUserParams = {
4
+ axiosInstance: AxiosInstance;
5
+ config?: AxiosRequestConfig;
6
+ userId?: string;
7
+ token?: string;
8
+ };
9
+ export declare const getUser: ({ axiosInstance, config, userId, token, }: GetUserParams) => Promise<User>;
10
+ export {};
11
+ //# sourceMappingURL=user.service.d.ts.map
@@ -0,0 +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,qBAAqB,CAAA;AAE1C,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,CAiC9B,CAAA"}
@@ -0,0 +1,24 @@
1
+ import { DrupalJsonApiParams } from 'drupal-jsonapi-params';
2
+ export const getUser = async ({ axiosInstance, config = {}, userId, token, }) => {
3
+ const params = new DrupalJsonApiParams();
4
+ userId && params.addFilter('drupal_internal__uid', userId, 'IN');
5
+ const queryString = params.getQueryString();
6
+ const headers = token ? { ...config.headers, Authorization: `Bearer ${token}` } : config.headers;
7
+ const { data } = await axiosInstance.get(`/jsonapi/user/user?${queryString}`, {
8
+ ...config,
9
+ headers,
10
+ });
11
+ const firstItem = data.data?.[0];
12
+ const customerId = firstItem?.relationships?.customer_profiles?.data?.[0]?.id;
13
+ let mappedUser = {
14
+ name: firstItem?.attributes?.name ?? '',
15
+ email: firstItem?.attributes?.mail ?? '',
16
+ };
17
+ if (customerId) {
18
+ const { data: customerData } = await axiosInstance.get(`/jsonapi/profile/customer/${customerId}`, {
19
+ ...config,
20
+ });
21
+ mappedUser.address = customerData.data.attributes.address;
22
+ }
23
+ return mappedUser;
24
+ };
@@ -0,0 +1,42 @@
1
+ export type JsonApiResponse<T> = {
2
+ [x: string]: any;
3
+ jsonapi: {
4
+ version: string;
5
+ meta: {
6
+ links: {
7
+ self: {
8
+ href: string;
9
+ };
10
+ };
11
+ };
12
+ };
13
+ data: T[];
14
+ included: any;
15
+ links: {
16
+ self: {
17
+ href: string;
18
+ };
19
+ };
20
+ };
21
+ export type UserAddress = {
22
+ additional_name: string | null;
23
+ address_line1: string;
24
+ address_line2: string;
25
+ administrative_area: string | null;
26
+ country_code: string;
27
+ dependent_locality: string | null;
28
+ family_name: string;
29
+ given_name: string;
30
+ langcode: string;
31
+ locality: string;
32
+ organization: string;
33
+ postal_code: string;
34
+ sorting_code: string | null;
35
+ };
36
+ export type User = {
37
+ name: string;
38
+ email: string;
39
+ field_name?: string;
40
+ address?: UserAddress;
41
+ };
42
+ //# sourceMappingURL=userService.types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"userService.types.d.ts","sourceRoot":"","sources":["../../../auth/services/userService.types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,eAAe,CAAC,CAAC,IAAI;IAC7B,CAAC,CAAC,EAAE,MAAM,GAAG,GAAG,CAAA;IAChB,OAAO,EAAE;QACL,OAAO,EAAE,MAAM,CAAA;QACf,IAAI,EAAE;YACF,KAAK,EAAE;gBACH,IAAI,EAAE;oBACF,IAAI,EAAE,MAAM,CAAA;iBACf,CAAA;aACJ,CAAA;SACJ,CAAA;KACJ,CAAA;IACD,IAAI,EAAE,CAAC,EAAE,CAAA;IACT,QAAQ,EAAE,GAAG,CAAA;IACb,KAAK,EAAE;QACH,IAAI,EAAE;YACF,IAAI,EAAE,MAAM,CAAA;SACf,CAAA;KACJ,CAAA;CACJ,CAAA;AAED,MAAM,MAAM,WAAW,GAAG;IACtB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAA;IAC9B,aAAa,EAAE,MAAM,CAAA;IACrB,aAAa,EAAE,MAAM,CAAA;IACrB,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAA;IAClC,YAAY,EAAE,MAAM,CAAA;IACpB,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAA;IACjC,WAAW,EAAE,MAAM,CAAA;IACnB,UAAU,EAAE,MAAM,CAAA;IAClB,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,MAAM,CAAA;IAChB,YAAY,EAAE,MAAM,CAAA;IACpB,WAAW,EAAE,MAAM,CAAA;IACnB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAA;CAC9B,CAAA;AAED,MAAM,MAAM,IAAI,GAAG;IACf,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,OAAO,CAAC,EAAE,WAAW,CAAA;CACxB,CAAA"}
@@ -0,0 +1 @@
1
+ export {};
@@ -1,3 +1,3 @@
1
1
  import { CoreContext } from '../../context';
2
- export declare const useGetUser: (ctx: CoreContext) => import("@tanstack/react-query").UseQueryResult<import("../..").User | null, Error>;
2
+ export declare const useGetUser: (ctx: CoreContext) => import("@tanstack/react-query").UseQueryResult<import("../../api/user/getUser/userService.types").User | null, Error>;
3
3
  //# sourceMappingURL=useGetUser.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useGetUser.d.ts","sourceRoot":"","sources":["../../../hooks/user/useGetUser.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,eAAO,MAAM,UAAU,GAAI,KAAK,WAAW,uFAQ1C,CAAC"}
1
+ {"version":3,"file":"useGetUser.d.ts","sourceRoot":"","sources":["../../../hooks/user/useGetUser.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,eAAO,MAAM,UAAU,GAAI,KAAK,WAAW,0HAQ1C,CAAC"}
package/dist/index.d.ts CHANGED
@@ -6,24 +6,29 @@ export * from './api/getTerms';
6
6
  export * from './types/Term';
7
7
  export * from './api/products/getProducts';
8
8
  export * from './types/products/Product';
9
- export * from './api/pages/page/pageService.types';
10
9
  export * from './api/pages/page/page.service';
11
- export * from './api/pages/faq/faqService.types';
10
+ export * from './api/pages/page/pageService.types';
12
11
  export * from './api/pages/faq/faq.service';
13
- export * from './api/pages/branch/branchService.types';
12
+ export * from './api/pages/faq/faqService.types';
14
13
  export * from './api/pages/branch/branch.service';
14
+ export * from './api/pages/branch/branchService.types';
15
15
  export * from './api/user/register/Register.service';
16
16
  export * from './api/user/resetPassword/resetPassword.service';
17
- export * from './api/user/getUser/user.service';
18
- export * from './api/user/getUser/userService.types';
19
17
  export * from './hooks/user/useGetUser';
18
+ export * from './auth/auth/auth';
19
+ export * from './auth/auth/auth.config';
20
+ export * from './auth/auth/auth.types';
21
+ export * from './auth/context/AuthContext';
22
+ export * from './auth/hooks/useCurrentUser';
23
+ export * from './auth/hooks/useSignIn';
24
+ export * from './auth/hooks/useSignOut';
20
25
  export * from './api/checkout/Checkout.service';
21
26
  export * from './api/checkout/CheckoutService.types';
22
27
  export * from './hooks/cart/api/useGetOrderHistory';
23
28
  export * from './hooks/wishlist/useWishlist';
24
29
  export * from './context';
25
30
  export * from './context/cart/BasketContext';
26
- export * from './api/cart/CartService.types';
27
31
  export * from './api/cart/Cart.service';
32
+ export * from './api/cart/CartService.types';
28
33
  export * from './utils/mapProducts';
29
34
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AACA,cAAc,0BAA0B,CAAC;AACzC,cAAc,uBAAuB,CAAC;AAEtC,cAAc,yBAAyB,CAAC;AACxC,cAAc,sBAAsB,CAAC;AAGrC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAG7B,cAAc,4BAA4B,CAAC;AAC3C,cAAc,0BAA0B,CAAC;AAGzC,cAAc,oCAAoC,CAAC;AACnD,cAAc,+BAA+B,CAAC;AAE9C,cAAc,kCAAkC,CAAC;AACjD,cAAc,6BAA6B,CAAC;AAE5C,cAAc,wCAAwC,CAAC;AACvD,cAAc,mCAAmC,CAAC;AAGlD,cAAc,sCAAsC,CAAA;AACpD,cAAc,gDAAgD,CAAC;AAE/D,cAAc,iCAAiC,CAAC;AAChD,cAAc,sCAAsC,CAAC;AACrD,cAAc,yBAAyB,CAAC;AAGxC,cAAc,iCAAiC,CAAC;AAChD,cAAc,sCAAsC,CAAC;AAErD,cAAc,qCAAqC,CAAC;AACpD,cAAc,8BAA8B,CAAC;AAE7C,cAAc,WAAW,CAAC;AAC1B,cAAc,8BAA8B,CAAC;AAE7C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,yBAAyB,CAAC;AAGxC,cAAc,qBAAqB,CAAC"}
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;AAE5C,cAAc,WAAW,CAAA;AACzB,cAAc,8BAA8B,CAAA;AAE5C,cAAc,yBAAyB,CAAA;AACvC,cAAc,8BAA8B,CAAA;AAE5C,cAAc,qBAAqB,CAAA"}
package/dist/index.js CHANGED
@@ -10,24 +10,30 @@ export * from './types/Term';
10
10
  export * from './api/products/getProducts';
11
11
  export * from './types/products/Product';
12
12
  // pages
13
- export * from './api/pages/page/pageService.types';
14
13
  export * from './api/pages/page/page.service';
15
- export * from './api/pages/faq/faqService.types';
14
+ export * from './api/pages/page/pageService.types';
16
15
  export * from './api/pages/faq/faq.service';
17
- export * from './api/pages/branch/branchService.types';
16
+ export * from './api/pages/faq/faqService.types';
18
17
  export * from './api/pages/branch/branch.service';
19
- //uesr
18
+ export * from './api/pages/branch/branchService.types';
19
+ //user api (len register a reset password)
20
20
  export * from './api/user/register/Register.service';
21
21
  export * from './api/user/resetPassword/resetPassword.service';
22
- export * from './api/user/getUser/user.service';
23
- export * from './api/user/getUser/userService.types';
24
22
  export * from './hooks/user/useGetUser';
23
+ // auth - hlavné auth funkcionality
24
+ export * from './auth/auth/auth';
25
+ export * from './auth/auth/auth.config';
26
+ export * from './auth/auth/auth.types';
27
+ export * from './auth/context/AuthContext';
28
+ export * from './auth/hooks/useCurrentUser';
29
+ export * from './auth/hooks/useSignIn';
30
+ export * from './auth/hooks/useSignOut';
25
31
  export * from './api/checkout/Checkout.service';
26
32
  export * from './api/checkout/CheckoutService.types';
27
33
  export * from './hooks/cart/api/useGetOrderHistory';
28
34
  export * from './hooks/wishlist/useWishlist';
29
35
  export * from './context';
30
36
  export * from './context/cart/BasketContext';
31
- export * from './api/cart/CartService.types';
32
37
  export * from './api/cart/Cart.service';
38
+ export * from './api/cart/CartService.types';
33
39
  export * from './utils/mapProducts';
@@ -12,5 +12,6 @@ export type Term = {
12
12
  drupal_internal__tid?: string;
13
13
  } | null;
14
14
  icon?: string;
15
+ image?: string;
15
16
  };
16
17
  //# sourceMappingURL=Term.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Term.d.ts","sourceRoot":"","sources":["../../types/Term.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,IAAI,GAAG;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,IAAI,EAAE,CAAC;IAClB,MAAM,EAAE;QACN,IAAI,EAAE,MAAM,CAAC;QACb,EAAE,EAAE,MAAM,CAAC;QACX,oBAAoB,CAAC,EAAE,MAAM,CAAC;KAC/B,GAAG,IAAI,CAAC;IACT,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC"}
1
+ {"version":3,"file":"Term.d.ts","sourceRoot":"","sources":["../../types/Term.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,IAAI,GAAG;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,IAAI,EAAE,CAAC;IAClB,MAAM,EAAE;QACN,IAAI,EAAE,MAAM,CAAC;QACb,EAAE,EAAE,MAAM,CAAC;QACX,oBAAoB,CAAC,EAAE,MAAM,CAAC;KAC/B,GAAG,IAAI,CAAC;IACT,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@q2devel/q2-core",
3
- "version": "1.0.5",
3
+ "version": "1.0.7",
4
4
  "main": "dist/index.js",
5
5
  "types": "dist/index.d.ts",
6
6
  "exports": {
@@ -18,6 +18,8 @@
18
18
  ],
19
19
  "license": "MIT",
20
20
  "devDependencies": {
21
+ "@types/js-cookie": "^3.0.6",
22
+ "@types/jwt-decode": "^2.2.1",
21
23
  "@types/react": "^19.1.7",
22
24
  "@types/react-dom": "^19.1.6",
23
25
  "typescript": "^5.8.3"
@@ -26,6 +28,8 @@
26
28
  "@tanstack/react-query": "^5.80.6",
27
29
  "axios": "^1.9.0",
28
30
  "drupal-jsonapi-params": "^2.3.2",
31
+ "js-cookie": "^3.0.5",
32
+ "jwt-decode": "^4.0.0",
29
33
  "react": "^19.1.0"
30
34
  }
31
35
  }