@akinon/next 1.13.0 → 1.14.0

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 (133) hide show
  1. package/.editorconfig +7 -0
  2. package/.eslintrc.js +40 -40
  3. package/.prettierrc +13 -13
  4. package/CHANGELOG.md +19 -0
  5. package/api/auth.ts +231 -231
  6. package/api/cache.ts +44 -44
  7. package/api/client.ts +174 -174
  8. package/api/logout.ts +42 -42
  9. package/assets/styles/index.scss +28 -28
  10. package/bin/pz-check-dependencies.js +98 -98
  11. package/bin/pz-install-plugins.js +33 -33
  12. package/bin/pz-install-theme.js +58 -58
  13. package/bin/pz-postbuild.js +1 -1
  14. package/bin/pz-postdev.js +1 -1
  15. package/bin/pz-postinstall.js +6 -6
  16. package/bin/pz-poststart.js +1 -1
  17. package/bin/pz-prebuild.js +4 -4
  18. package/bin/pz-predev.js +4 -4
  19. package/bin/pz-prestart.js +1 -1
  20. package/bin/run-script.js +44 -44
  21. package/components/accordion.tsx +52 -0
  22. package/components/button.tsx +46 -0
  23. package/components/client-root.tsx +19 -19
  24. package/components/icon.tsx +18 -18
  25. package/components/image.tsx +133 -133
  26. package/components/index.ts +17 -1
  27. package/components/input.tsx +110 -0
  28. package/components/lazy-component.tsx +33 -33
  29. package/components/loader-spinner.tsx +23 -23
  30. package/components/mobile-app-toggler.tsx +26 -26
  31. package/components/oauth-login.tsx +24 -24
  32. package/components/plugin-module.tsx +11 -8
  33. package/components/price.tsx +55 -0
  34. package/components/pz-providers.tsx +24 -24
  35. package/components/pz-root.tsx +21 -21
  36. package/components/radio.tsx +18 -18
  37. package/components/react-portal.tsx +45 -45
  38. package/components/redirect-three-d/content/index.tsx +74 -74
  39. package/components/redirect-three-d/index.tsx +17 -17
  40. package/components/selected-payment-option-view.tsx +7 -0
  41. package/components/trans.tsx +39 -39
  42. package/data/client/account.ts +208 -208
  43. package/data/client/address.ts +107 -107
  44. package/data/client/api.ts +85 -84
  45. package/data/client/b2b.ts +106 -106
  46. package/data/client/basket.ts +82 -82
  47. package/data/client/checkout.ts +516 -479
  48. package/data/client/misc.ts +101 -101
  49. package/data/client/product.ts +89 -89
  50. package/data/client/user.ts +99 -99
  51. package/data/client/wishlist.ts +118 -88
  52. package/data/server/category.ts +132 -128
  53. package/data/server/flatpage.ts +21 -21
  54. package/data/server/form.ts +22 -22
  55. package/data/server/index.ts +10 -10
  56. package/data/server/landingpage.ts +24 -24
  57. package/data/server/list.ts +67 -62
  58. package/data/server/menu.ts +35 -35
  59. package/data/server/product.ts +86 -86
  60. package/data/server/seo.ts +48 -48
  61. package/data/server/special-page.ts +47 -47
  62. package/data/server/widget.ts +27 -27
  63. package/data/urls.ts +221 -210
  64. package/hocs/client/index.ts +1 -1
  65. package/hocs/client/with-segment-defaults.tsx +25 -25
  66. package/hocs/server/index.ts +1 -1
  67. package/hocs/server/with-segment-defaults.tsx +85 -85
  68. package/hooks/index.ts +10 -10
  69. package/hooks/use-captcha.tsx +76 -76
  70. package/hooks/use-common-product-attributes.ts +36 -36
  71. package/hooks/use-debounce.ts +20 -20
  72. package/hooks/use-localization.ts +78 -78
  73. package/hooks/use-media-query.ts +36 -36
  74. package/hooks/use-mobile-iframe-handler.ts +23 -23
  75. package/hooks/use-on-click-outside.tsx +28 -28
  76. package/hooks/use-payment-options.ts +12 -16
  77. package/hooks/use-router.ts +45 -45
  78. package/hooks/use-translation.ts +14 -14
  79. package/lib/cache.ts +215 -215
  80. package/localization/index.ts +5 -5
  81. package/localization/provider.tsx +58 -58
  82. package/middlewares/currency.ts +100 -100
  83. package/middlewares/default.ts +256 -256
  84. package/middlewares/index.ts +29 -29
  85. package/middlewares/locale.ts +68 -68
  86. package/middlewares/oauth-login.ts +79 -79
  87. package/middlewares/pretty-url.ts +104 -104
  88. package/middlewares/redirection-payment.ts +160 -160
  89. package/middlewares/three-d-redirection.ts +159 -159
  90. package/middlewares/url-redirection.ts +65 -65
  91. package/package.json +2 -2
  92. package/plugins.js +2 -1
  93. package/redux/hooks.ts +7 -7
  94. package/redux/middlewares/checkout.ts +265 -260
  95. package/redux/middlewares/index.ts +50 -50
  96. package/redux/reducers/checkout.ts +184 -171
  97. package/redux/reducers/config.ts +28 -28
  98. package/redux/reducers/header.ts +59 -59
  99. package/redux/reducers/index.ts +14 -14
  100. package/redux/reducers/root.ts +61 -61
  101. package/sentry/index.ts +27 -27
  102. package/tailwind/rtl.js +137 -137
  103. package/types/commerce/account.ts +64 -64
  104. package/types/commerce/address.ts +94 -94
  105. package/types/commerce/b2b.ts +117 -117
  106. package/types/commerce/basket.ts +43 -43
  107. package/types/commerce/category.ts +114 -114
  108. package/types/commerce/checkout.ts +143 -136
  109. package/types/commerce/flatpage.ts +7 -7
  110. package/types/commerce/form.ts +66 -66
  111. package/types/commerce/index.ts +12 -12
  112. package/types/commerce/landingpage.ts +7 -7
  113. package/types/commerce/misc.ts +127 -127
  114. package/types/commerce/order.ts +119 -119
  115. package/types/commerce/product.ts +109 -109
  116. package/types/commerce/widget.ts +28 -28
  117. package/types/gtm.ts +16 -16
  118. package/types/index.ts +274 -237
  119. package/types/metadata.ts +7 -7
  120. package/types/next-auth.d.ts +24 -24
  121. package/utils/app-fetch.ts +69 -69
  122. package/utils/deep-merge.js +24 -24
  123. package/utils/generate-commerce-search-params.ts +22 -22
  124. package/utils/get-currency.ts +29 -29
  125. package/utils/image-loader.ts +31 -31
  126. package/utils/index.ts +150 -150
  127. package/utils/localization.ts +29 -29
  128. package/utils/log.ts +138 -138
  129. package/utils/menu-generator.ts +27 -27
  130. package/utils/mobile-3d-iframe.ts +77 -77
  131. package/utils/server-translation.ts +57 -57
  132. package/utils/server-variables.ts +9 -9
  133. package/with-pz-config.js +94 -94
@@ -1,101 +1,101 @@
1
- import {
2
- EmailSubscriptionType,
3
- MenuItemType,
4
- WidgetResultType
5
- } from '../../types';
6
- import { buildClientRequestUrl } from '../../utils';
7
- import { misc, widgets } from '../urls';
8
- import { api } from './api';
9
-
10
- type CategoryExtraType = {
11
- category_id: number;
12
- parent_categories: Array<string>;
13
- };
14
-
15
- type ProductExtraType = {
16
- image: string;
17
- price: number;
18
- product_type: string;
19
- retail_price: number;
20
- };
21
-
22
- export interface AutocompleteResponse {
23
- groups: Array<{
24
- entries: Array<{
25
- extra: CategoryExtraType & ProductExtraType;
26
- label: string;
27
- suggestion_type: string;
28
- url: string;
29
- }>;
30
- suggestion_type: 'Category' | 'Product';
31
- }>;
32
- }
33
-
34
- export interface GetLanguageResponse {
35
- active_language: string;
36
- default_language: string;
37
- available_languages: {
38
- [key: string]: string;
39
- };
40
- }
41
-
42
- export interface SetLanguageResponse {
43
- success: boolean;
44
- }
45
-
46
- export const miscApi = api.injectEndpoints({
47
- endpoints: (builder) => ({
48
- autocomplete: builder.query<AutocompleteResponse, string>({
49
- query: (query: string) => ({
50
- url: buildClientRequestUrl(`${misc.autocomplete}?search_text=${query}`)
51
- })
52
- }),
53
- emailSubscription: builder.mutation<void, EmailSubscriptionType>({
54
- query: (body) => ({
55
- url: buildClientRequestUrl(misc.emailSubscription, {
56
- contentType: 'application/json'
57
- }),
58
- method: 'POST',
59
- body
60
- })
61
- }),
62
- setLanguage: builder.mutation<any, { language: string }>({
63
- query: (body) => ({
64
- url: buildClientRequestUrl('/i18n/setlang', {
65
- useFormData: true,
66
- responseType: 'text'
67
- }),
68
- method: 'POST',
69
- body
70
- }),
71
- transformResponse: (response, meta) => {
72
- return {
73
- success: meta.response.status === 200,
74
- osessionid: meta.response.headers.get('osessionid')
75
- };
76
- }
77
- }),
78
- getWidget: builder.query<WidgetResultType<any>, string>({
79
- query: (slug: string) => ({
80
- url: buildClientRequestUrl(widgets.getWidget(slug))
81
- })
82
- }),
83
- getMenu: builder.query<MenuItemType[], number>({
84
- query: (depth) => ({
85
- url: buildClientRequestUrl(misc.menus(depth))
86
- }),
87
- transformResponse: (response: { menu: MenuItemType[] }) => {
88
- return response.menu;
89
- }
90
- })
91
- }),
92
- overrideExisting: true
93
- });
94
-
95
- export const {
96
- useAutocompleteQuery,
97
- useEmailSubscriptionMutation,
98
- useSetLanguageMutation,
99
- useGetWidgetQuery,
100
- useGetMenuQuery
101
- } = miscApi;
1
+ import {
2
+ EmailSubscriptionType,
3
+ MenuItemType,
4
+ WidgetResultType
5
+ } from '../../types';
6
+ import { buildClientRequestUrl } from '../../utils';
7
+ import { misc, widgets } from '../urls';
8
+ import { api } from './api';
9
+
10
+ type CategoryExtraType = {
11
+ category_id: number;
12
+ parent_categories: Array<string>;
13
+ };
14
+
15
+ type ProductExtraType = {
16
+ image: string;
17
+ price: number;
18
+ product_type: string;
19
+ retail_price: number;
20
+ };
21
+
22
+ export interface AutocompleteResponse {
23
+ groups: Array<{
24
+ entries: Array<{
25
+ extra: CategoryExtraType & ProductExtraType;
26
+ label: string;
27
+ suggestion_type: string;
28
+ url: string;
29
+ }>;
30
+ suggestion_type: 'Category' | 'Product';
31
+ }>;
32
+ }
33
+
34
+ export interface GetLanguageResponse {
35
+ active_language: string;
36
+ default_language: string;
37
+ available_languages: {
38
+ [key: string]: string;
39
+ };
40
+ }
41
+
42
+ export interface SetLanguageResponse {
43
+ success: boolean;
44
+ }
45
+
46
+ export const miscApi = api.injectEndpoints({
47
+ endpoints: (builder) => ({
48
+ autocomplete: builder.query<AutocompleteResponse, string>({
49
+ query: (query: string) => ({
50
+ url: buildClientRequestUrl(`${misc.autocomplete}?search_text=${query}`)
51
+ })
52
+ }),
53
+ emailSubscription: builder.mutation<void, EmailSubscriptionType>({
54
+ query: (body) => ({
55
+ url: buildClientRequestUrl(misc.emailSubscription, {
56
+ contentType: 'application/json'
57
+ }),
58
+ method: 'POST',
59
+ body
60
+ })
61
+ }),
62
+ setLanguage: builder.mutation<any, { language: string }>({
63
+ query: (body) => ({
64
+ url: buildClientRequestUrl('/i18n/setlang', {
65
+ useFormData: true,
66
+ responseType: 'text'
67
+ }),
68
+ method: 'POST',
69
+ body
70
+ }),
71
+ transformResponse: (response, meta) => {
72
+ return {
73
+ success: meta.response.status === 200,
74
+ osessionid: meta.response.headers.get('osessionid')
75
+ };
76
+ }
77
+ }),
78
+ getWidget: builder.query<WidgetResultType<any>, string>({
79
+ query: (slug: string) => ({
80
+ url: buildClientRequestUrl(widgets.getWidget(slug))
81
+ })
82
+ }),
83
+ getMenu: builder.query<MenuItemType[], number>({
84
+ query: (depth) => ({
85
+ url: buildClientRequestUrl(misc.menus(depth))
86
+ }),
87
+ transformResponse: (response: { menu: MenuItemType[] }) => {
88
+ return response.menu;
89
+ }
90
+ })
91
+ }),
92
+ overrideExisting: true
93
+ });
94
+
95
+ export const {
96
+ useAutocompleteQuery,
97
+ useEmailSubscriptionMutation,
98
+ useSetLanguageMutation,
99
+ useGetWidgetQuery,
100
+ useGetMenuQuery
101
+ } = miscApi;
@@ -1,89 +1,89 @@
1
- import {
2
- Basket,
3
- FindInStoreFormType,
4
- ProductResult,
5
- StockResultType
6
- } from '../../types';
7
- import { buildClientRequestUrl } from '../../utils';
8
- import { api } from './api';
9
- import { product } from '../urls';
10
-
11
- export type AddProductResponse = {
12
- basket: Basket;
13
- osessionid: string;
14
- };
15
-
16
- export type AddProductRequest = {
17
- product: number;
18
- quantity: number;
19
- attributes: any;
20
- };
21
-
22
- type GetProduct = {
23
- pk: number;
24
- searchParams?: URLSearchParams;
25
- groupProduct?: boolean;
26
- [key: string]: any;
27
- };
28
-
29
- export const productApi = api.injectEndpoints({
30
- endpoints: (build) => ({
31
- getProductByPk: build.query<ProductResult, number>({
32
- query: (pk) => ({
33
- url: buildClientRequestUrl(product.getProductByPk(pk))
34
- })
35
- }),
36
- getProductByParams: build.query<ProductResult, GetProduct>({
37
- query: ({ pk, searchParams, groupProduct, ...params }) => {
38
- let url = groupProduct
39
- ? product.getGroupProductByPk(pk)
40
- : product.getProductByPk(pk);
41
-
42
- if (params) {
43
- url = `${url}?${new URLSearchParams(params).toString()}`;
44
- }
45
-
46
- return {
47
- url: buildClientRequestUrl(url)
48
- };
49
- }
50
- }),
51
- getRetailStoreStock: build.mutation<StockResultType, FindInStoreFormType>({
52
- query: (body) => {
53
- const { productPk, queryString } = body;
54
- return {
55
- url: buildClientRequestUrl(
56
- product.getRetailStoreStock(productPk, queryString),
57
- {
58
- contentType: 'application/json'
59
- }
60
- ),
61
- method: 'GET'
62
- };
63
- }
64
- }),
65
- addProduct: build.mutation<AddProductResponse, AddProductRequest>({
66
- query: (body) => ({
67
- url: buildClientRequestUrl(product.addProduct, {
68
- contentType: 'application/json'
69
- }),
70
- method: 'POST',
71
- body
72
- })
73
- }),
74
- getInstallments: build.query<any, any>({
75
- query: (productPk) => ({
76
- url: buildClientRequestUrl(product.installments(productPk))
77
- })
78
- })
79
- }),
80
- overrideExisting: true
81
- });
82
-
83
- export const {
84
- useAddProductMutation,
85
- useGetProductByPkQuery,
86
- useGetRetailStoreStockMutation,
87
- useGetInstallmentsQuery,
88
- useGetProductByParamsQuery
89
- } = productApi;
1
+ import {
2
+ Basket,
3
+ FindInStoreFormType,
4
+ ProductResult,
5
+ StockResultType
6
+ } from '../../types';
7
+ import { buildClientRequestUrl } from '../../utils';
8
+ import { api } from './api';
9
+ import { product } from '../urls';
10
+
11
+ export type AddProductResponse = {
12
+ basket: Basket;
13
+ osessionid: string;
14
+ };
15
+
16
+ export type AddProductRequest = {
17
+ product: number;
18
+ quantity: number;
19
+ attributes: any;
20
+ };
21
+
22
+ type GetProduct = {
23
+ pk: number;
24
+ searchParams?: URLSearchParams;
25
+ groupProduct?: boolean;
26
+ [key: string]: any;
27
+ };
28
+
29
+ export const productApi = api.injectEndpoints({
30
+ endpoints: (build) => ({
31
+ getProductByPk: build.query<ProductResult, number>({
32
+ query: (pk) => ({
33
+ url: buildClientRequestUrl(product.getProductByPk(pk))
34
+ })
35
+ }),
36
+ getProductByParams: build.query<ProductResult, GetProduct>({
37
+ query: ({ pk, searchParams, groupProduct, ...params }) => {
38
+ let url = groupProduct
39
+ ? product.getGroupProductByPk(pk)
40
+ : product.getProductByPk(pk);
41
+
42
+ if (params) {
43
+ url = `${url}?${new URLSearchParams(params).toString()}`;
44
+ }
45
+
46
+ return {
47
+ url: buildClientRequestUrl(url)
48
+ };
49
+ }
50
+ }),
51
+ getRetailStoreStock: build.mutation<StockResultType, FindInStoreFormType>({
52
+ query: (body) => {
53
+ const { productPk, queryString } = body;
54
+ return {
55
+ url: buildClientRequestUrl(
56
+ product.getRetailStoreStock(productPk, queryString),
57
+ {
58
+ contentType: 'application/json'
59
+ }
60
+ ),
61
+ method: 'GET'
62
+ };
63
+ }
64
+ }),
65
+ addProduct: build.mutation<AddProductResponse, AddProductRequest>({
66
+ query: (body) => ({
67
+ url: buildClientRequestUrl(product.addProduct, {
68
+ contentType: 'application/json'
69
+ }),
70
+ method: 'POST',
71
+ body
72
+ })
73
+ }),
74
+ getInstallments: build.query<any, any>({
75
+ query: (productPk) => ({
76
+ url: buildClientRequestUrl(product.installments(productPk))
77
+ })
78
+ })
79
+ }),
80
+ overrideExisting: true
81
+ });
82
+
83
+ export const {
84
+ useAddProductMutation,
85
+ useGetProductByPkQuery,
86
+ useGetRetailStoreStockMutation,
87
+ useGetInstallmentsQuery,
88
+ useGetProductByParamsQuery
89
+ } = productApi;
@@ -1,99 +1,99 @@
1
- import { api } from './api';
2
- import { user } from '../urls';
3
- import { ForgotPasswordFormType } from '../../types';
4
- import { buildClientRequestUrl } from '../../utils';
5
-
6
- interface GetCaptchaResponse {
7
- siteKey: string;
8
- csrfToken: string;
9
- }
10
-
11
- interface ValidateCaptchaRequest {
12
- captchaResponse: string;
13
- csrfToken: string;
14
- }
15
-
16
- interface ValidateCaptchaResponse {
17
- success: boolean;
18
- }
19
-
20
- const userApi = api.injectEndpoints({
21
- endpoints: (build) => ({
22
- getCaptcha: build.query<GetCaptchaResponse, void>({
23
- query: () => buildClientRequestUrl(user.captcha),
24
- transformResponse: (response: { html: string }) => {
25
- const siteKeyMatch = response.html.match(/sitekey=["|']\w+/gi);
26
- const csrfTokenMatch = response.html.match(
27
- /name=['|"]csrfmiddlewaretoken['|"] value=['|"]\w+/gi
28
- );
29
- const siteKey = siteKeyMatch?.[0].replace(/sitekey=["|']/, '') || '';
30
- const csrfToken =
31
- csrfTokenMatch?.[0].replace(
32
- /name=['|"]csrfmiddlewaretoken['|"] value=['|"]/gi,
33
- ''
34
- ) || '';
35
-
36
- return {
37
- siteKey,
38
- csrfToken
39
- };
40
- }
41
- }),
42
- validateCaptcha: build.mutation<
43
- ValidateCaptchaResponse,
44
- ValidateCaptchaRequest
45
- >({
46
- query: (body) => ({
47
- url: buildClientRequestUrl(user.captcha, {
48
- useFormData: true
49
- }),
50
- method: 'POST',
51
- body: {
52
- 'g-recaptcha-response': body.captchaResponse
53
- }
54
- }),
55
- transformResponse: (response: { location: string }) => ({
56
- success: response.location === '/'
57
- })
58
- }),
59
- logout: build.mutation<string, void>({
60
- query: () => ({
61
- url: '/api/logout',
62
- method: 'POST'
63
- })
64
- }),
65
- forgotPassword: build.mutation<void, ForgotPasswordFormType>({
66
- query: (body) => ({
67
- url: buildClientRequestUrl(user.forgotPassword, {
68
- contentType: 'application/json'
69
- }),
70
- method: 'POST',
71
- body
72
- })
73
- }),
74
- changeEmailVerification: build.query<void, string>({
75
- query: (token) => ({
76
- url: buildClientRequestUrl(user.changeEmailVerification(token), {
77
- contentType: 'application/json'
78
- })
79
- })
80
- }),
81
- confirmEmailVerification: build.query<void, string>({
82
- query: (token) => ({
83
- url: buildClientRequestUrl(user.confirmEmailVerification(token), {
84
- contentType: 'application/json'
85
- })
86
- })
87
- })
88
- }),
89
- overrideExisting: false
90
- });
91
-
92
- export const {
93
- useGetCaptchaQuery,
94
- useChangeEmailVerificationQuery,
95
- useConfirmEmailVerificationQuery,
96
- useValidateCaptchaMutation,
97
- useLogoutMutation,
98
- useForgotPasswordMutation
99
- } = userApi;
1
+ import { api } from './api';
2
+ import { user } from '../urls';
3
+ import { ForgotPasswordFormType } from '../../types';
4
+ import { buildClientRequestUrl } from '../../utils';
5
+
6
+ interface GetCaptchaResponse {
7
+ siteKey: string;
8
+ csrfToken: string;
9
+ }
10
+
11
+ interface ValidateCaptchaRequest {
12
+ captchaResponse: string;
13
+ csrfToken: string;
14
+ }
15
+
16
+ interface ValidateCaptchaResponse {
17
+ success: boolean;
18
+ }
19
+
20
+ const userApi = api.injectEndpoints({
21
+ endpoints: (build) => ({
22
+ getCaptcha: build.query<GetCaptchaResponse, void>({
23
+ query: () => buildClientRequestUrl(user.captcha),
24
+ transformResponse: (response: { html: string }) => {
25
+ const siteKeyMatch = response.html.match(/sitekey=["|']\w+/gi);
26
+ const csrfTokenMatch = response.html.match(
27
+ /name=['|"]csrfmiddlewaretoken['|"] value=['|"]\w+/gi
28
+ );
29
+ const siteKey = siteKeyMatch?.[0].replace(/sitekey=["|']/, '') || '';
30
+ const csrfToken =
31
+ csrfTokenMatch?.[0].replace(
32
+ /name=['|"]csrfmiddlewaretoken['|"] value=['|"]/gi,
33
+ ''
34
+ ) || '';
35
+
36
+ return {
37
+ siteKey,
38
+ csrfToken
39
+ };
40
+ }
41
+ }),
42
+ validateCaptcha: build.mutation<
43
+ ValidateCaptchaResponse,
44
+ ValidateCaptchaRequest
45
+ >({
46
+ query: (body) => ({
47
+ url: buildClientRequestUrl(user.captcha, {
48
+ useFormData: true
49
+ }),
50
+ method: 'POST',
51
+ body: {
52
+ 'g-recaptcha-response': body.captchaResponse
53
+ }
54
+ }),
55
+ transformResponse: (response: { location: string }) => ({
56
+ success: response.location === '/'
57
+ })
58
+ }),
59
+ logout: build.mutation<string, void>({
60
+ query: () => ({
61
+ url: '/api/logout',
62
+ method: 'POST'
63
+ })
64
+ }),
65
+ forgotPassword: build.mutation<void, ForgotPasswordFormType>({
66
+ query: (body) => ({
67
+ url: buildClientRequestUrl(user.forgotPassword, {
68
+ contentType: 'application/json'
69
+ }),
70
+ method: 'POST',
71
+ body
72
+ })
73
+ }),
74
+ changeEmailVerification: build.query<void, string>({
75
+ query: (token) => ({
76
+ url: buildClientRequestUrl(user.changeEmailVerification(token), {
77
+ contentType: 'application/json'
78
+ })
79
+ })
80
+ }),
81
+ confirmEmailVerification: build.query<void, string>({
82
+ query: (token) => ({
83
+ url: buildClientRequestUrl(user.confirmEmailVerification(token), {
84
+ contentType: 'application/json'
85
+ })
86
+ })
87
+ })
88
+ }),
89
+ overrideExisting: false
90
+ });
91
+
92
+ export const {
93
+ useGetCaptchaQuery,
94
+ useChangeEmailVerificationQuery,
95
+ useConfirmEmailVerificationQuery,
96
+ useValidateCaptchaMutation,
97
+ useLogoutMutation,
98
+ useForgotPasswordMutation
99
+ } = userApi;