@ducks-tinder-client/auth 1.0.0-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. package/LICENSE +21 -0
  2. package/dist/cjs/index.css +1 -0
  3. package/dist/cjs/index.js +1 -0
  4. package/dist/entities/user/api/auth/index.d.ts +5 -0
  5. package/dist/entities/user/api/auth/keys.d.ts +3 -0
  6. package/dist/entities/user/api/auth/useLoginMutation.d.ts +2 -0
  7. package/dist/entities/user/api/auth/useLogoutMutation.d.ts +1 -0
  8. package/dist/entities/user/api/auth/useRefreshMutation.d.ts +1 -0
  9. package/dist/entities/user/api/auth/useRegisterMutation.d.ts +2 -0
  10. package/dist/entities/user/api/index.d.ts +2 -0
  11. package/dist/entities/user/api/user/index.d.ts +2 -0
  12. package/dist/entities/user/api/user/keys.d.ts +3 -0
  13. package/dist/entities/user/api/user/useGetCurrentUserQuery.d.ts +1 -0
  14. package/dist/entities/user/index.d.ts +4 -0
  15. package/dist/entities/user/lib/hocs/WithAuthRedirect.d.ts +2 -0
  16. package/dist/entities/user/lib/hocs/WithInitialLoading.d.ts +2 -0
  17. package/dist/entities/user/lib/hocs/WithUserData.d.ts +2 -0
  18. package/dist/entities/user/lib/hocs/index.d.ts +3 -0
  19. package/dist/entities/user/lib/hooks/index.d.ts +1 -0
  20. package/dist/entities/user/lib/hooks/useAuthForm.d.ts +19 -0
  21. package/dist/entities/user/lib/index.d.ts +2 -0
  22. package/dist/entities/user/model/auth/auth.interface.d.ts +6 -0
  23. package/dist/entities/user/model/auth/auth.store.d.ts +24 -0
  24. package/dist/entities/user/model/auth/index.d.ts +2 -0
  25. package/dist/entities/user/model/index.d.ts +2 -0
  26. package/dist/entities/user/model/user/index.d.ts +1 -0
  27. package/dist/entities/user/model/user/user.store.d.ts +22 -0
  28. package/dist/entities/user/ui/AuthLayout/AuthLayout.d.ts +10 -0
  29. package/dist/entities/user/ui/InitialLoading/InitialLoading.d.ts +1 -0
  30. package/dist/entities/user/ui/index.d.ts +2 -0
  31. package/dist/esm/index.css +1 -0
  32. package/dist/esm/index.js +1 -0
  33. package/dist/features/LoginForm/index.d.ts +1 -0
  34. package/dist/features/LoginForm/ui/LoginForm.d.ts +2 -0
  35. package/dist/features/RegistrationForm/index.d.ts +1 -0
  36. package/dist/features/RegistrationForm/ui/RegistrationForm.d.ts +2 -0
  37. package/dist/index.d.ts +4 -0
  38. package/dist/shared/api/index.d.ts +2 -0
  39. package/dist/shared/api/interceptors.d.ts +2 -0
  40. package/dist/shared/api/services/auth/auth.interfaces.d.ts +21 -0
  41. package/dist/shared/api/services/auth/auth.mock-service.d.ts +2 -0
  42. package/dist/shared/api/services/auth/auth.service.d.ts +2 -0
  43. package/dist/shared/api/services/index.d.ts +8 -0
  44. package/dist/shared/api/services/mock/index.d.ts +2 -0
  45. package/dist/shared/api/services/mock/mock.d.ts +8 -0
  46. package/dist/shared/api/services/mock/stub/auth.stub.d.ts +2 -0
  47. package/dist/shared/api/services/mock/stub/index.d.ts +1 -0
  48. package/package.json +101 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2023 Stepasha419a
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1 @@
1
+ ._auth_4slza_1{width:100%;margin:0 auto;height:100%}._auth_4slza_1 ._container_4slza_6{width:100%;height:100%;display:flex;flex-wrap:wrap;justify-content:center;align-items:center;padding:15px;background:var(--color--purple-100);background:linear-gradient(-135deg,var(--color--purple-90),var(--color--yellow-60))}._auth_4slza_1 ._container_4slza_6 ._wrapper_4slza_17{width:960px;background:var(--bg-sub-primary);border-radius:10px;overflow:hidden;display:flex;align-items:center;justify-content:space-between;padding:50px 130px 40px 95px}._auth_4slza_1 ._container_4slza_6 ._wrapper_4slza_17 img{width:316px;height:316px;max-width:100%}._auth_4slza_1 ._container_4slza_6 ._wrapper_4slza_17 ._formWrapper_4slza_32{padding-top:100px}._auth_4slza_1 ._container_4slza_6 ._wrapper_4slza_17 ._formWrapper_4slza_32 ._title_4slza_35{font-weight:700;font-size:24px;color:var(--main-primary);line-height:1.2;text-align:center;width:100%;display:block;padding-bottom:54px}._auth_4slza_1 ._container_4slza_6 ._wrapper_4slza_17 ._formWrapper_4slza_32 ._validation_4slza_45{font-weight:600;font-size:15px;color:var(--danger-main)}._auth_4slza_1 ._container_4slza_6 ._wrapper_4slza_17 ._formWrapper_4slza_32 ._validation_4slza_45 ._error_4slza_50{max-width:290px;text-align:center;margin-bottom:10px}._auth_4slza_1 ._container_4slza_6 ._wrapper_4slza_17 ._formWrapper_4slza_32 ._navigate_4slza_55{text-align:center;padding-top:136px;font-size:12px}@media(max-height:750px){._auth_4slza_1 ._container_4slza_6 ._wrapper_4slza_17{width:700px;padding:50px 26px 40px 18px}._auth_4slza_1 ._container_4slza_6 ._wrapper_4slza_17 ._formWrapper_4slza_32{padding-top:0}._auth_4slza_1 ._container_4slza_6 ._wrapper_4slza_17 ._formWrapper_4slza_32 ._navigate_4slza_55{padding-top:50px}}@media(max-width:800px){._auth_4slza_1 ._container_4slza_6 ._wrapper_4slza_17{align-items:center;justify-content:center;padding:50px 26px 40px 18px}._auth_4slza_1 ._container_4slza_6 ._wrapper_4slza_17 img{display:none}}@media(max-width:700px){._auth_4slza_1 ._container_4slza_6 ._wrapper_4slza_17{width:350px}._auth_4slza_1 ._container_4slza_6 ._wrapper_4slza_17 ._formWrapper_4slza_32{padding-top:0}._auth_4slza_1 ._container_4slza_6 ._wrapper_4slza_17 ._formWrapper_4slza_32 ._navigate_4slza_55{padding-top:50px}}@media(max-width:400px){._auth_4slza_1 ._container_4slza_6 ._wrapper_4slza_17 ._formWrapper_4slza_32 ._title_4slza_35{font-weight:500;font-size:18px}._auth_4slza_1 ._container_4slza_6 ._wrapper_4slza_17 ._formWrapper_4slza_32 ._validation_4slza_45 ._error_4slza_50{font-size:13px}}._link_1o9kz_1{font-size:14px;line-height:1.5;color:var(--main-secondary);position:relative;padding:10px}._link_1o9kz_1 ._icon_1o9kz_8{position:absolute;top:13px;right:-10px}._form_1o9kz_14{width:290px}._form_1o9kz_14 ._inputWrapper_1o9kz_17{position:relative;margin-bottom:10px}._form_1o9kz_14 ._inputWrapper_1o9kz_17 ._input_1o9kz_17{width:100%;height:50px;z-index:1;color:var(--main-secondary);background:var(--bg-primary);padding:0 30px 0 68px}._form_1o9kz_14 ._inputWrapper_1o9kz_17 ._icon_1o9kz_8{font-size:16px;display:flex;align-items:center;position:absolute;border-radius:25px;bottom:18px;left:35px;pointer-events:none;color:var(--main-secondary)}._form_1o9kz_14 ._btn_1o9kz_40{font-weight:700;font-size:15px;color:var(--color--white-100);text-transform:uppercase;height:50px;background:var(--color--green-90);padding:0 25px;margin-top:10px;transition:all .4s}._form_1o9kz_14 ._btn_1o9kz_40._disabled_1o9kz_51{background:var(--bg-secondary)!important;cursor:not-allowed}@media(max-width:400px){._form_1o9kz_14{max-width:290px;width:100%}._form_1o9kz_14 ._inputWrapper_1o9kz_17 ._input_1o9kz_17{width:100%;height:40px;font-size:13px;padding:0 16px 0 40px}._form_1o9kz_14 ._inputWrapper_1o9kz_17 ._icon_1o9kz_8{bottom:12px;left:16px}._form_1o9kz_14 ._btn_1o9kz_40{height:40px;font-weight:500;font-size:13px}}
@@ -0,0 +1 @@
1
+ "use strict";var Dt=Object.create;var P=Object.defineProperty;var Xt=Object.getOwnPropertyDescriptor;var Gt=Object.getOwnPropertyNames;var Bt=Object.getPrototypeOf,qt=Object.prototype.hasOwnProperty;var Kt=(t,e)=>{for(var r in e)P(t,r,{get:e[r],enumerable:!0})},nt=(t,e,r,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let a of Gt(e))!qt.call(t,a)&&a!==r&&P(t,a,{get:()=>e[a],enumerable:!(o=Xt(e,a))||o.enumerable});return t};var Vt=(t,e,r)=>(r=t!=null?Dt(Bt(t)):{},nt(e||!t||!t.__esModule?P(r,"default",{value:t,enumerable:!0}):r,t)),jt=t=>nt(P({},"__esModule",{value:!0}),t);var Yt={};Kt(Yt,{AuthLayout:()=>T,AuthQueryKey:()=>v,InitialLoading:()=>W,LoginForm:()=>Nt,RegistrationForm:()=>Wt,UserQueryKey:()=>Y,WithAuthRedirect:()=>F,WithInitialLoading:()=>O,WithUserData:()=>ot,authResponseStub:()=>E,deleteTestUser:()=>K,getAuthService:()=>x,getMockableService:()=>q,getOrCreateService:()=>xt,getTestUser:()=>V,rejectWithAxiosResponseError:()=>B,resolveAxiosResponse:()=>S,saveTestUser:()=>M,setUpInterceptors:()=>$t,useAuthForm:()=>y,useAuthStore:()=>s,useGetCurrentUserQuery:()=>Z,useLoginMutation:()=>Q,useLogoutMutation:()=>Jt,useRefreshMutation:()=>J,useRegisterMutation:()=>$,useUserStore:()=>g});module.exports=jt(Yt);var _=require("@ducks-tinder-client/common");var It=require("react-hook-form"),p=require("@ducks-tinder-client/common");var v=(e=>(e.AuthMutation="auth-data-mutation",e))(v||{});var h={auth:"_auth_4slza_1",container:"_container_4slza_6",wrapper:"_wrapper_4slza_17",formWrapper:"_formWrapper_4slza_32",title:"_title_4slza_35",validation:"_validation_4slza_45",error:"_error_4slza_50",navigate:"_navigate_4slza_55"};var pt=require("@ducks-tinder-client/ui"),d=require("react/jsx-runtime"),T=({errors:t,title:e,children:r,link:o})=>(0,d.jsx)("div",{className:h.auth,children:(0,d.jsx)("div",{className:h.container,children:(0,d.jsxs)("div",{className:h.wrapper,children:[(0,d.jsx)("img",{draggable:!1,src:pt.authDuck,alt:"IMG"}),(0,d.jsxs)("div",{className:h.formWrapper,children:[(0,d.jsx)("span",{className:h.title,children:e}),(0,d.jsx)("div",{className:h.validation,children:Object.values(t).map((a,i)=>(0,d.jsx)("div",{className:h.error,children:a.message?.toString()},i))}),r,(0,d.jsx)("div",{className:h.navigate,children:o})]})]})})});var ct=require("@ducks-tinder-client/ui");var mt=require("zustand"),ut=require("zustand/middleware"),s=(0,mt.create)()((0,ut.devtools)(t=>({isAuth:null,authData:null,setIsAuth:e=>t(()=>({isAuth:e})),setAuthData:e=>t(()=>({authData:e}))})));var _t=require("zustand"),lt=require("zustand/middleware"),g=(0,_t.create)()((0,lt.devtools)(t=>({currentUser:null,setCurrentUser:e=>t(()=>({currentUser:e}))})));var dt=require("react/jsx-runtime"),W=()=>{let t=s(r=>r.isAuth),e=g(r=>r.currentUser);return(0,dt.jsx)(ct.LoadingPage,{visible:t===null&&e===null||t===!0&&e===null})};var At=require("@tanstack/react-query");var R=require("@ducks-tinder-client/common");async function S(t){return Promise.resolve({config:{},data:t,headers:{},status:200,statusText:""})}async function B(t,e){return Promise.reject({config:{},data:e,headers:{},status:t,statusText:""})}function q(t,e){return R.COMMON_LIB_SETTINGS.WITH_MOCKS?e:t}function M(t){localStorage.setItem("testUser",JSON.stringify(t))}function K(){localStorage.removeItem("testUser")}function V(){let t=localStorage.getItem("testUser");if(!t)return null;let e=JSON.parse(t);return Qt(e)?e:(localStorage.removeItem("testUser"),null)}function Qt(t){if(!t||typeof t!="object")return!1;for(let e in R.userStub)if(!(e in t))return!1;return Object.keys(R.userStub).length===Object.keys(t).length}var E={email:"email@gmail.com",accessToken:"token",id:"id",createdAt:new Date().toISOString(),updatedAt:new Date().toISOString()};var z=require("@ducks-tinder-client/common"),ft={async registration(t,e,r){return z.mockStorage.currentUser={...z.mockStorage.currentUser,name:e},M(z.mockStorage.currentUser),S({...E,...z.mockStorage.currentUser})},async login(t,e){return M(z.mockStorage.currentUser),S({...E,...z.mockStorage.currentUser})},async refresh(){let t=V();return t?(z.mockStorage.currentUser=t,S({...E,...t})):B(401)},async logout(){return K(),S()}};var f=require("@ducks-tinder-client/common"),ht=()=>q({async refresh(){return f.instance.get(`${f.COMMON_LIB_SETTINGS.AUTH_SERVICE_URL}/auth/refresh`)},async registration(t,e,r){return f.instance.post(`${f.COMMON_LIB_SETTINGS.AUTH_SERVICE_URL}/auth/register`,{email:t,name:e,password:r})},async login(t,e){return f.instance.post(`${f.COMMON_LIB_SETTINGS.AUTH_SERVICE_URL}/auth/login`,{email:t,password:e})},async logout(){return f.instance.patch(`${f.COMMON_LIB_SETTINGS.AUTH_SERVICE_URL}/auth/logout`)}},ft);var j={authService:null},xt=(t,e)=>(j[t]||(j[t]=e()),j[t]),x=()=>xt("authService",ht);var gt=Vt(require("axios")),zt=require("@ducks-tinder-client/common");function $t(t){t.interceptors.request.use(e=>(e.headers.Authorization="Bearer "+localStorage.getItem("accessToken"),e)),t.interceptors.response.use(e=>e,async e=>{let r=e.config;if(e.config?.url?.endsWith("/auth/refresh"))throw e;if(e.response?.status===401&&!e.config._isRetry){r._isRetry=!0;let o=await gt.default.get(`${zt.COMMON_LIB_SETTINGS.AUTH_SERVICE_URL}/auth/refresh`,{withCredentials:!0});return localStorage.setItem("accessToken",o.data.accessToken),t.request(r)}throw e})}var kt=require("@ducks-tinder-client/common"),vt=require("react-toastify");function Q(){let t=s(r=>r.setAuthData),e=s(r=>r.setIsAuth);return(0,At.useMutation)({mutationKey:["auth-data-mutation"],mutationFn:async({email:r,password:o})=>x().login(r,o),onError:r=>{t(null),e(!1),(0,vt.toast)((0,kt.returnErrorMessage)(r),{autoClose:15e3})},onSuccess:r=>{let{accessToken:o,...a}=r.data;localStorage.setItem("accessToken",o),t(a),e(!0)}})}var Tt=require("@tanstack/react-query");var St=require("@ducks-tinder-client/common"),yt=require("react-toastify");function $(){let t=s(r=>r.setAuthData),e=s(r=>r.setIsAuth);return(0,Tt.useMutation)({mutationKey:["auth-data-mutation"],mutationFn:async({email:r,password:o,name:a})=>x().registration(r,a,o),onError:r=>{t(null),e(!1),(0,yt.toast)((0,St.returnErrorMessage)(r),{autoClose:15e3})},onSuccess:r=>{let{accessToken:o,...a}=r.data;localStorage.setItem("accessToken",o),t(a),e(!0)}})}var bt=require("@tanstack/react-query");function J(){let t=s(r=>r.setAuthData),e=s(r=>r.setIsAuth);return(0,bt.useMutation)({mutationKey:["auth-data-mutation"],mutationFn:async()=>x().refresh(),onError:()=>{t(null),e(!1)},onSuccess:r=>{let{accessToken:o,...a}=r.data;localStorage.setItem("accessToken",o),t(a),e(!0)}})}var wt=require("@tanstack/react-query");function Jt(){let t=s(o=>o.setAuthData),e=s(o=>o.setIsAuth),r=g(o=>o.setCurrentUser);return(0,wt.useMutation)({mutationKey:["auth-data-mutation"],mutationFn:async()=>(localStorage.removeItem("accessToken"),t(null),e(!1),r(null),x().logout())})}var Y=(e=>(e.User="user",e))(Y||{});var Rt=require("@tanstack/react-query");var Et=require("@ducks-tinder-client/common");function Z(){return(0,Rt.useQuery)({queryKey:["user"],queryFn:async()=>Et.serviceGetter.getUserService().getMe(),select:t=>t.data,retryDelay:2e3})}function y(t){let{mutateAsync:e,isPending:r}=Q(),{mutateAsync:o,isPending:a}=$(),i=r||a,{register:c,formState:{errors:N,isValid:G},handleSubmit:Mt}=(0,It.useForm)({mode:"onChange"}),Ft=Mt(async it=>{t?await o(it):await e(it)}),Ot={type:"text",placeholder:p.COMMON_LIB_SETTINGS.TEXTS.auth.email,...c("email",{required:p.COMMON_LIB_SETTINGS.TEXTS.auth.emailRequired,pattern:{value:p.EMAIL_REGEXP,message:p.COMMON_LIB_SETTINGS.TEXTS.auth.emailIncorrect},maxLength:{value:30,message:p.COMMON_LIB_SETTINGS.TEXTS.auth.getEmailLengthMax(30)}})},Ht={type:"password",placeholder:p.COMMON_LIB_SETTINGS.TEXTS.auth.password,...c("password",{required:p.COMMON_LIB_SETTINGS.TEXTS.auth.passwordRequired,minLength:{value:6,message:p.COMMON_LIB_SETTINGS.TEXTS.auth.getPasswordLengthMin(6)},maxLength:{value:30,message:p.COMMON_LIB_SETTINGS.TEXTS.auth.getPasswordLengthMax(30)}})},st={fields:{email:Ot,password:Ht},validation:{errors:N,isValid:G},submitHandler:Ft,disabled:i};return t&&(st.fields.name={type:"text",placeholder:p.COMMON_LIB_SETTINGS.TEXTS.auth.name,...c("name",{required:p.COMMON_LIB_SETTINGS.TEXTS.auth.nameRequired,minLength:{value:2,message:p.COMMON_LIB_SETTINGS.TEXTS.auth.getNameLengthMin(2)},maxLength:{value:14,message:p.COMMON_LIB_SETTINGS.TEXTS.auth.getNameLengthMax(14)}})}),st}var tt=require("@ducks-tinder-client/common");var et=require("react"),rt=require("react-toastify"),Ut=require("react/jsx-runtime"),ot=t=>r=>{let{data:o,failureCount:a,isError:i,isLoading:c}=Z(),N=g(G=>G.setCurrentUser);return(0,et.useEffect)(()=>{N(o||null)},[o,N]),(0,et.useEffect)(()=>{i&&!o?(0,rt.toast)(tt.COMMON_LIB_SETTINGS.TEXTS.reconnection):a>=1&&(0,rt.toast)(tt.COMMON_LIB_SETTINGS.TEXTS.successConnect)},[o,a,i,c]),!c&&o?(0,Ut.jsx)(t,{...r}):null};var Ct=require("react"),U=require("react-router-dom"),at=require("@ducks-tinder-client/common");var I=require("react/jsx-runtime"),F=t=>r=>{let{pathname:o}=(0,U.useLocation)(),{mutateAsync:a}=J(),i=s(c=>c.isAuth);return(0,Ct.useEffect)(()=>{i===null&&a()},[i,a]),o===at.ROUTES.LOGIN||o===at.ROUTES.REGISTRATION?i?(0,I.jsx)(U.Navigate,{to:"/"}):(0,I.jsx)(t,{...r}):i===!1?(0,I.jsx)(U.Navigate,{to:"/login",replace:!0}):i?(0,I.jsx)(t,{...r}):null};var k=require("react/jsx-runtime"),O=t=>r=>(0,k.jsxs)(k.Fragment,{children:[(0,k.jsx)(W,{}),(0,k.jsx)(t,{...r})]});var Lt=require("react-router-dom"),b=require("@fortawesome/free-solid-svg-icons"),H=require("@fortawesome/react-fontawesome");var l={link:"_link_1o9kz_1",icon:"_icon_1o9kz_8",form:"_form_1o9kz_14",inputWrapper:"_inputWrapper_1o9kz_17",input:"_input_1o9kz_17",btn:"_btn_1o9kz_40",disabled:"_disabled_1o9kz_51"};var C=require("@ducks-tinder-client/ui"),D=require("@ducks-tinder-client/common"),u=require("react/jsx-runtime"),Nt=()=>{let{fields:{email:t,password:e},validation:{errors:r,isValid:o},submitHandler:a,disabled:i}=y();return(0,u.jsx)(T,{errors:r,title:D.COMMON_LIB_SETTINGS.TEXTS.auth.memberLogin,link:(0,u.jsxs)(Lt.Link,{className:l.link,to:"/reg",children:[D.COMMON_LIB_SETTINGS.TEXTS.auth.create,(0,u.jsx)(H.FontAwesomeIcon,{className:l.icon,icon:b.faArrowRightLong})]}),children:(0,u.jsxs)("form",{onSubmit:a,className:l.form,children:[(0,u.jsxs)("div",{className:l.inputWrapper,children:[(0,u.jsx)(C.TextField,{...t,variant:"rounded",extraClassName:l.input}),(0,u.jsx)(H.FontAwesomeIcon,{className:l.icon,icon:b.faEnvelope})]}),(0,u.jsxs)("div",{className:l.inputWrapper,children:[(0,u.jsx)(C.TextField,{...e,variant:"rounded",extraClassName:l.input}),(0,u.jsx)(H.FontAwesomeIcon,{className:l.icon,icon:b.faLock})]}),(0,u.jsx)(C.Button,{type:"submit",rounded:!0,disabled:!o||i,extraClassName:[l.btn,o&&!i?"":l.disabled],children:D.COMMON_LIB_SETTINGS.TEXTS.auth.login})]})})};var Pt=require("react-router-dom"),A=require("@fortawesome/free-solid-svg-icons"),L=require("@fortawesome/react-fontawesome");var m={link:"_link_1o9kz_1",icon:"_icon_1o9kz_8",form:"_form_1o9kz_14",inputWrapper:"_inputWrapper_1o9kz_17",input:"_input_1o9kz_17",btn:"_btn_1o9kz_40",disabled:"_disabled_1o9kz_51"};var w=require("@ducks-tinder-client/ui"),X=require("@ducks-tinder-client/common"),n=require("react/jsx-runtime"),Wt=()=>{let{fields:{name:t,email:e,password:r},validation:{errors:o,isValid:a},submitHandler:i,disabled:c}=y(!0);return(0,n.jsx)(T,{errors:o,title:X.COMMON_LIB_SETTINGS.TEXTS.auth.memberSignUp,link:(0,n.jsxs)(Pt.Link,{className:m.link,to:"/login",children:[X.COMMON_LIB_SETTINGS.TEXTS.auth.loginAccount,(0,n.jsx)(L.FontAwesomeIcon,{className:m.icon,icon:A.faArrowRightLong})]}),children:(0,n.jsxs)("form",{onSubmit:i,className:m.form,children:[(0,n.jsxs)("div",{className:m.inputWrapper,children:[(0,n.jsx)(w.TextField,{...t,extraClassName:m.input,variant:"rounded"}),(0,n.jsx)(L.FontAwesomeIcon,{className:m.icon,icon:A.faFileText})]}),(0,n.jsxs)("div",{className:m.inputWrapper,children:[(0,n.jsx)(w.TextField,{...e,variant:"rounded",extraClassName:m.input}),(0,n.jsx)(L.FontAwesomeIcon,{className:m.icon,icon:A.faEnvelope})]}),(0,n.jsxs)("div",{className:m.inputWrapper,children:[(0,n.jsx)(w.TextField,{...r,variant:"rounded",extraClassName:m.input}),(0,n.jsx)(L.FontAwesomeIcon,{className:m.icon,icon:A.faLock})]}),(0,n.jsx)(w.Button,{type:"submit",rounded:!0,disabled:!a||c,extraClassName:[m.btn,a&&!c?"":m.disabled],children:X.COMMON_LIB_SETTINGS.TEXTS.auth.signUp})]})})};_.APP_PRIVATE_HOC_COMPOSITION.addHocs(_.HocCompositionStage.BOOTSTRAPPING,[O]);_.APP_PRIVATE_HOC_COMPOSITION.addHocs(_.HocCompositionStage.AUTH_CHECK,[F]);_.APP_PRIVATE_HOC_COMPOSITION.addHocs(_.HocCompositionStage.USER_HYDRATION,[ot]);_.APP_AUTH_HOC_COMPOSITION.addHocs(_.HocCompositionStage.BOOTSTRAPPING,[O]);_.APP_AUTH_HOC_COMPOSITION.addHocs(_.HocCompositionStage.AUTH_CHECK,[F]);
@@ -0,0 +1,5 @@
1
+ export * from './keys';
2
+ export * from './useLoginMutation';
3
+ export * from './useRegisterMutation';
4
+ export * from './useRefreshMutation';
5
+ export * from './useLogoutMutation';
@@ -0,0 +1,3 @@
1
+ export declare enum AuthQueryKey {
2
+ AuthMutation = "auth-data-mutation"
3
+ }
@@ -0,0 +1,2 @@
1
+ import type { LoginParams } from '../../../../shared/api';
2
+ export declare function useLoginMutation(): import("@tanstack/react-query").UseMutationResult<import("axios").AxiosResponse<import("../../../../shared/api").AuthResponse, any>, unknown, LoginParams, unknown>;
@@ -0,0 +1 @@
1
+ export declare function useLogoutMutation(): import("@tanstack/react-query").UseMutationResult<import("axios").AxiosResponse<boolean, any>, Error, void, unknown>;
@@ -0,0 +1 @@
1
+ export declare function useRefreshMutation(): import("@tanstack/react-query").UseMutationResult<import("axios").AxiosResponse<import("../../../../shared/api").AuthResponse, any>, Error, void, unknown>;
@@ -0,0 +1,2 @@
1
+ import type { RegistrationParams } from '../../../../shared/api';
2
+ export declare function useRegisterMutation(): import("@tanstack/react-query").UseMutationResult<import("axios").AxiosResponse<import("../../../../shared/api").AuthResponse, any>, unknown, RegistrationParams, unknown>;
@@ -0,0 +1,2 @@
1
+ export * from './auth';
2
+ export * from './user';
@@ -0,0 +1,2 @@
1
+ export * from './keys';
2
+ export * from './useGetCurrentUserQuery';
@@ -0,0 +1,3 @@
1
+ export declare enum UserQueryKey {
2
+ User = "user"
3
+ }
@@ -0,0 +1 @@
1
+ export declare function useGetCurrentUserQuery(): import("@tanstack/react-query").UseQueryResult<import("@ducks-tinder-client/common").User, Error>;
@@ -0,0 +1,4 @@
1
+ export * from './ui';
2
+ export * from './lib';
3
+ export * from './model';
4
+ export * from './api';
@@ -0,0 +1,2 @@
1
+ import type { ComponentType, FC } from 'react';
2
+ export declare const WithAuthRedirect: <P extends object>(Component: ComponentType<P>) => FC<P>;
@@ -0,0 +1,2 @@
1
+ import type { ComponentType, FC } from 'react';
2
+ export declare const WithInitialLoading: <P extends object>(Component: ComponentType<P>) => FC<P>;
@@ -0,0 +1,2 @@
1
+ import type { ComponentType, FC } from 'react';
2
+ export declare const WithUserData: <P extends object>(Component: ComponentType<P>) => FC<P>;
@@ -0,0 +1,3 @@
1
+ export * from './WithUserData';
2
+ export * from './WithAuthRedirect';
3
+ export * from './WithInitialLoading';
@@ -0,0 +1 @@
1
+ export { useAuthForm } from './useAuthForm';
@@ -0,0 +1,19 @@
1
+ import type { SubmitEventHandler } from 'react';
2
+ import type { FieldErrors } from 'react-hook-form';
3
+ import type { RegistrationParams } from '@ducks-tinder-client/common';
4
+ import type { TextFieldProps } from '@ducks-tinder-client/ui';
5
+ interface AuthFormReturn {
6
+ fields: {
7
+ email: TextFieldProps;
8
+ password: TextFieldProps;
9
+ name?: TextFieldProps;
10
+ };
11
+ validation: {
12
+ errors: FieldErrors<RegistrationParams>;
13
+ isValid: boolean;
14
+ };
15
+ submitHandler: SubmitEventHandler<HTMLFormElement>;
16
+ disabled: boolean;
17
+ }
18
+ export declare function useAuthForm(isRegisterForm?: boolean): AuthFormReturn;
19
+ export {};
@@ -0,0 +1,2 @@
1
+ export * from './hooks';
2
+ export * from './hocs';
@@ -0,0 +1,6 @@
1
+ export interface AuthData {
2
+ id: string;
3
+ email: string;
4
+ createdAt: string;
5
+ updatedAt: string;
6
+ }
@@ -0,0 +1,24 @@
1
+ import type { AuthData } from './auth.interface';
2
+ export interface AuthState {
3
+ authData: AuthData | null;
4
+ isAuth: boolean | null;
5
+ setIsAuth: (value: boolean) => void;
6
+ setAuthData: (value: AuthData | null) => void;
7
+ }
8
+ export declare const useAuthStore: import("zustand").UseBoundStore<Omit<import("zustand").StoreApi<AuthState>, "setState" | "devtools"> & {
9
+ setState(partial: AuthState | Partial<AuthState> | ((state: AuthState) => AuthState | Partial<AuthState>), replace?: false | undefined, action?: (string | {
10
+ [x: string]: unknown;
11
+ [x: number]: unknown;
12
+ [x: symbol]: unknown;
13
+ type: string;
14
+ }) | undefined): void;
15
+ setState(state: AuthState | ((state: AuthState) => AuthState), replace: true, action?: (string | {
16
+ [x: string]: unknown;
17
+ [x: number]: unknown;
18
+ [x: symbol]: unknown;
19
+ type: string;
20
+ }) | undefined): void;
21
+ devtools: {
22
+ cleanup: () => void;
23
+ };
24
+ }>;
@@ -0,0 +1,2 @@
1
+ export { useAuthStore } from './auth.store';
2
+ export type { AuthData } from './auth.interface';
@@ -0,0 +1,2 @@
1
+ export * from './auth';
2
+ export * from './user';
@@ -0,0 +1 @@
1
+ export { useUserStore } from './user.store';
@@ -0,0 +1,22 @@
1
+ import type { User } from '@ducks-tinder-client/common';
2
+ export interface UserState {
3
+ currentUser: User | null;
4
+ setCurrentUser: (value: User | null) => void;
5
+ }
6
+ export declare const useUserStore: import("zustand").UseBoundStore<Omit<import("zustand").StoreApi<UserState>, "setState" | "devtools"> & {
7
+ setState(partial: UserState | Partial<UserState> | ((state: UserState) => UserState | Partial<UserState>), replace?: false | undefined, action?: (string | {
8
+ [x: string]: unknown;
9
+ [x: number]: unknown;
10
+ [x: symbol]: unknown;
11
+ type: string;
12
+ }) | undefined): void;
13
+ setState(state: UserState | ((state: UserState) => UserState), replace: true, action?: (string | {
14
+ [x: string]: unknown;
15
+ [x: number]: unknown;
16
+ [x: symbol]: unknown;
17
+ type: string;
18
+ }) | undefined): void;
19
+ devtools: {
20
+ cleanup: () => void;
21
+ };
22
+ }>;
@@ -0,0 +1,10 @@
1
+ import type { FC, PropsWithChildren, ReactNode } from 'react';
2
+ import type { FieldErrors } from 'react-hook-form';
3
+ import type { RegistrationParams } from '@ducks-tinder-client/common';
4
+ interface AuthLayoutProps {
5
+ errors: FieldErrors<RegistrationParams>;
6
+ title: string;
7
+ link: ReactNode;
8
+ }
9
+ export declare const AuthLayout: FC<PropsWithChildren<AuthLayoutProps>>;
10
+ export {};
@@ -0,0 +1 @@
1
+ export declare const InitialLoading: () => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,2 @@
1
+ export { AuthLayout } from './AuthLayout/AuthLayout';
2
+ export { InitialLoading } from './InitialLoading/InitialLoading';
@@ -0,0 +1 @@
1
+ ._auth_4slza_1{width:100%;margin:0 auto;height:100%}._auth_4slza_1 ._container_4slza_6{width:100%;height:100%;display:flex;flex-wrap:wrap;justify-content:center;align-items:center;padding:15px;background:var(--color--purple-100);background:linear-gradient(-135deg,var(--color--purple-90),var(--color--yellow-60))}._auth_4slza_1 ._container_4slza_6 ._wrapper_4slza_17{width:960px;background:var(--bg-sub-primary);border-radius:10px;overflow:hidden;display:flex;align-items:center;justify-content:space-between;padding:50px 130px 40px 95px}._auth_4slza_1 ._container_4slza_6 ._wrapper_4slza_17 img{width:316px;height:316px;max-width:100%}._auth_4slza_1 ._container_4slza_6 ._wrapper_4slza_17 ._formWrapper_4slza_32{padding-top:100px}._auth_4slza_1 ._container_4slza_6 ._wrapper_4slza_17 ._formWrapper_4slza_32 ._title_4slza_35{font-weight:700;font-size:24px;color:var(--main-primary);line-height:1.2;text-align:center;width:100%;display:block;padding-bottom:54px}._auth_4slza_1 ._container_4slza_6 ._wrapper_4slza_17 ._formWrapper_4slza_32 ._validation_4slza_45{font-weight:600;font-size:15px;color:var(--danger-main)}._auth_4slza_1 ._container_4slza_6 ._wrapper_4slza_17 ._formWrapper_4slza_32 ._validation_4slza_45 ._error_4slza_50{max-width:290px;text-align:center;margin-bottom:10px}._auth_4slza_1 ._container_4slza_6 ._wrapper_4slza_17 ._formWrapper_4slza_32 ._navigate_4slza_55{text-align:center;padding-top:136px;font-size:12px}@media(max-height:750px){._auth_4slza_1 ._container_4slza_6 ._wrapper_4slza_17{width:700px;padding:50px 26px 40px 18px}._auth_4slza_1 ._container_4slza_6 ._wrapper_4slza_17 ._formWrapper_4slza_32{padding-top:0}._auth_4slza_1 ._container_4slza_6 ._wrapper_4slza_17 ._formWrapper_4slza_32 ._navigate_4slza_55{padding-top:50px}}@media(max-width:800px){._auth_4slza_1 ._container_4slza_6 ._wrapper_4slza_17{align-items:center;justify-content:center;padding:50px 26px 40px 18px}._auth_4slza_1 ._container_4slza_6 ._wrapper_4slza_17 img{display:none}}@media(max-width:700px){._auth_4slza_1 ._container_4slza_6 ._wrapper_4slza_17{width:350px}._auth_4slza_1 ._container_4slza_6 ._wrapper_4slza_17 ._formWrapper_4slza_32{padding-top:0}._auth_4slza_1 ._container_4slza_6 ._wrapper_4slza_17 ._formWrapper_4slza_32 ._navigate_4slza_55{padding-top:50px}}@media(max-width:400px){._auth_4slza_1 ._container_4slza_6 ._wrapper_4slza_17 ._formWrapper_4slza_32 ._title_4slza_35{font-weight:500;font-size:18px}._auth_4slza_1 ._container_4slza_6 ._wrapper_4slza_17 ._formWrapper_4slza_32 ._validation_4slza_45 ._error_4slza_50{font-size:13px}}._link_1o9kz_1{font-size:14px;line-height:1.5;color:var(--main-secondary);position:relative;padding:10px}._link_1o9kz_1 ._icon_1o9kz_8{position:absolute;top:13px;right:-10px}._form_1o9kz_14{width:290px}._form_1o9kz_14 ._inputWrapper_1o9kz_17{position:relative;margin-bottom:10px}._form_1o9kz_14 ._inputWrapper_1o9kz_17 ._input_1o9kz_17{width:100%;height:50px;z-index:1;color:var(--main-secondary);background:var(--bg-primary);padding:0 30px 0 68px}._form_1o9kz_14 ._inputWrapper_1o9kz_17 ._icon_1o9kz_8{font-size:16px;display:flex;align-items:center;position:absolute;border-radius:25px;bottom:18px;left:35px;pointer-events:none;color:var(--main-secondary)}._form_1o9kz_14 ._btn_1o9kz_40{font-weight:700;font-size:15px;color:var(--color--white-100);text-transform:uppercase;height:50px;background:var(--color--green-90);padding:0 25px;margin-top:10px;transition:all .4s}._form_1o9kz_14 ._btn_1o9kz_40._disabled_1o9kz_51{background:var(--bg-secondary)!important;cursor:not-allowed}@media(max-width:400px){._form_1o9kz_14{max-width:290px;width:100%}._form_1o9kz_14 ._inputWrapper_1o9kz_17 ._input_1o9kz_17{width:100%;height:40px;font-size:13px;padding:0 16px 0 40px}._form_1o9kz_14 ._inputWrapper_1o9kz_17 ._icon_1o9kz_8{bottom:12px;left:16px}._form_1o9kz_14 ._btn_1o9kz_40{height:40px;font-weight:500;font-size:13px}}
@@ -0,0 +1 @@
1
+ import{APP_AUTH_HOC_COMPOSITION as _t,APP_PRIVATE_HOC_COMPOSITION as D,HocCompositionStage as T}from"@ducks-tinder-client/common";import{useForm as Ft}from"react-hook-form";import{COMMON_LIB_SETTINGS as p,EMAIL_REGEXP as Ot}from"@ducks-tinder-client/common";var g=(e=>(e.AuthMutation="auth-data-mutation",e))(g||{});var _={auth:"_auth_4slza_1",container:"_container_4slza_6",wrapper:"_wrapper_4slza_17",formWrapper:"_formWrapper_4slza_32",title:"_title_4slza_35",validation:"_validation_4slza_45",error:"_error_4slza_50",navigate:"_navigate_4slza_55"};import{authDuck as ht}from"@ducks-tinder-client/ui";import{jsx as d,jsxs as B}from"react/jsx-runtime";var z=({errors:t,title:e,children:r,link:o})=>d("div",{className:_.auth,children:d("div",{className:_.container,children:B("div",{className:_.wrapper,children:[d("img",{draggable:!1,src:ht,alt:"IMG"}),B("div",{className:_.formWrapper,children:[d("span",{className:_.title,children:e}),d("div",{className:_.validation,children:Object.values(t).map((a,s)=>d("div",{className:_.error,children:a.message?.toString()},s))}),r,d("div",{className:_.navigate,children:o})]})]})})});import{LoadingPage as kt}from"@ducks-tinder-client/ui";import{create as xt}from"zustand";import{devtools as gt}from"zustand/middleware";var i=xt()(gt(t=>({isAuth:null,authData:null,setIsAuth:e=>t(()=>({isAuth:e})),setAuthData:e=>t(()=>({authData:e}))})));import{create as zt}from"zustand";import{devtools as At}from"zustand/middleware";var f=zt()(At(t=>({currentUser:null,setCurrentUser:e=>t(()=>({currentUser:e}))})));import{jsx as vt}from"react/jsx-runtime";var C=()=>{let t=i(r=>r.isAuth),e=f(r=>r.currentUser);return vt(kt,{visible:t===null&&e===null||t===!0&&e===null})};import{useMutation as Rt}from"@tanstack/react-query";import{COMMON_LIB_SETTINGS as Tt,userStub as q}from"@ducks-tinder-client/common";async function A(t){return Promise.resolve({config:{},data:t,headers:{},status:200,statusText:""})}async function K(t,e){return Promise.reject({config:{},data:e,headers:{},status:t,statusText:""})}function V(t,e){return Tt.WITH_MOCKS?e:t}function L(t){localStorage.setItem("testUser",JSON.stringify(t))}function j(){localStorage.removeItem("testUser")}function Q(){let t=localStorage.getItem("testUser");if(!t)return null;let e=JSON.parse(t);return St(e)?e:(localStorage.removeItem("testUser"),null)}function St(t){if(!t||typeof t!="object")return!1;for(let e in q)if(!(e in t))return!1;return Object.keys(q).length===Object.keys(t).length}var y={email:"email@gmail.com",accessToken:"token",id:"id",createdAt:new Date().toISOString(),updatedAt:new Date().toISOString()};import{mockStorage as h}from"@ducks-tinder-client/common";var $={async registration(t,e,r){return h.currentUser={...h.currentUser,name:e},L(h.currentUser),A({...y,...h.currentUser})},async login(t,e){return L(h.currentUser),A({...y,...h.currentUser})},async refresh(){let t=Q();return t?(h.currentUser=t,A({...y,...t})):K(401)},async logout(){return j(),A()}};import{COMMON_LIB_SETTINGS as b,instance as w}from"@ducks-tinder-client/common";var J=()=>V({async refresh(){return w.get(`${b.AUTH_SERVICE_URL}/auth/refresh`)},async registration(t,e,r){return w.post(`${b.AUTH_SERVICE_URL}/auth/register`,{email:t,name:e,password:r})},async login(t,e){return w.post(`${b.AUTH_SERVICE_URL}/auth/login`,{email:t,password:e})},async logout(){return w.patch(`${b.AUTH_SERVICE_URL}/auth/logout`)}},$);var N={authService:null},yt=(t,e)=>(N[t]||(N[t]=e()),N[t]),c=()=>yt("authService",J);import bt from"axios";import{COMMON_LIB_SETTINGS as wt}from"@ducks-tinder-client/common";function ir(t){t.interceptors.request.use(e=>(e.headers.Authorization="Bearer "+localStorage.getItem("accessToken"),e)),t.interceptors.response.use(e=>e,async e=>{let r=e.config;if(e.config?.url?.endsWith("/auth/refresh"))throw e;if(e.response?.status===401&&!e.config._isRetry){r._isRetry=!0;let o=await bt.get(`${wt.AUTH_SERVICE_URL}/auth/refresh`,{withCredentials:!0});return localStorage.setItem("accessToken",o.data.accessToken),t.request(r)}throw e})}import{returnErrorMessage as Et}from"@ducks-tinder-client/common";import{toast as It}from"react-toastify";function Y(){let t=i(r=>r.setAuthData),e=i(r=>r.setIsAuth);return Rt({mutationKey:["auth-data-mutation"],mutationFn:async({email:r,password:o})=>c().login(r,o),onError:r=>{t(null),e(!1),It(Et(r),{autoClose:15e3})},onSuccess:r=>{let{accessToken:o,...a}=r.data;localStorage.setItem("accessToken",o),t(a),e(!0)}})}import{useMutation as Ut}from"@tanstack/react-query";import{returnErrorMessage as Ct}from"@ducks-tinder-client/common";import{toast as Lt}from"react-toastify";function Z(){let t=i(r=>r.setAuthData),e=i(r=>r.setIsAuth);return Ut({mutationKey:["auth-data-mutation"],mutationFn:async({email:r,password:o,name:a})=>c().registration(r,a,o),onError:r=>{t(null),e(!1),Lt(Ct(r),{autoClose:15e3})},onSuccess:r=>{let{accessToken:o,...a}=r.data;localStorage.setItem("accessToken",o),t(a),e(!0)}})}import{useMutation as Nt}from"@tanstack/react-query";function tt(){let t=i(r=>r.setAuthData),e=i(r=>r.setIsAuth);return Nt({mutationKey:["auth-data-mutation"],mutationFn:async()=>c().refresh(),onError:()=>{t(null),e(!1)},onSuccess:r=>{let{accessToken:o,...a}=r.data;localStorage.setItem("accessToken",o),t(a),e(!0)}})}import{useMutation as Pt}from"@tanstack/react-query";function Pr(){let t=i(o=>o.setAuthData),e=i(o=>o.setIsAuth),r=f(o=>o.setCurrentUser);return Pt({mutationKey:["auth-data-mutation"],mutationFn:async()=>(localStorage.removeItem("accessToken"),t(null),e(!1),r(null),c().logout())})}var et=(e=>(e.User="user",e))(et||{});import{useQuery as Wt}from"@tanstack/react-query";import{serviceGetter as Mt}from"@ducks-tinder-client/common";function rt(){return Wt({queryKey:["user"],queryFn:async()=>Mt.getUserService().getMe(),select:t=>t.data,retryDelay:2e3})}function k(t){let{mutateAsync:e,isPending:r}=Y(),{mutateAsync:o,isPending:a}=Z(),s=r||a,{register:u,formState:{errors:S,isValid:U},handleSubmit:lt}=Ft({mode:"onChange"}),ct=lt(async G=>{t?await o(G):await e(G)}),dt={type:"text",placeholder:p.TEXTS.auth.email,...u("email",{required:p.TEXTS.auth.emailRequired,pattern:{value:Ot,message:p.TEXTS.auth.emailIncorrect},maxLength:{value:30,message:p.TEXTS.auth.getEmailLengthMax(30)}})},ft={type:"password",placeholder:p.TEXTS.auth.password,...u("password",{required:p.TEXTS.auth.passwordRequired,minLength:{value:6,message:p.TEXTS.auth.getPasswordLengthMin(6)},maxLength:{value:30,message:p.TEXTS.auth.getPasswordLengthMax(30)}})},X={fields:{email:dt,password:ft},validation:{errors:S,isValid:U},submitHandler:ct,disabled:s};return t&&(X.fields.name={type:"text",placeholder:p.TEXTS.auth.name,...u("name",{required:p.TEXTS.auth.nameRequired,minLength:{value:2,message:p.TEXTS.auth.getNameLengthMin(2)},maxLength:{value:14,message:p.TEXTS.auth.getNameLengthMax(14)}})}),X}import{COMMON_LIB_SETTINGS as ot}from"@ducks-tinder-client/common";import{useEffect as at}from"react";import{toast as st}from"react-toastify";import{jsx as Ht}from"react/jsx-runtime";var it=t=>r=>{let{data:o,failureCount:a,isError:s,isLoading:u}=rt(),S=f(U=>U.setCurrentUser);return at(()=>{S(o||null)},[o,S]),at(()=>{s&&!o?st(ot.TEXTS.reconnection):a>=1&&st(ot.TEXTS.successConnect)},[o,a,s,u]),!u&&o?Ht(t,{...r}):null};import{useEffect as Dt}from"react";import{Navigate as nt,useLocation as Xt}from"react-router-dom";import{ROUTES as pt}from"@ducks-tinder-client/common";import{jsx as R}from"react/jsx-runtime";var P=t=>r=>{let{pathname:o}=Xt(),{mutateAsync:a}=tt(),s=i(u=>u.isAuth);return Dt(()=>{s===null&&a()},[s,a]),o===pt.LOGIN||o===pt.REGISTRATION?s?R(nt,{to:"/"}):R(t,{...r}):s===!1?R(nt,{to:"/login",replace:!0}):s?R(t,{...r}):null};import{Fragment as Gt,jsx as mt,jsxs as Bt}from"react/jsx-runtime";var W=t=>r=>Bt(Gt,{children:[mt(C,{}),mt(t,{...r})]});import{Link as qt}from"react-router-dom";import{faArrowRightLong as Kt,faEnvelope as Vt,faLock as jt}from"@fortawesome/free-solid-svg-icons";import{FontAwesomeIcon as M}from"@fortawesome/react-fontawesome";var m={link:"_link_1o9kz_1",icon:"_icon_1o9kz_8",form:"_form_1o9kz_14",inputWrapper:"_inputWrapper_1o9kz_17",input:"_input_1o9kz_17",btn:"_btn_1o9kz_40",disabled:"_disabled_1o9kz_51"};import{Button as Qt,TextField as ut}from"@ducks-tinder-client/ui";import{COMMON_LIB_SETTINGS as F}from"@ducks-tinder-client/common";import{jsx as x,jsxs as E}from"react/jsx-runtime";var $t=()=>{let{fields:{email:t,password:e},validation:{errors:r,isValid:o},submitHandler:a,disabled:s}=k();return x(z,{errors:r,title:F.TEXTS.auth.memberLogin,link:E(qt,{className:m.link,to:"/reg",children:[F.TEXTS.auth.create,x(M,{className:m.icon,icon:Kt})]}),children:E("form",{onSubmit:a,className:m.form,children:[E("div",{className:m.inputWrapper,children:[x(ut,{...t,variant:"rounded",extraClassName:m.input}),x(M,{className:m.icon,icon:Vt})]}),E("div",{className:m.inputWrapper,children:[x(ut,{...e,variant:"rounded",extraClassName:m.input}),x(M,{className:m.icon,icon:jt})]}),x(Qt,{type:"submit",rounded:!0,disabled:!o||s,extraClassName:[m.btn,o&&!s?"":m.disabled],children:F.TEXTS.auth.login})]})})};import{Link as Jt}from"react-router-dom";import{faArrowRightLong as Yt,faEnvelope as Zt,faFileText as te,faLock as ee}from"@fortawesome/free-solid-svg-icons";import{FontAwesomeIcon as I}from"@fortawesome/react-fontawesome";var n={link:"_link_1o9kz_1",icon:"_icon_1o9kz_8",form:"_form_1o9kz_14",inputWrapper:"_inputWrapper_1o9kz_17",input:"_input_1o9kz_17",btn:"_btn_1o9kz_40",disabled:"_disabled_1o9kz_51"};import{Button as re,TextField as O}from"@ducks-tinder-client/ui";import{COMMON_LIB_SETTINGS as H}from"@ducks-tinder-client/common";import{jsx as l,jsxs as v}from"react/jsx-runtime";var oe=()=>{let{fields:{name:t,email:e,password:r},validation:{errors:o,isValid:a},submitHandler:s,disabled:u}=k(!0);return l(z,{errors:o,title:H.TEXTS.auth.memberSignUp,link:v(Jt,{className:n.link,to:"/login",children:[H.TEXTS.auth.loginAccount,l(I,{className:n.icon,icon:Yt})]}),children:v("form",{onSubmit:s,className:n.form,children:[v("div",{className:n.inputWrapper,children:[l(O,{...t,extraClassName:n.input,variant:"rounded"}),l(I,{className:n.icon,icon:te})]}),v("div",{className:n.inputWrapper,children:[l(O,{...e,variant:"rounded",extraClassName:n.input}),l(I,{className:n.icon,icon:Zt})]}),v("div",{className:n.inputWrapper,children:[l(O,{...r,variant:"rounded",extraClassName:n.input}),l(I,{className:n.icon,icon:ee})]}),l(re,{type:"submit",rounded:!0,disabled:!a||u,extraClassName:[n.btn,a&&!u?"":n.disabled],children:H.TEXTS.auth.signUp})]})})};D.addHocs(T.BOOTSTRAPPING,[W]);D.addHocs(T.AUTH_CHECK,[P]);D.addHocs(T.USER_HYDRATION,[it]);_t.addHocs(T.BOOTSTRAPPING,[W]);_t.addHocs(T.AUTH_CHECK,[P]);export{z as AuthLayout,g as AuthQueryKey,C as InitialLoading,$t as LoginForm,oe as RegistrationForm,et as UserQueryKey,P as WithAuthRedirect,W as WithInitialLoading,it as WithUserData,y as authResponseStub,j as deleteTestUser,c as getAuthService,V as getMockableService,yt as getOrCreateService,Q as getTestUser,K as rejectWithAxiosResponseError,A as resolveAxiosResponse,L as saveTestUser,ir as setUpInterceptors,k as useAuthForm,i as useAuthStore,rt as useGetCurrentUserQuery,Y as useLoginMutation,Pr as useLogoutMutation,tt as useRefreshMutation,Z as useRegisterMutation,f as useUserStore};
@@ -0,0 +1 @@
1
+ export { LoginForm } from './ui/LoginForm';
@@ -0,0 +1,2 @@
1
+ import type { ReactElement } from 'react';
2
+ export declare const LoginForm: () => ReactElement;
@@ -0,0 +1 @@
1
+ export { RegistrationForm } from './ui/RegistrationForm';
@@ -0,0 +1,2 @@
1
+ import type { ReactElement } from 'react';
2
+ export declare const RegistrationForm: () => ReactElement;
@@ -0,0 +1,4 @@
1
+ export * from './entities/user';
2
+ export * from './shared/api';
3
+ export * from './features/LoginForm';
4
+ export * from './features/RegistrationForm';
@@ -0,0 +1,2 @@
1
+ export * from './services';
2
+ export * from './interceptors';
@@ -0,0 +1,2 @@
1
+ import type { AxiosInstance } from 'axios';
2
+ export declare function setUpInterceptors(instance: AxiosInstance): void;
@@ -0,0 +1,21 @@
1
+ import type { AxiosResponse } from 'axios';
2
+ export interface LoginParams {
3
+ email: string;
4
+ password: string;
5
+ }
6
+ export interface RegistrationParams extends LoginParams {
7
+ name: string;
8
+ }
9
+ export interface AuthResponse {
10
+ id: string;
11
+ email: string;
12
+ accessToken: string;
13
+ createdAt: string;
14
+ updatedAt: string;
15
+ }
16
+ export interface AuthService {
17
+ refresh(): Promise<AxiosResponse<AuthResponse>>;
18
+ registration(email: string, name: string, password: string): Promise<AxiosResponse<AuthResponse>>;
19
+ login(email: string, password: string): Promise<AxiosResponse<AuthResponse>>;
20
+ logout(): Promise<AxiosResponse<boolean>>;
21
+ }
@@ -0,0 +1,2 @@
1
+ import type { AuthService } from '../../../api';
2
+ export declare const authMockService: AuthService;
@@ -0,0 +1,2 @@
1
+ import type { AuthService } from './auth.interfaces';
2
+ export declare const createAuthService: () => AuthService;
@@ -0,0 +1,8 @@
1
+ export * from './mock';
2
+ export * from './auth/auth.interfaces';
3
+ import type { AuthService } from './auth/auth.interfaces';
4
+ interface Instances {
5
+ authService: AuthService | null;
6
+ }
7
+ export declare const getOrCreateService: <T extends Instances[keyof Instances]>(key: keyof Instances, createService: () => T) => T;
8
+ export declare const getAuthService: () => AuthService;
@@ -0,0 +1,2 @@
1
+ export * from './mock';
2
+ export * from './stub';
@@ -0,0 +1,8 @@
1
+ import type { User } from '@ducks-tinder-client/common';
2
+ import type { AxiosError, AxiosResponse } from 'axios';
3
+ export declare function resolveAxiosResponse<T>(data?: T): Promise<AxiosResponse<T>>;
4
+ export declare function rejectWithAxiosResponseError<T>(status: number, data?: T): Promise<AxiosError<T>>;
5
+ export declare function getMockableService<T>(service: T, mockService: T): T;
6
+ export declare function saveTestUser(user: User): void;
7
+ export declare function deleteTestUser(): void;
8
+ export declare function getTestUser(): User | null;
@@ -0,0 +1,2 @@
1
+ import type { AuthResponse } from '../../../../api';
2
+ export declare const authResponseStub: AuthResponse;
@@ -0,0 +1 @@
1
+ export * from './auth.stub';
package/package.json ADDED
@@ -0,0 +1,101 @@
1
+ {
2
+ "name": "@ducks-tinder-client/auth",
3
+ "version": "1.0.0-alpha.1",
4
+ "author": "Stepan B <dark_magic419a@mail.ru> (https://github.com/Stepasha419a)",
5
+ "license": "MIT",
6
+ "description": "A module of ui components",
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "https://github.com/Stepasha419a/ducks-tinder-client"
10
+ },
11
+ "main": "dist/cjs/index.js",
12
+ "module": "dist/esm/index.js",
13
+ "types": "dist/index.d.ts",
14
+ "files": [
15
+ "dist"
16
+ ],
17
+ "scripts": {
18
+ "storybook": "storybook dev -p 6006",
19
+ "storybook:test": "test-storybook",
20
+ "build": "rimraf ./dist && pnpm build:types && node esbuild.js",
21
+ "build:types": "tsc -p ./tsconfig.build.json && tsc-alias -p ./tsconfig.build.json",
22
+ "lint": "eslint src/** --ext .ts --ext .tsx --ext .js --max-warnings=0",
23
+ "lint:fix": "eslint src/** --ext .ts --ext .tsx --ext .js --fix --max-warnings=0",
24
+ "prettier": "prettier --check src/**/*{.css,.scss,.ts,.tsx,.js,.jsx}",
25
+ "prettier:fix": "prettier --write src/**/*{.css,.scss,.ts,.tsx,.js,.jsx}",
26
+ "types": "tsc --noemit",
27
+ "steiger": "steiger ./src"
28
+ },
29
+ "browserslist": {
30
+ "production": [
31
+ ">0.2%",
32
+ "not dead",
33
+ "not op_mini all"
34
+ ],
35
+ "development": [
36
+ "last 1 chrome version",
37
+ "last 1 firefox version",
38
+ "last 1 safari version"
39
+ ]
40
+ },
41
+ "peerDependencies": {
42
+ "@ducks-tinder-client/ui": "1.1.7-alpha.5",
43
+ "@fortawesome/fontawesome-common-types": "6.7.x",
44
+ "@fortawesome/fontawesome-svg-core": "6.7.x",
45
+ "@fortawesome/free-solid-svg-icons": "6.7.x",
46
+ "@fortawesome/react-fontawesome": "0.2.x",
47
+ "axios": "1.9.x",
48
+ "browserslist": "4.25.x",
49
+ "classnames": "2.5.x",
50
+ "react": "19.1.x",
51
+ "react-dom": "19.1.x",
52
+ "react-hook-form": "7.66.x",
53
+ "react-router-dom": "7.9.x",
54
+ "react-toastify": "11.0.x"
55
+ },
56
+ "dependencies": {
57
+ "@ducks-tinder-client/common": "1.7.0-alpha.9",
58
+ "@tanstack/react-query": "^5.100.10",
59
+ "zustand": "^5.0.13"
60
+ },
61
+ "devDependencies": {
62
+ "@eslint/js": "^9.39.1",
63
+ "@feature-sliced/eslint-config": "^0.1.1",
64
+ "@feature-sliced/steiger-plugin": "^0.5.7",
65
+ "@storybook/addon-links": "10.0.6",
66
+ "@storybook/addon-onboarding": "^10.0.6",
67
+ "@storybook/builder-vite": "^10.0.6",
68
+ "@storybook/react": "^10.0.6",
69
+ "@storybook/react-vite": "^10.0.6",
70
+ "@storybook/test-runner": "^0.24.1",
71
+ "@storybook/testing-library": "0.2.2",
72
+ "@types/node": "^24.10.0",
73
+ "@types/react": "^19.2.2",
74
+ "@types/react-dom": "^19.2.2",
75
+ "@typescript-eslint/eslint-plugin": "^8.46.4",
76
+ "@typescript-eslint/parser": "^8.46.4",
77
+ "esbuild": "^0.27.0",
78
+ "esbuild-node-externals": "^1.18.0",
79
+ "esbuild-sass-plugin": "^3.3.1",
80
+ "eslint": "^9.39.1",
81
+ "eslint-import-resolver-typescript": "^4.4.4",
82
+ "eslint-plugin-boundaries": "^5.1.0",
83
+ "eslint-plugin-import": "^2.32.0",
84
+ "eslint-plugin-jsx-a11y": "^6.10.2",
85
+ "eslint-plugin-react-hooks": "7.0.1",
86
+ "eslint-plugin-simple-import-sort": "^12.1.1",
87
+ "eslint-plugin-storybook": "^10.0.6",
88
+ "globals": "^16.5.0",
89
+ "postcss": "^8.5.6",
90
+ "postcss-modules": "^6.0.1",
91
+ "prettier": "^3.6.2",
92
+ "rimraf": "^6.1.0",
93
+ "sass": "^1.94.0",
94
+ "steiger": "^0.5.11",
95
+ "storybook": "^10.0.6",
96
+ "tsc-alias": "^1.8.16",
97
+ "typescript": "^5.9.3",
98
+ "typescript-eslint": "^8.46.4",
99
+ "vite": "^7.2.2"
100
+ }
101
+ }