From c72bb8b68b7d888f0c5c962567fd299ca03ffc8c Mon Sep 17 00:00:00 2001 From: Harsh Tiwari Date: Sat, 5 Oct 2024 19:38:39 +0530 Subject: [PATCH] "Issue in redirecting" --- bun.lockb | Bin 162176 -> 183434 bytes convex/_generated/api.d.ts | 7 ++++- convex/_generated/dataModel.d.ts | 34 ++++++++++++----------- convex/auth.config.ts | 8 ++++++ convex/auth.ts | 5 ++++ convex/http.ts | 8 ++++++ convex/schema.ts | 8 ++++++ package.json | 2 ++ src/app/layout.tsx | 33 +++++++++++++++------- src/app/signin/page.tsx | 7 +++++ src/app/test/page.tsx | 7 +++++ src/components/ConvexClientProvider.tsx | 9 ++++-- src/midlleware.ts | 35 ++++++++++++++++++++++++ 13 files changed, 134 insertions(+), 29 deletions(-) create mode 100644 convex/auth.config.ts create mode 100644 convex/auth.ts create mode 100644 convex/http.ts create mode 100644 convex/schema.ts create mode 100644 src/app/signin/page.tsx create mode 100644 src/app/test/page.tsx create mode 100644 src/midlleware.ts diff --git a/bun.lockb b/bun.lockb index 24b489d3a1ad6a229590731b6a477ed994a321b7..05cf6efae8e1983fa1c6c2d8a436a8e1cd5b1379 100755 GIT binary patch delta 42619 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 H(Pz&9z@@dP delta 29281 zcmeHwd3;S*+xFgD4mpU#5SdOSF@{LUoHU$ch37y03MwweEGVVNbF% zx3pTxFZP8IP0#M^KYY`#YdY0w*d(yp*h_zS1$X~VEc3h>)%xtqyIxdhT`kfS9t)pK z2`c_ejID5 z3*HO5yR^^CEht18WxboCcz}N&_EjNsGIDaWi$^NTO%SX&KeHfr+@wq;rm~_0L2m|0 zLkA@DvoZ>DC+8?iP8GAF&unIXUiPRdYpKI<4jhp(yC8h@xZL4NF1%&E z2f-IJ@iPc|wiN{R>G;7O4bRUQky)T9zd$FSh}!7LJV@qmkoHytUV=`3d}jXW%qT^% z8eUM{jL4{rg2D-KG(U4<0e$Y}p~M*>^g^w$DH#Om3Hg{TFd{2=Z1%{E{80s&lQMG( z3qp}e2j0?~YC*--YnuJd%g)azgrDQ5G75@v2|W8!U;IXNqPL>BC_3o?r`A+LdlBgG~Ayv+*pG77W8$7W8^Q2`6S zg4&EYWanh(WfT<51y6k-rV+ch5t7}QDfuqGX2Y!@>0qp%Y3~lnxSy8tE95gw6Z|W=c*2ML|zW`bn7t z$!6+HSrrmpFS%CVl*b|I);>sty0~N$5*U<{S0EXnXQZsx#MBE5#$^vjLo>nC!O4(} zPpwc>&w)=Y!Y)B!0sOSw$Sr=`q?#3U*i0?7_^l`>As`cl@A@@AN6_q~*dDT`5X zClZ)VC9g|aD&okR3a zEaJ~Z3JCV32P8w=5|RyOBJ??hit>A+qBMej6cV$j|eb%M-b&n{H zX={#rsI)o&oo%-IKo(?8;O7@C)3QHHvrFoFMv)tDmOnI8)w#|(mql0VM7oJuJLNfphwe@Q48`J zWN_*hNhfCHRLZw@n;WSb1LfrYZcme3i=Ajq1Kb!Gl)*mLU4LV4C-3i}$6 zInayQ;}j$)J4k~tNPp-84zR%&5CK-W69rjOZRFG8JJ7i|TtTF0hYOMX%+Z-eSHROg zyC5S!KVypWHFS1l5*9f5&mq~tkJ7PVxau~+fF8XH$+zS;0@NcLch zln7-(W+AUl!pCQza98kjG#b(evOXk3`J!xKzHBg~C^H;eQf9H#vmkw7*Bg@cyRc1B zu7Kp^EM9~JLpux77{keCfv|Y9M}vyYo_q^QyD~@?9FJ?D@!181V+wL}Vln%z_1;t3 zkIWrWn4g`K83~=su?Zv__C>vn$mwZDJH;g*BH;(Zx=P*%orcE61~#l!&>709kiL+^ zr3^-+95RI6aO}6o%!uHUyl_fhCY>}U>$@0YI)37ZS+mkE9PylBo6;@g=OfFzUOzC- z_S5F~YNXpX@A6KqqFqyT|3IfYSWgRdslD}5{Crz43v}7FN{SML8Y<~$I>p=Lp!J02 zrk@Fnw?7H(5hHJ9R)Stu&!zoXN%s$O+FQ6O3eFKFmGzLIc(p(;4RWbl^s*qA{RVPy z(koH*keCELE!btBY*Q4RE=oN0kl=XroL&a*QQRDiGOW<3Z5y;!dSGCZ_FH9rX^7MQ zNEOp3&G2FxG@QUtYkr8i96=#PC0G!YQm5#C4PENL^|XdA`yE7L+O)UWQQzy|kH2U9FelXRz)U=29o5%1X5PyB@%Fc&F-C}X!+7oYTKci(PRuF4aF=~AW`94kl7c8;Q^@`kG|mCV zSPIeDo!F{f&uAQPpCC0%ek_wWp|J&X7%v3s{&7xqx}Fy2!mKTgbJ=5pFo9rDiLtaj z1`T5ol%#&Dr^UPMO0c3tAQ#KBS-d?$YBpnC4buG*T=o^<*f<E)>nNcA;1r7^Y%Bh?$J?o6pK>1nN8>RG+CmCN3&iRpmCF4;1nMd{1Jl2oCmwRYK$ zKyPJq=gddx$GO7nU!M7U?=?8Ewrc1EJR9@r+ywg!}$x>lZYVgO8Tu9@o4 z$_ zvk0kV!)$wbiUV(Q$>pip<*9>6wbTO}CfRQxm5R7w0K(#J{Sd;I#_E3(DXv^qKQk=B zEtcbsaN5Qo)!PW{7kXJIm%RaYEN(cMlJ(=Y1#$Y){!ZIRAQ8&MByC25?mxh355T0) zHwOpX^?Ydk%e8Nz^@WDvNQk%h!ffmb4VzAjcx_pdo}S{g+c5|FfW%&fohuz07m=|> zv_-9S|5T^_97xU-V{+I-TAQ1jo1THy`Y5#KX7N@D?ohfwano0}FqB?Uj7{F|gO$_U z$l}r%4UIiBcb#p}SU)yrtmEIHp^wzCRfoCCPgFQt4uyuH&yO#&U=vc8a@FGuDLN)!y73;R-D0LNnvd zt#2HA}KDM2d~TaqxSgCFp^Tl5DpO3&g_Su9LavVxC}1 zJOz!N!Jzh!w|^kDD#i}%hwyXc%q_7$GwhYwM^PIMtnC3Wn2PWB5kdmt&bM*yioI}Rqvh9P`PCwB+ z$zBCLG-nNGblY-`^K=?C4hA-9TvTm_ChHp$Z~K{+yp*>&hj7~++&Ia$0x6uk(e`zu zFagX_u_X^R&c@M6wna$wV=22f%v_PixY>q4GrYF#MGEI|)Y~P)XdyJo_Jo-Nw*x7h z=}_J_+`ME#$Z^Ti3mUwE?Hr_>h7TViW%_`f&0c$i8F=iu*ymEA;fezFY+%apG$bm) zZ6wdKq8 zaiR&uO32dvr#WrgL1HI>^VgBWJfkBR)9%^jTM4v9(9EgIP4-J@9bt(z8yau(AH!L} z=w=}$tq`rX&~V#^=zfP3<|c0762|IFXE<#O#u@{M?dMyhl8r`r1>Sg^8GJa7M)RRz zF`4nR?=9EpLf!G!0;VWAg%{v}TBog6*A#A&acYeobe ziNhU;)XWp?R%lrJtg~^vEg;XhNSO=5qov$R8us3bmR&tWr>}p>%s_G39xa@7J`~3UvP`owhq5jTva`S7=Np+ypI0 zs;9oJsFgbsjHP)7Z8=d<5)Ex-ZoEAk8uPHRBPMS^Gp8^5X0J5K^a3XxT&Z`F8a%|{ zu7mc7zHCO4{VY=E;D(@v29vD`$}%O;2B3ChS!zcn>r0<@YKw~WV-PHf2w_RuM) z2qwm&NCgwa=#O{_~u6j~R;68b$H6VNAT%b%wqa_=E_!H-!JiRZ>5Xzft6mT@+I2by^^awaEUt6Z%6&v)9o6>~x2qClHj ztS_DK)IKcMkIjFCx2b%9rKmt%iRO?Rfa`JNxL>+~iIV)oB+DUGN+lp(+C5CN9ynRw zFmy`8`z0O1WuBty%NF>A(4Z}U;CPr+^&Ja*R80?D7F5iVID;Bp!r9W0T_JfqOxnQX zgk~I+ERW@7grKj~ABE&W$u9N>Xosm~9QVm$#U0cTnL$ZIoF|NflKL=!6%7Zf0NA&T z<9^8)Vrwz%v2hp@TZVBwOjbrtp@Qoh9$0Zk1CtC*Q7BmuOt)K-AU|Ff)a z)?-wp={uea(yKr3Tg)bR0&H>@z+)FceK){4wIASdzx0KEnk0_X#?SvNiJ;&(ZT$TI zA?13c1MKk`=?Enw^Bus^{vP1+z9i*UNZS7l@StRTZv&0>@I^kwEY*l6QnI#CsZ%o9 z6hCMeCV5IGn@j!gBu&EcgY~wQ_LNLUs+jCtMe#D@VUi6e%6v*DACWRi@|1S)$x^3e zvV+tqSx+aaQ!?3EHOCbRXa-?sbdfqGJ?{=ls)yt$xuf@y`oko%`pWzYB{v&-)=wHz zGTC41_e(}Y5&9`{RD_#}8nU@jz2IL}M_Mbe&<$rmIq zAUQ-YLUKv0faFlV42gfrYC~fDUqONf>mljD>&%t1Cgcvu?}Utieg%^D*C6pv`Gr5E zWb#-1VEzrs-!Dn=zhm*Bv~m93MS?xEp>^g}ma+;YJ+3PCYLGlA*)vZ_HdIIEdrQgx zAjW!pAn{M}le#|@9F%M?7_yj#A(ChU$qJi8vf&m|MnTdpTIz9-JSb_$|G`FwT1&kR zB>pMwB;Sz=4occ}m9nRX@#lerkA*hZQ+^=jhtmG0h z1-nNNZLe68A}BRC6fvG!4S5FWQFY^*+4QR>*)x|<9^BfPLgNdy_*1xe_aqn zbAT0ajq|u)vgZ%G`llUvmiu4a1sEN1vM?`CjD(c*)CK%=7hnwPKX(C`3poC{3;5?Q z0Cyk%+y!tkBw~}~KKajGz(02Z|J()qa~JT>UBEwg0ss5EfIFUdcoH#=%{lA8PSR&w z@20+~AGn^Ppa0%N55Lh3|8Z~1jTC*!4<7mnXq)w>H&gV^=RNfKH@o3KA(lbA4z2Z{ z-SA&3=lq$Xuf5=*UxBtwPrQ|)r(X2Xm)+{7zN=q==6=aT?{T}ExGhd>Tdl8G~X*8`ry0W)IIvTyD9447gRMx-SeRK)v~hZNyo3Gx#~s{gQ$&3?$j=oqmGZD6 z4pV-ih-Nm(FBS1PWM&ql);JvP=<=RDnFEi03JfE8-&MH;QQI z4tYWmODRt(;u_^CMRc{R1N5vvJj5GzwVQTE5jRQrUiT1#tAaSIi1k%L><8gd4a7M` zq*nt`bi+gJAn}7Ds#XUPdecLUuMXmZBHkf!6hxp0h)alq2Z-5!dWb_Lt{@CGKqTDq z5Ho6k_z7_!aUMjtCy1XB2u~18ZhMFmBz{38yg+om<00mIf%pxfAaNZ;>zW|`KrCv4 zSbNt)Tp@7-!KkGUcp+8w5X)+T_!H3pA>36kJ!*rwjd;`svz5$kGItS?I$*LiFmKdR zyQ!+UQAbS?zLh`>_6AW&tn&u3pM*zU5H^uk7etX8h#e%V2)hr6P#cKxJ|OI38;PSN z0)0VL6WP8XW>*Grh=hmm^8=Ak1*sW+AUwqZ66Z;T`-7+{ruc(c;tt{jiQ1xR0Eo_Z z5c2~-c#AR;*GaT?fbbD>93a+K1#yLhpGXV@ky;JJvOo|4;sOcx>L7a50}&`n>w(xx z;x>sO(Ip5(mIsJ8fsqN&(M;wXv01|Y&jb^{QzYl1jLB3$@21d&h+#Ega@T8INA&XWjl1R_#QX#`?P zZMB9t*+}iGMvJD6L3FMIi}{UV5i80_Tqn`G35a+xrwNF)-XN}!NEC^oAX4jsSQZK* zNn9Y|?gOGnQxL61X;TneN!%vk5?z{s$npj8Ml%p?#SId^ejo;ifoLz*g@M>l!lOBe z4kE2Nh$4RwJ4kdA_HYoP0U*YQgXki*kvK{sFakt3ksSeIwgbc=5jM1g493Pk5-Am+CMF;SF}xK5&V zYY>ygoYo-LhJm<3Vv4|jq(wZMgIMMSF-=?`;T{g6hYQ3EQR)J*mBeil#iC0a5Lpo* z-e?12rno`Ew*`p7Z9zOC*0lw(pM*y{5VJ&DI}k-JLF^#$w6M1a5gG|%e0vac#5NK~ zNdzW?m?yH6LClT z$)hQ1OIu!otSH5(NMxm{*KN((;prqD|Cp6mwSJ?{)?tftp!&OJi^IEeqxE95P|I$r zyR8kLVS2GkwcWN18>sHrw)F0$#+U}*j8@(K9>qlldqm%?-%T-UVoT2&AzGM)ip{CJ7viCC3NL zj~fi$)Ju-fmY)Dv$r8!=AUzAe-eYLUh+N1XCz{lczRNevLTi`puU0SgapaGQtH^2r| z2C4w=fE}m`R1=B&)ue2HBm)2k5D3%*f`DKk1gH;i-f^D&0{ja62K)~E0dTI}0B!;? zKr9dkFktK(`@()XM323ykG%nsjey2tJk-GNkvs$J2Hpqu051ct0BgkOd)4S-{uhRS z0eoBA3+N5-k;xz+6Bq^XT{hqHb_GTPLxEvHXP_O*CPRh-1Ar7D9heJ#5-=Gk0{Vh$ z1GEQvL+=AL=ezADAo#+=6Yv6R0<{5epf2DG_yPVv01yb&1A+j)c=-|d3E+bH9k>bH z2Kb8dO<*Ii33vE3KRg@z*wLYUv~~cq7A_R0mPT=oq+yG^J(TyfOn;Q(HaZvM0yvn z8`uNv1@-|S0Ura0fUkffz}LW0;27`?Z~{09dm2a%1cQ@Y(O%$p0^33$Pg6eBd;&8mNUKasWRg z?;5ZI_B=bJ1Kl~VTOctJfFM%6?wZVRcG*8x_0Ni-50$YHefb#&S*$+Sm41}?>at}QVd<&cb zP5`HYgFqO-)%rH@9$w0+>$+=@c9LFMzANH^3GCF0c#u2zVdZ4ea4U zIDo{5zy|;e?gRD$U)noRMz5WbfFInyo@F{Q@_#F5GI0BRbM*%v>^htmn z{02CV_LWn>Ip8~q%aA_;SAa_Z!+ilDPo0vX{tfsQ_#OBIxDK$6bl^|m7El?(N2lE& zc}fjMT7kR+!67O(FXha!y~{jg^1RD%Jr3BAW=}bW)sa38=?Tdpr~z3O@BkQk&KovX z?LOWv^T@M)HcBUY0;n&&+?e5E!3|QfVisbfY>*W(pJUDjt%~VvZE#)yov01H2V@;F z{;=v(oCkFXkPGAha3pztZ3XxMtTF-87Z?Ea2buu9sOSeg z3h=z!2nYh=0iH;D0X=!{-a+5>F>CqO5Y0Pfk`;$ndqfZHCoz@|L+`XOO?9E>!b@CWDsouk*@aO8fc=#14P z=FzSJ&=|1n$yptuEp@95`B0#KF@A6>V`I&L7C;0L4zPD&0Q2Y&!LU-Y4AYjwbdHf= zr4Q?nmH%LwViqDvudOu4ljB5=J>rlsw6wGGtTe}+wpJajW!iF=2$Yb%6I)6>C#<&eeEh7ECE z++R5z;F7W?B3BZlX-!zJpkaU$U|p<(5zYXLISvn2Mgvwd9KaeiqB91PVao=xfYtz) zoeSW^9RYCSjRr;mnZQVZb+bNeK3GzAs@Ul11Q=Lh<%Jmw@MO<0vQak1(6X_7fOErI z=bQ)kJ79H&(rS$LvB#{_a*$DUar`GD!4Q=I9G_xhK3Pn18_cc6Z4O%J}FNjX_cdIR@(BH zzCOrVeVB*5`M@*4vq0V|{J^p14^{kmRBePyKSczUsbBeE)|Ncy_EKZVre^7yIwUe8 zI-(^`LBe%R^$Xx7CAwTPZN~9WN7wmqyZ{#UMfVe`Z-DhN!L-*JT=bYVX*(?A%&O{&;uG++F(QH)TGH#ro_}w58@}{jTZv-x z2{l?>BYvQGMFgBgyb?t=M8HFRH{!fre0~yf*e)(nd?swCP|6`fVl+RsnHYZxWQ=(F z6l%;7t?Ouh;>%NNjKli0VAW-3jy+lBY&5)xiil*7f3}N;r`7K2bTQ$y>ZkouRXlSV z{jxqO=$0DQ?@;CS`%oa(?AJW86Na(YrvT@TT(oKXu>+@!8e4J%tgj00Z2sc0r2f8L zkrNpa6%ozodYpk{#t=p0x%k90=;~i9ib6veKgCO&ID_sC5`UagXT}|oW3v3IciXSM zU1N==J{F5Eph4^FgUOy7UoD*f*<9qXbLMDm_*RWl-x6oOMNLK@>j=-Ys!gV=w2X); zA5@3+S-ls%w_Nm}wS6o+Z;4roCa!sjk!RH??N2YUOpOu&eM9FumKb}Cp_#OP5 zEBaK|>bk)*U3>~6*7^dXU#(i>`Ze(U617E}J+!`&xW4+4J9pcE6@wh~oP8fA0?(nY zu_FGQ8m(QcBgUP>Fz*xF&Z%Mcd3CWFV^+Q*uD~e3`T%0u&L3?roxBo?S~v)p9vel- z_o$_n_*Zq!FTnaB;@T;9a-&xSv~^>EA{pwhL@w+CuKOAnwk6kZPRn{fbxQ0=67y+le!~$T?8}XOd)$vBmcvvo{dBP#2I@L-oOafy9ecKTf0f@yd+NY0 z&TR85;fbEAW``fvwA>)1!6=La_nONi)BB%jwJRAFC1SZ?(wz~{v7%`48bpBgjmIfJ z|NH21*LHKtVRFVO8R8TTjE_H}qG4S|RI5LyKcgTgiDBR)nq5#GaWzBCX{UWXp+vNe z3WF8)0Zy3l$g!jR`L%OBj~uCtAPolN1?EzSn0`U^#p{F@E@1uE6bCL~;pWsg?KiCb z<>|glHyzN_$QU>t8KX=Vkr(0kOfjK~R<}4ZQn9}K`0;?nhYo-F_)ty73OCmHE2yM8 znuvaW#MIr(R?N`UC15z(*0&>PMt)UTCrnRuE3bYZEHHmdmZv^)MB6i>-o2dT$l+xB z`tiD(>|Zo@V~#j|QLP+s4LO*JB@3^vJ=k&5!3OurR2AwaI9p!?Km=HyxEwuy;up_6 zmsN7luAk^dyBv{y2{D*0mQhYAIL6#LJLEH1pZ z()Ihh_YAD>Qtm$Y+}heco&LC&Qz$%sM8KX3GtX}=+btcsrLw1X&!AMag@O9I7)U$o zLzwP0onc$mMF;QM9Tv~RAohDy#5L`E^JZkT*vVV_VJ_6l-M{K&P4sBqm4-Tf6YURul(Lbw09hUkqL$Tp!)wki; zICC*rUu^sKYU2~l;&YE<#m7fP^RyNgFRtEDedDYzCjPN;QKw1+CtZd`Ttqy#f9soy zwbU-({JLfI%f@aI&2#yvexGvN0qtW>K~qPPE((Z$L$V!WPPx4K;e&5((Zci z(bV0@X^Nam3E~-)by%N>+<)+si~hZbMBFRuOc1+ns>#~Wge{f-R8v*$tpqXb7Pg?d zVpF8%=deD4S=W{p*fa16>^%t)v4+R{62t}?nj3pP^uhY#X8*D?VYPy~O+_CtH0CMt z&s&%s=0%@YmLOW*MvuNrFt?-^OB=q|Lx1&GBVNXaY<=T1=SJf79%K3jASWgwj$8Gu z1o0TlT3-wG+y9*X#H@|4!Ge1*;$?j=)Z1&*yHlUdS%RF%2wW22@+DCmL|I1#*G=#y zA#w2?Tyu6#6fLW2z7Fe4stZ=W)&KU4Px~8g7&}UCqUZ_BIDCB7_$J?(*~bev_58?P zI*MRepL1>9GjB@ZtoK_X2WN2Z1@9z^mr&MWeF*lE$Zq}oXP$c9aMZXK_&rg4CjGd0 zM{Q<{Ny4p)*y*nM^ZaRyOr2ok(#`rdcO3ni9KwHsF z)1tKR+le8X<{S4*J9FeNUmt#AXl-|14Dq51F`n7p+#4@d5B96}c%vxf$g_IOWbr!d zSeq9~ogGAaU>d3fQ(`@6a}tfhTDMGkDW&wJv3U7;*?sqNHH_7q1d zYu&Xiy+p$*T6gpEqKCCJXq)?pgIpaIFSMO~L=AV0#6wp{B)e{Xd-l04d-i14kDSeI zC4n7Qe(fU$p{!QBujpA#^A!u+wOWqozBmnIKYMTw^iq@iitX-Nu=a9aagxOzD6YNR zcQI=zsixJk8MSa31&SiO7GvJ&*5%j6%=-Wv&JeP5f2mJy2^KGgSJnJ2#cEV+Bx%(k zgCISyY#r8Tp9{A4e{F;2$r%=7&KKF^hr3)?^s1s&k@uhClWJOX?ce>yt!i3S1M3#U z`aJJ0|3;PH9Xjl^G33#lyGHl?RO24UTa;AS+yW}T(J}8p;wruavA&Sn`IVdvM}sO? zk@tt#bJA19kJT{iqfiGvjY@oX0J?1faZfc%*EQy z@im&jYI08#-_Wu_n#idQnV2TLJTdj#rI}asAFX}b^Qf)UiF+mbB8RtOpT%8Pdw%R~ z-nARs{^&F@1ZB19X<}C$$OUO4&mU5xiN_kk3+to2HQFq`7%=V8RM`&%eruXI&5|FY zL=(u9X=0%_g;BD;6&%)g+rN4@ zp4vsaj7y2+ba4mOIIIsdS1bGVh1CD5Ho>rnih#wCbg?}cb&W|E-D_einVK$2YC>O_ zE?W9%-a#<2KBm0>tJL)$%-i^sQ5bhb(aNjo;u9Kgf~*I*GhMvLet(oM9JSD_^;P5s z#T}deaygiHfRW~tt1IcEH!L(cjt=WP%WJO{J)K$_vPC+GsZe{MSPsiL>x<34jeiI^ zxo~L%!@`&g);FEMxH$RfS^r*d${g$tDFel2`oYgY`(Wf|uHIAYnA?1w(mBy!F>9a* z#^^h&4^LmM?lUIq@Xa3gEY=JZ3qs-Py?L_O7h9}0NCXFK-rSANVeoZWU&p@uX6u!8 z{@tIC2zcL!QI_*TK5vra=gpJ2S++$GHqeKTkx~4CX=PO-=ZeGl$~Jm;b<6C9rS9hv zjCOICiAR}3#Aye7f1rJ{U{v{hvg)@cpQX!UBDpRm-}#|pSY6bGb+QqY(6M@$d2&<| zf1R|d)4XZ-A|~Sz_a-d3Uc46+h1@ASbn>1>-3;?u<6_1JTkFC#U&$PJ9F!q$p%q6< zSa_jqrT&xWe!tl9yR^VQZ%#~KM;lqkiqfiaLEE1BNm?M#51Yp$UPGpsgvp&H7 zm1Ea8kG{Qk^}P|WKGnXe#*%Fl=fB%V=3s(atGlAQALQ4hE^dTpbS)LDanr!thPy6n zYV8WZ)B?{bWsQop6_;;@azcqg4$~O>v{8xGIa!%DX|!0;81+0b?H$&~*z@nacJs)$ z&onZ+WIS%Qc2vtVoRq9eWuxVLn&qTv>ihSxH@agkCu5mg-R)WrJs31bl!TcpiDw*Z zOv<}!?WWR`#X3u=QgV zRItdf=~*kw@&71;$+Q7 zJ&k&Vtk~=NrnVe&^vN0)>=g3!C{KFEj&Wa=R<7l;H8aq}u$CA%Yg(_$5hv^83}t;0 z-`jUt^Sat0Cz|A)EoQs*?ffxWovu$lo%D|34D#?_SJFlE2H5Ycuk45U)CGXI(j1y|IQ9!IVqZ zVf_gL<+I*$kr9YTM)|H!F z06}oEe!h9rGwqLS;k$>f;T110Td^?BrRD3e{>DMXl8~ks+t$Zp9qWRmYreSF1lM8m z(n>f(HUGaklMY2wJWqbHW@W$L(E>NIRz>Fd2={{d;u~DQIIKUvaA)wdDVGj+{8~DN z9$3M!=7F`etr_;9{&zDj&id;Mg@@ny&{4gyzib98w1P`4?Yf%JmvB9L@62Yc#tN=mF~#KG{l6a(l*NdAa{s<>&EN{+{5RK=*15?H zM0e|AU8v#Me6uHuVBEu1w79UrTYsoxOI*m_?|z-i_bKuPhrADrv;L$-)mE)%zNs!; zXIL0dQ!3cX5Oee1vAd%ZZqEWRDw)sJPI~_1&BIZauLyA||5i`YFapn}jCZl#VqAn) z&w5%}@tt1JBC#t1yKQ#v;wbEB*CKcZEfO_aXw9@SMdFbb+9M9@FLrEwZu+TqD<&_L z69H4}+aj^B1(uUF$E}#lJzRLT{F@EZ+6=5M7rUxg99)r6atxnlzA+IET+NT=wD!9f zCF?$V>NHU|5_f3UA4%~ZaOiCF278AXmbi6H#FH&C5*7h}y-R)`wR35k_rlt$Y2sic zCVj<`G9#pIoF@FE5S(|WiH=cPu*3T6Bdd0QJEid#3u4i>@t!qOIXz804$G>4pe6hV zz6WofD+*fqx!a11xiq8X{b+?V59gH%78YiYxicH5U~`RmyWzz7A8+jgtiLXJYghb@ zk2Cv>lu^Vm*A%&YyMI#5iP56};w#1Kr2 zM%JHUvFEn>;9{Sp@8aKT6%WYps`$DpUX0URH48Jc$4$=88QE#z;l@9P zZEEtU_&H7s!f(0NjMsufW?; +declare const fullApi: ApiFromModules<{ + auth: typeof auth; + http: typeof http; +}>; export declare const api: FilterApi< typeof fullApi, FunctionReference diff --git a/convex/_generated/dataModel.d.ts b/convex/_generated/dataModel.d.ts index 4c7c9f8..91445df 100644 --- a/convex/_generated/dataModel.d.ts +++ b/convex/_generated/dataModel.d.ts @@ -10,29 +10,29 @@ * @module */ -import { AnyDataModel } from "convex/server"; +import type { + DataModelFromSchemaDefinition, + DocumentByName, + TableNamesInDataModel, + SystemTableNames, +} from "convex/server"; import type { GenericId } from "convex/values"; - -/** - * No `schema.ts` file found! - * - * This generated code has permissive types like `Doc = any` because - * Convex doesn't know your schema. If you'd like more type safety, see - * https://docs.convex.dev/using/schemas for instructions on how to add a - * schema file. - * - * After you change a schema, rerun codegen with `npx convex dev`. - */ +import schema from "../schema.js"; /** * The names of all of your Convex tables. */ -export type TableNames = string; +export type TableNames = TableNamesInDataModel; /** * The type of a document stored in Convex. + * + * @typeParam TableName - A string literal type of the table name (like "users"). */ -export type Doc = any; +export type Doc = DocumentByName< + DataModel, + TableName +>; /** * An identifier for a document in Convex. @@ -44,8 +44,10 @@ export type Doc = any; * * IDs are just strings at runtime, but this type can be used to distinguish them from other * strings when type checking. + * + * @typeParam TableName - A string literal type of the table name (like "users"). */ -export type Id = +export type Id = GenericId; /** @@ -57,6 +59,6 @@ export type Id = * This type is used to parameterize methods like `queryGeneric` and * `mutationGeneric` to make them type-safe. */ -export type DataModel = AnyDataModel; +export type DataModel = DataModelFromSchemaDefinition; /* prettier-ignore-end */ diff --git a/convex/auth.config.ts b/convex/auth.config.ts new file mode 100644 index 0000000..f4eb564 --- /dev/null +++ b/convex/auth.config.ts @@ -0,0 +1,8 @@ +export default { + providers: [ + { + domain: process.env.CONVEX_SITE_URL, + applicationID: "convex", + }, + ], +}; diff --git a/convex/auth.ts b/convex/auth.ts new file mode 100644 index 0000000..dc81fa2 --- /dev/null +++ b/convex/auth.ts @@ -0,0 +1,5 @@ +import { convexAuth } from "@convex-dev/auth/server"; + +export const { auth, signIn, signOut, store } = convexAuth({ + providers: [], +}); diff --git a/convex/http.ts b/convex/http.ts new file mode 100644 index 0000000..1816e5b --- /dev/null +++ b/convex/http.ts @@ -0,0 +1,8 @@ +import { httpRouter } from "convex/server"; +import { auth } from "./auth"; + +const http = httpRouter(); + +auth.addHttpRoutes(http); + +export default http; diff --git a/convex/schema.ts b/convex/schema.ts new file mode 100644 index 0000000..5475e9a --- /dev/null +++ b/convex/schema.ts @@ -0,0 +1,8 @@ +import { defineSchema } from "convex/server"; +import { authTables } from "@convex-dev/auth/server"; + +const schema = defineSchema({ + ...authTables, +}); + +export default schema; diff --git a/package.json b/package.json index 3949fdd..f26cb60 100644 --- a/package.json +++ b/package.json @@ -9,6 +9,8 @@ "lint": "next lint" }, "dependencies": { + "@auth/core": "^0.35.3", + "@convex-dev/auth": "^0.0.71", "@radix-ui/react-icons": "^1.3.0", "@radix-ui/react-separator": "^1.1.0", "@radix-ui/react-slot": "^1.1.0", diff --git a/src/app/layout.tsx b/src/app/layout.tsx index 5c14ac1..eaca23d 100644 --- a/src/app/layout.tsx +++ b/src/app/layout.tsx @@ -1,7 +1,9 @@ import type { Metadata } from "next"; import localFont from "next/font/local"; import "./globals.css"; -import { ConvexClientProvider } from "./../components/ConvexClientProvider"; +import { ConvexClientProvider } from "../components/ConvexClientProvider"; +import { ConvexAuthNextjsServerProvider } from "@convex-dev/auth/nextjs/server"; +import Head from "next/head"; const geistSans = localFont({ src: "./fonts/GeistVF.woff", @@ -21,16 +23,27 @@ export const metadata: Metadata = { export default function RootLayout({ children, -}: Readonly<{ +}: { children: React.ReactNode; -}>) { +}) { return ( - - - {children} - - + + + + + + + Team-Chat + + + {children} + + + ); } diff --git a/src/app/signin/page.tsx b/src/app/signin/page.tsx new file mode 100644 index 0000000..86ca7f8 --- /dev/null +++ b/src/app/signin/page.tsx @@ -0,0 +1,7 @@ +import React from "react"; + +function SignInPage() { + return
SignInPage
; +} + +export default SignInPage; diff --git a/src/app/test/page.tsx b/src/app/test/page.tsx new file mode 100644 index 0000000..4583406 --- /dev/null +++ b/src/app/test/page.tsx @@ -0,0 +1,7 @@ +import React from "react"; + +function page() { + return
page
; +} + +export default page; diff --git a/src/components/ConvexClientProvider.tsx b/src/components/ConvexClientProvider.tsx index 1803828..9ce84da 100644 --- a/src/components/ConvexClientProvider.tsx +++ b/src/components/ConvexClientProvider.tsx @@ -1,10 +1,15 @@ "use client"; -import { ConvexProvider, ConvexReactClient } from "convex/react"; +import { ConvexAuthNextjsProvider } from "@convex-dev/auth/nextjs"; +import { ConvexReactClient } from "convex/react"; import { ReactNode } from "react"; const convex = new ConvexReactClient(process.env.NEXT_PUBLIC_CONVEX_URL!); export function ConvexClientProvider({ children }: { children: ReactNode }) { - return {children}; + return ( + + {children} + + ); } diff --git a/src/midlleware.ts b/src/midlleware.ts new file mode 100644 index 0000000..48c4c71 --- /dev/null +++ b/src/midlleware.ts @@ -0,0 +1,35 @@ +import { + convexAuthNextjsMiddleware, + createRouteMatcher, + isAuthenticatedNextjs, + nextjsMiddlewareRedirect, +} from "@convex-dev/auth/nextjs/server"; + +const isSignInPage = createRouteMatcher(["/signin"]); + +export default convexAuthNextjsMiddleware((request) => { + const method = request.method; + console.log(request); + + const isAuthenticated = isAuthenticatedNextjs(); + console.log("Is Authenticated: ", isAuthenticated); + console.log("Is Sign In Page: ", isSignInPage(request)); + + // Allow GET requests without side-effects + if (method === "GET") { + console.log("Allowing GET request without redirect"); + return; + } + + // Redirect if not authenticated and the request isn't a GET or sign-in request + if (!isSignInPage(request) && !isAuthenticated) { + console.log("Redirecting to /signin"); + return nextjsMiddlewareRedirect(request, "/signin"); + } +}); + +convexAuthNextjsMiddleware(); +export const config = { + // The following matcher runs middleware on all routes except static assets + matcher: ["/((?!.*\\..*|_next).*)", "/", "/(api|trpc)(.*)"], +};