From c89c51dd2a8b892752e3c786d7df307cecf4ccf2 Mon Sep 17 00:00:00 2001 From: ksjaay Date: Sat, 16 Nov 2024 20:02:32 +0000 Subject: [PATCH 1/3] Adds temporary guides for notifications --- README.md | 1 + docs/components/guides.vue | 174 ++++++++++++++++++ docs/guides/discord/create-webhook.md | 59 ++++++ docs/guides/index.md | 13 ++ docs/guides/slack/create-webhook.md | 12 ++ docs/guides/telegram/create-bot.md | 12 ++ docs/guides/telegram/find-chat-id.md | 8 + docs/guides/webhook/index.md | 15 ++ docs/public/guides/Discord_Integration.webp | Bin 0 -> 24118 bytes docs/public/guides/Discord_Webhook.webp | Bin 0 -> 25326 bytes .../Lunalytics_Add_Monitor_Notification.webp | Bin 0 -> 17274 bytes .../guides/Lunalytics_Create_Monitor.webp | Bin 0 -> 7442 bytes .../Lunalytics_Create_Notification.webp | Bin 0 -> 8808 bytes ...unalytics_Discord_Create_Notification.webp | Bin 0 -> 22686 bytes package-lock.json | 4 +- scripts/reset.js | 4 +- 16 files changed, 297 insertions(+), 5 deletions(-) create mode 100644 docs/components/guides.vue create mode 100644 docs/guides/discord/create-webhook.md create mode 100644 docs/guides/index.md create mode 100644 docs/guides/slack/create-webhook.md create mode 100644 docs/guides/telegram/create-bot.md create mode 100644 docs/guides/telegram/find-chat-id.md create mode 100644 docs/guides/webhook/index.md create mode 100644 docs/public/guides/Discord_Integration.webp create mode 100644 docs/public/guides/Discord_Webhook.webp create mode 100644 docs/public/guides/Lunalytics_Add_Monitor_Notification.webp create mode 100644 docs/public/guides/Lunalytics_Create_Monitor.webp create mode 100644 docs/public/guides/Lunalytics_Create_Notification.webp create mode 100644 docs/public/guides/Lunalytics_Discord_Create_Notification.webp diff --git a/README.md b/README.md index 134fe6c..7296dd2 100644 --- a/README.md +++ b/README.md @@ -81,6 +81,7 @@ pm2 monit - [ ] API keys for users - [ ] Move to Oauth2 for authentication - [ ] Allow session management (Track/logout from sessions) +- [ ] Add support for multiple databases - [ ] Add support for more notification services - [ ] Better role based access control diff --git a/docs/components/guides.vue b/docs/components/guides.vue new file mode 100644 index 0000000..66d936a --- /dev/null +++ b/docs/components/guides.vue @@ -0,0 +1,174 @@ + + + + + + + diff --git a/docs/guides/discord/create-webhook.md b/docs/guides/discord/create-webhook.md new file mode 100644 index 0000000..cdf90db --- /dev/null +++ b/docs/guides/discord/create-webhook.md @@ -0,0 +1,59 @@ +--- +aside: false +sidebar: false +prev: + text: 'Guides' + link: '/guides' +next: false +--- + +# Creating a Discord webhook + +Discord has a [Webhooks](https://discord.com/developers/docs/resources/webhook) feature that allows you to create a webhook that can be used to send messages to a Discord channel. This is an easy way to get notifications from Lunalytics straight to your Discord server. + +## How to create a webhook + +::: warning +In order to create a webhook, you need to have `Manage Webhooks` permission in the server. +::: + +1. Open the server settings and head to the `Integrations` tab. +2. Click on the webhooks tab, this will open a list of currently available webhooks. + +![Discord Integration](/guides/Discord_Integration.webp 'Discord Integration') + +3. Click on the `New Webhook` button and this will create a new webhook for you. (You can update the name, avatar, and channel for the webhook) + +4. Click on the `Copy Webhook URL` button to copy the webhook URL. + +![Discord Webhook](/guides/Discord_Webhook.webp 'Discord Webhook') + +## Adding Webhook to Lunalytics + +Once you have created the webhook in Discord, you will need to create a new notification in Lunalytics. This will allow you to send notifications to the webhook you just created. + +1. Go to the Lunalytics home page and click the notifications icon in the left sidebar +2. Click the `New` button on the top right + +![Lunalytics Create Notification](/guides/Lunalytics_Create_Notification.webp 'Lunalytics Create Notification') + +3. Paste the webhook URL you previous copied into the `Webhook URL` field +4. Input any extra information you want to send to the webhook +5. Click the `Create` button + +![Lunalytics Discord Create Notification](/guides/Lunalytics_Discord_Create_Notification.webp 'Lunalytics Discord Create Notification') + +## Adding a Webhook to a monitor + +Once you've created a notification, you can add the notification to a monitor. This will automatically send notifications using the webhook to the channel you specified in the Discord webhook about when the monitor has any outages and recovers from outages. + +1. Go to the Lunalytics homepage, and click the `New` button on the top right (Or edit an existing monitor) + +![Lunalytics Create Monitor](/guides/Lunalytics_Create_Monitor.webp 'Lunalytics Create Monitor') + +2. In this modal enter the information about your monitor, and then click the `Advanced Settings` button +3. Here click on the dropdown for the `Notifications` field and select the notification you just created +4. Update any extra information you want to add for the monitor +5. Click the `Create` button + +![Lunalytics Add Monitor Notification](/guides/Lunalytics_Add_Monitor_Notification.webp 'Lunalytics Add Monitor Notification') diff --git a/docs/guides/index.md b/docs/guides/index.md new file mode 100644 index 0000000..28556a8 --- /dev/null +++ b/docs/guides/index.md @@ -0,0 +1,13 @@ +--- +aside: false +sidebar: false +layout: page +prev: false +next: false +--- + + + + diff --git a/docs/guides/slack/create-webhook.md b/docs/guides/slack/create-webhook.md new file mode 100644 index 0000000..b75ebca --- /dev/null +++ b/docs/guides/slack/create-webhook.md @@ -0,0 +1,12 @@ +--- +aside: false +sidebar: false +prev: + text: 'Guides' + link: '/guides' +next: false +--- + +## Currently a work in progress. + +For now check out the [Slack official documentation](https://api.slack.com/messaging/webhooks) for more information. diff --git a/docs/guides/telegram/create-bot.md b/docs/guides/telegram/create-bot.md new file mode 100644 index 0000000..e48bab9 --- /dev/null +++ b/docs/guides/telegram/create-bot.md @@ -0,0 +1,12 @@ +--- +aside: false +sidebar: false +prev: + text: 'Guides' + link: '/guides' +next: false +--- + +## Currently a work in progress. + +For now check out the [Telegram official documentation](https://core.telegram.org/bots/tutorial) for more information. diff --git a/docs/guides/telegram/find-chat-id.md b/docs/guides/telegram/find-chat-id.md new file mode 100644 index 0000000..dc6617c --- /dev/null +++ b/docs/guides/telegram/find-chat-id.md @@ -0,0 +1,8 @@ +--- +aside: false +sidebar: false +prev: + text: 'Guides' + link: '/guides' +next: false +--- diff --git a/docs/guides/webhook/index.md b/docs/guides/webhook/index.md new file mode 100644 index 0000000..e3e5fdf --- /dev/null +++ b/docs/guides/webhook/index.md @@ -0,0 +1,15 @@ +--- +aside: false +sidebar: false +prev: + text: 'Guides' + link: '/guides' +next: false +--- + +## Currently a work in progress. + +You can create webhooks using various different services. Below are a few services that you can possibly use. + +- [Zapier](https://ifttt.com/) +- [IFTTT](https://zapier.com/) diff --git a/docs/public/guides/Discord_Integration.webp b/docs/public/guides/Discord_Integration.webp new file mode 100644 index 0000000000000000000000000000000000000000..81ff2a202b8e75a99d7268b60d8a9e9fbf8b689f GIT binary patch literal 24118 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 literal 0 HcmV?d00001 diff --git a/docs/public/guides/Discord_Webhook.webp b/docs/public/guides/Discord_Webhook.webp new file mode 100644 index 0000000000000000000000000000000000000000..d8c95627ad0ec2f683615a76135f00929690269c GIT binary patch literal 25326 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 literal 0 HcmV?d00001 diff --git a/docs/public/guides/Lunalytics_Add_Monitor_Notification.webp b/docs/public/guides/Lunalytics_Add_Monitor_Notification.webp new file mode 100644 index 0000000000000000000000000000000000000000..41b02c913d2450e68cde468982d1b4a70cf90556 GIT binary patch literal 17274 zcmdqIgL7uz);0RXwr$(CZQHi(4m!yb+qOFH*mgQ*2OZnG{X6G9Z=I^|yY~;cRU4~n z*V?t$oMVkK*P3&y%1BDOiU9yx5~9kQ%G}zp004mb?}-EohyVwO$SX_tfB*mp3B?W@ zjXbm7oiKFSr4Ac-4Gx-|v{V9E#-6Roz26<;xR{;XB!|Go#m$d3?S7Ois9y*Pc5|qq zCSt4&CoUTMjaJ+`Z9AQxW)DXYk(G1%GDed(%!g2&vFT7GE}NN>heDu1)(5?ow?8&X zLv1i_yS8}SyNDt`l-1X=u_g`F8CiYF!8JuH#0)uG#w`^{UJHHQ{r~g;b1XA4y*^QW z8rmI7lhCp0uk@RhB!{@FL!Z^xA|rWbq2E8;{E!&$%kDryvGQ`XNrdjoLB)_`tT$TZ zfp`uycTzV@%H(vnPOj?7rUGJ$OZ@dKal8lskPr-#3qp$w`VCw#SH4i8w1ljfq;U

~!zU6IkOp=acx+^HB3ebNX`v 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 P$USx)i5**!pIQ1pd<+Y; literal 0 HcmV?d00001 diff --git a/docs/public/guides/Lunalytics_Discord_Create_Notification.webp b/docs/public/guides/Lunalytics_Discord_Create_Notification.webp new file mode 100644 index 0000000000000000000000000000000000000000..e2fb1d2df7ed72846fbe595c5f5cf881f5e07615 GIT binary patch literal 22686 zcmdSAW0Ymh)+V~swryA1&Pv<1ZQHhO+qP|6m6?@BrG4u?r~CU(_wBy_Z>$lqpA|9J zj))m^&L>8!u@oglMN`!Q05uUoc~yB1b!Y$p!017$-_HMz3H2{VHTyTF{0AHU8}s~w-JI>6|H{b!gB_I>h5lmWznIeOKd|9{U?Y3S zf8?Y8%JA4&yZqDFKk1*@!J62rDE<9~{F`wBP5?!K7(no!`TxEDo9qe!0FFlh03`mu z>kKmhfVL0-0CV%d>qzqf0EA!wpmpxQ>;79O_6Cjy|N1-7za_A#DFE=N3;=-B002!1K1Mm1&PfI7Vz8*pkS=BQR=>EdO{K%wRD2dh;5ALB-lp!SaKf@2}^+ z@6Q{*@Atj`UqdYp2a9s9G;wovX(8NZ4emC2rFc6i$!Y^6d3u8LpE0St4@>bVzfpz- z_^6J4RfH&zTk{;tqpUnKle{%h{lKsi9v5x~_Td^xg(GGxUhg$0eT zg!L#9X0{)q06LXvJX_HoqVYZ4q2YMm_%E{n@6Zhqw`*BHw7sM+j7oxA{)10{9=9IN zZbJcw(pNmKYz-%?RVN2%I4l%FWh(Hcfcjor`^ZcRaqCpQ{PA5n#bEG`)AzO&0`*r z-`sbP-^r!VnIZ1o{TX>aoCJ){7r!=f?{_Vdp5Gc|UEf8p+TO;mw;d_39Gs|VjtL2o zpXEX!3iEHOeaw>|aYEJv*%LtP zEV`V|zJ5;8W6PY=LntMd(w7@l>-?2SDKizi_L^=r0xlQ{opfGya1g%fDMEPoZ76A( zE;HLKP5-M`IS!6M8CCJAd?%sFx}Gh}Q_BKM1P1~&_C8&F85ggfu>>?B5+B3}fLXRx zF+4kO@VZA?a`mrA;wqu3uEzY_5Z9OFg89tVvIi_U@YqYLKTe1W_nmiBo9@#?qXL#Z zRcif%<%wTn&4pJMvQy<0Y}pZ$5-!(}M*O|=QVO8OdS_FF)sGk4d*vr83@h%U0^(|r zbKk~RBjkLHE`-aza>TTsjRm!(i0*t0ul}j&ZFnqH+Eag9psHe-ge_<1!G)U0OGS(H zJZJ4#^RerJ@~*E&=Qf|r=A0^wwcT~WetplmJOiVv>y#+(@}X74Iv1T^o=p#t=Gh2X zJ(N_Zoj4)7P{o2!90E^n&@wb_9njFmr0n{qgMTUd#r_;I+=rg?rhv5HM70AY?t#|r z<e8K$*H*CpGxndh``e^^(rms0SYluw;A#;e%geKSxx$2MgLbeH> z60iWIQXu)9fP8#!iaCcOhgi2FnQWR;bRHO~yYTo^gx>ruzc6Rx3~LyR9nQ_JBL~aE zJo$N*uUXRTfm^+FWGLNN5?+CgHVz4@nI~GfTVv`i7$iMJj6Ph(*hc>W+I%AzslP})fsy{tN>FyQr4 z(Bo>n!vhrNsJh0Y5?QK(hD_wq1G=D;@?&spmZVmX%1b_P<3iI*wByDCoT9c-;q*kF z9dR}+7Y<2C;==q>U!YC?agDXm5pO>!<{@gs6wX)>5eH#Kw4Pr!h0SAW`dP6x)%#1h zrnERAl3e8zMIB~!oS+01b1dyG&Qk87SPi5)TKT$614V{#ys)-zw5krLFs;MRZ901! z4DEuE%!Nc|GqG+y@YQdvE0-RAHD#M)2N1SWDvSH(`|%$Vtup8r zo&#I(Hjb|7?37HEf^h1W?`GGl&&mFwW-t4JM*de(+IM7?;aH);iQy1f=>Ean=ds_j zBx%fVyio#~^jLj=?rLdIBGM49#-V5^FFbtzY`3u@p=$|cazH!Tf}>2->rO|&VvJIFUzN=9roT3(MXMllhb&qae0dJ)XD?#L5fw7s$ zN0)D0|1z%x@v}knLe+!plwNrAFwgp$TOltx2SgvUu2}~`4{XLsKc-!_^DO~8KR+VP zW%ag4Iv7Kw^z1U6@|4))Z_5#Wy35w07R=wFYK!;WJ}`*IlAHKtr`*y73=z~+kCDKu z(r&%<8TlOW;Vtc~VI$@bs2Rg6U0tx)N&nxtN=6`=^9%e+C#O2bK4 z#=tBW(v;&fz}4mZcvfD=al7wkT38;QvVK_HJaX zzM@j<>$gqvlgZ2D_&ul|$wE})x2^G~oZIaz=&3!ATkl7EN%n?d%eUS>Oi$>=JHvVOq0~ zyiyZLeUh$7A{I7wV(1eq0Sl*+j8TW5k*(P$Nk$$+ZbZf(ETku+kB%|+s(Ip|2*G3@ zMA-y|PP1AxT{1I@sVb{H4A6~on3n&JlO{i0oWehJL%MmXwplHx|5x{eK#$k(o1@-S zSdc>PKtGH7V6ycys+1t6L_qx-qlj;Es1cv)tf_a1C8^tG@?Dj2OdrHVAmjKoaF6%1 z!=;({-)!?gLyzg4IRo_r?@WWc3xwl1aoye90owC_1jBB#htI(tCz^vul@%X7++h}N z_^icMUnj%`doDXEjn`=*k^ZwDnw*H%+tRgFc@+wDRDY7K`S;62cWsCy-7RR_b+QB; zn!1cwQ%$~DD;q=-*7d`laWjI+?7G?4e}~0?w5Z_elG>zRLtNE?L}{owI*_K?@{n;|ZT5vgxIX?@4?U8A|FKK)Y> zOU9saW8Jp%(gYQ-ft!+Xg?7we4;xKn0(nY!N^bQF|AYE;K*KcIPuyY8;$bEBjwpbZ ziyOO+!kv~J>ZYh+bJjO*6lQG=S(uh{6o1(?#qmBSSQl_L_zqLC)iE#zMj<;UC3t@h zIcb!`AC&!}gVDKtQ;U@aP8$50^KA|L7w7&L!=mfszibW-L(ZeI>LR7K{V%Nduh`C} zP$>*H{?+Rv1=qCDU-D@kUqrHHWi&YxKdLSHFOL2fh5lnbazL_$)tq!;VNP!5TmVnr zZa@3&jv1Ki_ISqsZ2^0~3z}86vuu~pG0Ga10e1O*qvsLYnSj1r_BFL>;qf>gmE&M+h^k01Y z%F1o(Pti(S```Tf7*~UH-rX}9vNM4aH-O18ApZh3O9vp5hCmiKc2fDr7XAlSH%?p2 z==Ho*Qr}w9+%GjGXNM`;^7ByfzlgCgLGnUnR~RcvF_HcRMT+LLb@h;XgS(5o!-$I$ z9x#XW)V*2WD+~i=%Vp6EqVK#2$y}Eua|4%~(bn`{C80kGn(ID$9j7qMgSx2H^oprh zt&DAf1(cw<@Q)9QC%WZOfP1+Y_HAL#2~$0WY{WU_=}xdx8dJB___9tPV{cY7IpnOF zfFm2l;j0s<=fAwB>7Jt%0Z6Od!F9n$S@EV-{o4@aC*MP`#AT`&d?P4^#)iU)j)5E6`WFARum{@1SU z9}BX?0>Mfj+-7?E5C1t2jCdJ}LRl8yQ19|~>SX`;-*(WCgMZx_x18-tL}%c?%qNLb zDEPergG$;?JG4lx4vM-wdtfI~!Wc;{VytqcwtjC*2-BY|>OTS^9^~$5hPK2;&N#kC zODXSuDAma}x065YxyE8e+aEfbc0FBh6>O-0lHnTE1p_`O1uN;lA?06I^LKZvC_{$f zeM!RcL&Ps(hWeUDw5E}0%c6VKlp&VBPLoO}8GgwP8BXVcL$Z?5RoIRC&*%JBX8_$V zyJXbheGaYMw>?kfR|EAQt_vv~PEmxIv69>+$NwVTsk{V|&hI zRh(h*;j8pd6b~UVk%FA03hzsH{Xvx^<9supIB^(@^H8YY_be3IbGbochO?MCZziv@ z^>*UUM<6@k$!Mdfjt1+-8(gL4igbQ+*Lm9|3w)hnSUhP@zOG5~3 zMH&x5R_yz*h~({jJ_jqx=%BVu{=SPBuP_EIS$JiIX*5o8S4 z-1#^&nwbJ5VF3#9PzB5Jt_%wp1FN3K@-~O6a%i^?LS(wtYS$-DxSH(Ls!E@THaSHT zFG6Y^@bBCzku*KDX7c>1W_Sen>aL&T;&`B{lJC;DZr@@UI5WO#4d{c{B3R7W6CO^& zAU`!nFUO2mkG=~`Ox@Gs6YMSVsEGYLyOHNQ0(fn>lZ0>Jp;LUNN(MNY2N)N%prjrt z`yc8|)R%5T)ft(av)t@tlH#xwF5YG?KK~eOMe<3*vrl~8=qfrad;tSs3PIrbPb6ex zluJ5DWiK&#Tz{BDI_)$I&){fJ#=%PT;;R;VQWEb_{)W(*1*(&M=iA$`>uii*K4D)H zXb~LS%LbYy9U_-)Oj={*Bx{F006v8@DP)TX$%pWwjWYuvody^V8UGHYcTx0M?YGzK zvJ4|z4WdgApq0XV;SQ0?Dul2(sJA0S(!Q>grGuzic-Ge?go_Nn+Ox1((tQ0T^AmWoQ%zY@N&nD+*XIH9G1EiKpRLE%2N_Zf=;qaZ(jVn$&+&4n?hkI4s94f zrbTIZS}j*TG`}zR(()ECv9cy^0yPWP_H6%Nj_K1~O>P(wRI0{^dbu>9;r>!Sp8YHgpSREgR-k0{pwrPsMb9{ z7fGF_Z8rEh|3hf+Bh$j?ZZoo!i-&des*k!nV@jSibWXS$!S7Lu^p5L6zVamY08CrE z(GC-G(V|rN9_gwUXffl?lc8$ROb|O)o+op8SsjMQc8!yY+C`^4#cST1AR)_+&Zc8V zl9Ousd%!DP+#lRM8#ITLMV4mC6pT<7e|im;7l!w^vuH@D%mbx^r$@;mXR;uB*7QUqx1t(~3N)LyIc-gc3Iy z)D&Sj+l1`laBM?ax(6agPn5uvt7)D$# zpDw%dG?DiA8m>N!tl7JOiR+Lkr!28>g8NTGBam?U=ewyovBhanlu#?KSB|nD4;1O8 zqV*A>RGIMb)Aord90@S$=6_HA9x`tthQr+#v1TX&Z~S$4TA5;>YWgLGFf3)JbL3g7Zi^V%|EdjGi_UM@$!5jShYY5UJ3a z5K;KcH4r>m9`#S&9NPE;p!On6j|z3?Zau@k@JSizxM3bZ*HkeGw!*e`cgr?c>B0UU z{a+phg#*+xPpSJ0Sb)j>h36qNflvg9%|T@V5&1~}R0+}SifB!)WJu%4`cLD511-TQ*P@2p~4317+6=WJrJ*e}0R~$ys{J zbUau`!jBzNp)yO%2+U(CHDdLFbS5vLP9E>{GdIpI7v?ucbb%K{sM51T>=5xsn_8vr zGVgrBQNn7)-^>l*eIl<ES40 ze#ylL(4xy$2y^koSN;Wg6=QM{D~0hA%~gO6H%v%S-mZA2^yliK1M_dJIiWgP zYa$y96MQ#$(=?2=XP69IgnR<}t?^o#TbWvc+7%3DAn4d&3*x^s7M|rY9bsJMTB3KF)MiSdu(<)FzlTO;ZMi zf>T(64lGUuzmDHuXi~FAX|U;MG4rMMRH{NEHT~)RilPO zy24C%`?@ar#CN}$<)CgL9ean4RFF9;jh%k$5vO$=OBLX7t6}T|5dZ+M0Bw{UlX7Y- zNC2g0{|+(6>m_i_dX4@`60&>+zt8tmkT+bW0CgWgv)K)DHwpDP9>0Gt000J(=Sm~w zZEuLDzE_QoWYJvVvU@;U2l~8$|5<}#7UhX{s(*0;3Nh;T4RLRE%5=JCU6AU3g+(L! zNYAc;!VGHv9JSx4sl73lPgTk8K<4mJSb3H>S~UqOSJym~SZWTf971@t{Uxb6CN`Tx z8`s7(6Skxn+-m*y9Vl^b*TdRQw|?LG4uh`tpJPM)_~dR zXAP|j!U}QN8a2eqS(&i{pi&C>doZkiMlGym|9z8MEI#PLlJve**9P`|?u4lUNL>Ut z0kVBmuME7aF1~41#X0oas|5&&xh`rDD~;IIZd*c$X$|v{xP5lKjhxj|U*7jfrv~*v ziRE>73iO*zG2@-`8%}&w13oXv%K=T}37Nm6x9~LK3E0f%T`rYv!7w;luNS69HI{-5 zbv$#l_nPC+`oVq$0kRYp6T|hkg2w5AYf3VuI*wEM`+=4i#Fc-8F0 ze6OLZ{r2LbxoMI5$|Ou{ZX89!8g8Frj&MjdL;m$+mTXibTPnJVBMr;cfsSeVP}^oA z*xq*Uia%Cwu9nl0wOz%oM~n;Js#OkArH474suat$*ZV%gZ!ybKBW#CL!#7tqJk=UTD!rDvQpB%5>?$a~x z;P+Nzk-rp5(E@P7B*kMbTB%y&6@SALJuN>vP*Jh;%1bbJMhxYJap-hm=$Prx{ed>| z&}0R_8GDw|nq|X;MM!SUJ}RWAEhe& zEL4o?f&m(qk8IHzo>Pl$NDnMK$0|T4P1_j4Cz(1KX)S$#CZ62{@3Cc$o&7ARPAq&X z<95uUvr1?3bB)v^s|%l5h{uas8r)Y~^Bfgf8XHBaq7ne54GxrK{v|#cvA-mVw{M01 z_?E&T2IbF?*V0@9?9mn~*gma|ZV^cr%Pl$J$q&Q-r5fBnHjS=ofqMxbp;F|unAMLq z!N<;6me-|51v`>@Ua0i<1rvGa0DI3xkMr}3kt5xU#_NnFIa>75f(Q6dk9nVTWz$sDNMch{$A2-OXN6hb5m1rp_hDks)-NA{51LRNe(?&=1Y6J`oLTOrlZ zb+vo;#9jmUyC~x`YvB*+KD7Gc->%{zsvjKW`RkH9aAD~*Ml$`o->t(wA^q!hK=1=B zZ{?QfUFNlX=kRO>X5|&Xc--|W^SKuL3?ufP5$)bBhI_Av?EU zagaGW`k@d*Qf2jkN(B!bqdi8VZs?|_a*lvWyI^7Y?n)HVqV;NpTp~wmFLk;Nzo)og zP;c8!9-+Q9rb!6+0aswPYgF{%4k}>z004469SUyD^p0?B6p?Xv2QAP=2;6&hYEm*$ ztPni*V=C^w4y)|F6V5Q|341uzv>l>iBzijeoB~vc9hjfaauI05;vkKFvaTZ|Q!R>~5Z6bR_UlWc)TT?h!geX|Q-T=L%zjK7rq1++y7DfVxzFGN znTVLg-6qDFCPIbjVp@%LG(O!p-|O6(yFV~VtnBxOhr_SG`MU-69H_8IJLoqbsP8CJ zpXikIa&+w2HKXY@A-E!;&lVulMEuKy4-w4lqK_3+DR(M6slD`Veum{an*w{^QppjD z5cUz?NSnmb$}NjNV}aJSh;XlUoI=Sl2gg(6i;Y#rv~8z$=KdgG5hJ+C$5lG1wY{*Q z{E)@?13i2ikW_$|Rqm^O{2EGY_*0wFxoq(%>SbmJx)&EJEP3UDO8tSf6!T{5$cZ}Cj-NZN#yk0o+8(T1tbvEQ|K1e&o{q+yd6Ls>GB#dxPe0V_v;3MKX zP%+|>M@io%723f$dDQDg(Op%`>W8u?@>#o{P34!QP9RR@iW@X=SS}!Gvx>+SSS+NH zae_8yqz#5qsOueT|s3Ba^ti z69Q$Jmcu)}m)A%9Y4RDa=&eh1Sfz?vp;A$J1!m zMa=eV_7{k{7OcRKdLQ?XQqv_Ls;e$BPW3LlAS&v&ljD3zAiDs*eaXF+U9Tb6VXhU6pia^|+_I0R}mx9o~G9=44g$pplXQdjpI8GaxlEPZzv<|ch8fMew?hXsF z)tLP9tWkO{85r0VuR?!fcZ=~e1Cu}u#kO>qjs!i)pecdaQJ#bloY6L7pJ$c9@Xh=+ zptjeo$I4(c)-k9wM#|X58&63z5|MHFOJb*pj|ge;)PluoOIJe52^ z-EL|4L32z83()G)@)eAeRcTwO`}oO3*b!hh273%Nh}r$|CrI?{lNExxj~8B@M(1l+ z(UER)G}rv=VvD{)Rr42={7&bLh-^IRctJwkhZl=>31-Dd(S3)$p73;4#?KEJ&(@_9 z*O*wRdK^%SdtO{cF7Q+YCC1p-bkBXDylthh6)4e4uHnY}cS1tF2$Zg>TU-1)ZZ#aB zqPO-l2Z|c14?=@v=Ol>x%a}vGpp{g8ZftHht*;{N+zNr4lJZ8M0u@bxR!Lke)shPh z@)L_IF{mq$>B?#1!ji>K+pnfO_N*7#*-4HYXO{~)!nS?!h27{H%!w0-)LBUjF3!x_ z2Ae~vR6(jJzW!KgCb_C$>wJ4i7*B01Jy8SHpcoLg@D;`2f?}WFU7<%q<=htw@gXPd z9N|D;7@fLQ$TLU5(XoAsg7e;b3C#A$IYspl-c7OhH}?bxylq7*9l+LH=Fw1#3l6N+ zze;}?kiDU4WYjdCinR55^8r_I5<`W9Ua=tA@j;D6OU%Pj;pi7^N(|Sq8>8WAtLSkc zUUOFp>5UKA`jt+@`9Zk)ihLpBVLkIZPF~6D$0jE+^5*%zp3hKICPF@0z(MAbG=1oG zmSZLe>*N!pbl9vBY;wMrJ8`&X=o(Nh?N`*6I?#ph635@#2T#$WY8-8S@Q`&@Nq}Ls zJsPq1fj2;)RdmD!eT_Fgs@r*kij+<6sL1939n559@^u0|ldp9C`h-7_^!PE$s9P*) z7-nrSuD^D6>;#y?O~#OzW+R@hq*QDCBlQDZWOC24(5l?F%%NZD#blzX3#K^52lqhQ zx5kp{c~seLPYDAFb-wB%?+N2`=e0dnw!xvq}_{Qc{ZR8|G-lU6QI^?#K zGdJX4!h4FILoEWez4SC&bFGCnisxO)F^tg^`yw~ zE}xE}eGA^uS2>QiWl;XX19$I3bh9QBkEHEMJ=#~P%(jng?B2q+nVZH1mYEbkI?rL8 zvG+5*>EfPG(QHhVN+(#~@W8^&zo+FHvQI2mWjN5g-y>&-qU_gMCTUsVkr7HBpcIz{ z%CK6%#^36s`A)@u)`pTv3ix^=dCeGE)VG z2!j}`N<3zqK#22}yQ;+{z8x5@#y)I6ovu(w|@HUpu ze_l;3W6zu!bO# zob)c%e@yJVYebJ@n;17d5-}W^!HrR6!WYnG#7O-FZghmNS)XT4k-eGyDN)5{hXMn^ z@B)s-BXIXhLxYO4YflO~P!2}^lH@f4VC=HRDLNQ} z7+%}x)~ZVtf)29Q2ANR&ZSTGHia{!t0)a~nq#lQ?UkRyu9#sZ6P}^_Z2@c67Ih zKfz!!=Q?EW7h~p>ixaQlg3D}{>~`wlIMJ_cwpCIpV-iTd-?-#KzxWWgRVr5@^3Hbf z`OXJ85V|}vKw(cWiGWHA)<&_GP&YWeh@WfrxP3dy`Ves4vJ>Mp^xE*7?Tj`+8p{mO zCM&PGAvBx*zz)YmGbY0yad@bwq^>=ll^13&F_f1)LiE;_jr6~E<) zOv`U$=cDGi>yGG_trun2DGclN7=S<{sY)tgP3*x^cuO)3?N0dvr9gLIJRZ-a( z*T?J5@?oxU&uk9>x=i6wSoda-uf!xb#oq@Li17LQUt7~!NJoHiLOa_~rg7HFF2eq$s}-tbr@Sv@94_E)~H zMr~MU8OTEOKij%P_gIXg1@Xwgkl0)O_eG>_)y)4jR|Z3PW|x%z~j&qD{t&Ba%)C8 zacA!8i?i4PIJFG1LO~GNMXaS#dLE^@DxmgpVI@7;w{KwuND?U%{lH78xhckF>^*kd zD4prJ)dw>e$ydY1of?6!k2EvSPIx{4IxKX3DZFM*@w`!FWXo`Vt|WhNAir0oSw+7N zIkt_^*~8a~EK!AFPwViLednMO(%Zk5D6Nx(Q6kmUsrD1Oy|$XXHN`*=a6gi=r-d6V z;1}JeG}4d%lJ~fY!PDFyJU!(9wTOJ?xWg?)IqZN`7gxVxCdaobrIxi|^+YQNf2_7DARi3Q5 zGpn+OYwDj40YU@Q=GL1(TZNot=c;`guuw9-k-QFx;o5`>qx!(;m#p)NnpuyhL*H~7 zO1W6VI?kDEa+dB%Dm{ggKQ6p2OS0lnkqvXX@JFdQ19@;z`H}b1jMwz*5A7Ydj3CzE}65>05$n7YqCfPL74|~9x+K}UK7qQ`3 zSict+QE02992;zg#AjK?(ezNhB zsO0_t2l_qXpR2`=YNZmy5Ial(yYnONkccZ7PSruE(|=2rODOkP@4(Rl#M5VO%x5tf zPBfx0r6)=?Ei6#H?BWMF!I%)CsXG#X)}-3J07eEsw>831GD5>xk2G!S@ z`tSjfS8C6bHV>%{Rtt2+hzW^V2zM3%H;w+9@;uIMR#6bxyz(8g#%Z zUAHqQ$w|q+)m72X1bo{kVR}{#rjwD2AkrjVUB!1K%9xhxy~&ZgN-{AUIEtMOY-%^N zkf6w23^L{%s*Cf81yi_0r0C+_=vGSIRajm&IDU=Q8j6-S!VP6WO#5&dlhz`y-()VE zdmdpSF378Jh6NRD4rari{){oDxr1Tc4Ch=(bU3vA> z@$u9d<1;!AOYrqe1N?Tg!DaXdXAWjrdbRFZKZIU++IZZHFr#Zsu@gR>LI^wa>Ka24 zP;n$b8N#=_=?)jRpV!0Oo&N=LJCdb^nr97XG$|$bVt^sqIpT&C;}6#q#;z%zj|t@1 z`a&L`*%>qOh!fb>?Pv>)&_x!Vbrf~z#Yxr~H&tB7-c5~m>F8qpQUb#>mPm83+cSw` z-WNGC;=yve$UFHI9HO=IxP{a2RG!N?btJgf@N+-5cC8wI(E z>+9I;wIr<^LL&)y6^{2$RP8H1P<{LYvr>%^o=bw0~wMX4M>deOozvzTn89`pua9~IpiYb3eZ^( zAJ&y1acnbwvP3FKkvwwu?!rwf>w7RO!d#O*NigRLBhASgFj9`uH&;H^R8W8?gmrV8 zamE)X|1pr6_&&1P%h7kTu}X}z`TXbiC+Ds^#TLc+vx9*E%o`z4r2xbeXJ^w24>>W; zdi++^K}w{H8-|QtXkLcpCth#HWkV zR=i9g3`+t}E)O=9J_%H%XW$_@lZt~sD3y)nys|F)KT3zp-o+XoW@Kt1ErW{f^*=%V zVt8rYBrln$+bMH3=4u54!ybo9Q-BH^7qw-hqp)(fdw(MU$r9vqga|7TY3D zXqL?$T(C$qnEC)SPY0$mml$&^xM9uDt_PJm*Y-5(BI~HzR+ec+Ci+beyWC9VIYeE? zeMD!Thu=~g8Mi4rK=5dA)d~yfL$}>Q?!)CxV}77x!jVz) zh)`5HE9M2WM}VsMH$ou?r!sFvWk<-dU{{-DS3xK-82UM1AN2s;J`FIlndWYYOEy|Eg}U6% zQ0Ad)$B^<5yU9Ij8h@brqQj75gG)*6Sftw4x$a$RZ0F&;i>7k?IUU4VcAi$7nKA$- z6+HnO)>&D?G8;j;gg~oh=BokvY(s^Qu8jmtK-Qd%PVOvmKb2 zG@1zKBcNsf`s!@R1LxWHmGTEesjQ0pCgXUr$w82buQj-=u0)I9oU}{H> zBZ@{QhFFyy2*q@vu}h7A4`WsjrAQ}XLz0lpgR_C^zBC3m zkQh6|SeySr+0V#E@8~DzNX<`i;<1|NhiZjAPUt%!5wOg*aG3Nllfv4@xMoF{i^!?v zcQyLyRh^kFym?bfjIIqU_UK=yBncvry@aK)+E&&GcNNVeJqJi5#8omSN7bXl2`eo6 z{>s%?oZcnVcjR^!`H9!?d2abADF}y$0V(82+zi%Da=6YHt62CWA6H)dBBL^dG8i@M z#&xGzldh5p1&f(~XnC{Aj5&i09!-J${BeJp!Iv-EA7((|Im+_1co7hrmG_59B&!zD zKlvRpZ!F3k=VZ*GKo`t4&Tkv7hXOSUF@`cm!#U{?8Wv7XgxeW1qg8fsWq{|z+5hY? zA?4@Z0^+Dxu~{c#9H0>j5fL_Lr?xNg+vh6ztym+3$ZW-0D!*(h@FSBkwTa&q;klbK zUDNAzi>XED;rB|>P-A8p&=`Lvr3ScLrwmIfr7?NK_Rb;^!H}MW-h~G0HxdbJ*m^P- zY-|h@WevGIS&Sf;S2iWLPV;;d@g;_uZ(Z#2pP({n8+Y{y!c&2dtw z&UPz^wcXJLoO5tf}9+wKg z;;1AM!}01sduceS^MfWQ8$9U)UzLIccH4-D&PIXkuR4nFcMizSI$(0OB@;$6-{tG6 zOutWCBVIWh5Pon+UZAMfA~gPAH}5wTW&>@R0n&BxnNAyEe|R+KJfc55QD&Ym`hkBD z4q{YeunID+*%0@?Pz%&I)?L>4zric{c#36BB@QDM z$#i8YXbHYoU^QUo*}+ReOQi`d!W}TgiaJDs4wiwwursg&p)DgMmBg{ns4iXg1UYkq z9iMcw3aVKZQgDPKxS#BR$o**0(>2b#VBDhvNLyp3OkmUITn$zDpmQTP2jR2j za7eKLDA5YHsXXvq4UUUAyegeJQt6~bqT?THt(w}j<|BXbX6$TF%4yv7E${VNAz9b> zg^G;Kj_r5qdX#8-A=@LBA4WZTl*;$(!HRqoB-Qvi+1#?1eT57ag?nL_s)lmpql=%f zl3;N8&m|cXGgVGl4-?l_^Ovv_B2|kp={Ud7wKc{sj5mP}=riQSV%rn{y1USE9mN?iv_^Si3BfD&d z_^)W^;v3(dtC33+T?()s> zMWcd=S+oQ*;&V!GV-bOmA8v#^EY=^^KC%#$UXmfVp*!K;wKfkY1|9(G0R_Jukhn1G&bK22W1|WU{ZWCfq)r2-_g% zfCbZT8_$}pa{1~$D`<#;Qw}h%2yV=f~lXvYJJBIJ*N{Jg-!O$8v2zCL**TyO|w7hl5h zMMZ`aUCJ^1ulAbi)ONCsXym{YU+P6BJ+7IbS_Q}+^Az*)sZ;}b1yFXQEDHhbT=qkz zeuZBM@%%^*3dqrAqr4m$z?dybF_tx$TJMa7xd+TO6!e-rbI{+J2O+Cq0H6s&rIDTL zXi5@Xkt;iT3%-gUmL;F_g=*VtcV;>^O1e_k`syEj`$FSWUMcEe3p%}AyS@T+Dl}31 z&d!CyvsBr-X(+8@>O*purynItCp+CBKK*n@!@t!Tbt~g%bjxN!Q!_++>pJ*H^!@J( zk-b&g7+V`sTfCnhi>%(q~A7`V*7L_;rICNR2Q8*HxpI?`Vlk)fcJzzI~wWMJiM z2#K7*wvNE%_))yJ!Jzj{Z;~^=u#lGA|I{JzR8maX0U0Bz4KzlH0GILnd53dy+>M{45EpLq9Gh_|6~jqN|={zhfDtNi;$ zbcX&o2dM_`;q!e}G4l^5Xe`09zB7zvivLtLcfeRMi5M!RVHJ-HLkLgYp@O3{?Tgn! z8U8|;rr+FS`I&&H*N-VEv9805AYr8pXB-dBOcQj#SeUoOFzUg>LJ)$0f9?44ZVG<7 z+*`ByVbTPO8C!KZ7H#5swj=^6xKfwj9EJ4r2CB(>w=9zM&ew@!dZ(?yfXskf=a#g! z@rcEyldp-Y^1%z)ubCw!$!u^Qr+I{J9?W~l30GTvM8qQ8)v84Owzsz!r}8!g#f|E< zJNd4}@LdmNp%lUAS*9h##ysK26Sj6|iK!DLne?4k#nWe{PMah$L8&3AJgnv=#O0hI zY~}_S0Uudi>MsBwkWJqXq4^j@IZ74tX6qHbnsKiX>NgNRs|^iz$S7rgxmW66m$D2% z8c7u+MqM2oAnp@WP=Ddx8r!+6=O%t|Yw^S5^G2$?>NnUe1kPQ+W>4i+s`H}&Uqp+$ zyp3`2hXxh63l;V_R7?f8mxwxC8RRM4#}dKTrl>$-sd9T_GZ5O;jTRgfHwQr(hziA= zj>nS&By+*r2x59UCiDkTJcvkO$VJZ&=HZ#`nGkp-{QPn;f^g;Mo2NQ~dmB0mmLK{V zW|9+AxvdkVM-CX*_dJ*-Fzj{rVvIZr(AZ;q_Hb#?o|M#8pZbyF{`}^)%8?9jd0_-_ zXk$Gd;n$`KZ3Vb2Vbr6ygGAdPZ;P{^|NX!j6J?035CB9-rj`>`T>SaEav4E>B4WJ? z-&Eait_=Wz^z%4;VITYj&oq+xMGEn8rT55!(4p_4!7M>5{7CCz06tI~tijw?m!Kw` z>W=>dle{?VIEN}K?ZT-S-=ZBhcf*+?ebt`yOs2XtWq53QG^^j}{qeV;62;kMXCze(Ei zFp_FsWtd`IbB|2Iz7ACHV64Rhf86mwOgAy3yX8GxT{gv(re4R`0kG7IZ?A_5nlZ)n z9|JiQQt|~sHCn1+=W}KRwN%FW*LI+3Q}a$RUEGMs#1`Qpng~5Vy~MElawnH+qO)It z)fC$Q__CWdQaknLsCIL!q6{*xu>;Eo>}M`0ciPdoN7qBvJ<;DS#>GZe;MtR(RKecFxs6I>lYWGZ7v{7uC#xT3+ISsKdz~Ap_cQX<=e0OPpNs@g54v z`!!SMi&t1p{a&Xy&iAC>44lkk%WYw>#@0@KT!&}q4#(*+K&a@~h~~Pbqc`7x1<9p` zie;bM=vjyU_OQmZ-lnd?1wo$r&wFbBZ`EGfy~PfLY-5QNL+*hJ`cc%k(mj)YW01hR zRq`~1K8p@Rw2e>$9cJMaUHFB$HF%|7xY=1zgkthDyB-H>mn;AvO?KbosXo1)BpwY64xH+ za#NgDoK7fW>1IDp_Wr+a2==`E_we=olw>0O<3=s3ai37Es%$!9PQQJ=z~j1#zRA%H zCIh_7TJStlZKcwV@#$%Z7_p*F7kF1nHw%j)z|#NEfw&;wl#JrQq`EHl&C4jd@rZ#? z>#pr;BQ(PlG6fnnQtrmRuKW_5tES=fiM~+AUdRo*kGy-NVRHZdu7a^ij)obXSx5wu z^v6lUTFtYJAXb-mLIAga{1O5;ir|h;k)PzmJhB-0j9s^l?~iBOC5WF&1N75Jb@8O{ z;bc3P&rHw7Wy+)BK~076ig)A+K-w4*(%qLeD75!7Km7A1z`?i3;s1OoRc&pTTbez9 z&KIUBP}k=~Tee2HLc61AH1m>OG`29kml53YDe~#K;G1Lh1s~e999^FwJY)kjOyU&F zq}$x#r^A|)u}auQv-_$bMtqcCx`kQ|sx)pcqx&^YiCkcwk9ImHS`qI(Nv#`o)yY*7zfkZzCwx+j9#P@1zFi}dE)O^+=2}q zVQbm+WaE|pPXJgIr|Q9{L+P48%iPmhv$Jkz>nj*MD~utD_=Xyh97Q1&I_7Qrx$G0r zLM|G36l(+*u9jd!0pjMdu0Wd4-zedtg~|Jl)V?W%kfG^skFB<~Ha;tL`E_<&d( zaVoi2jLam{^pqCHI4-}V=*xEqbv#@$-->S52f5iO649~Uk`~v9T)p;pkAww+$THNSoyV+Xa zVf<1^4c#lL1*NfKdx?;+rhUch2VUL{y{8;42N zZLnwKCc)q5~dQrDCgNf~t+WcEYf3K%81*sH$TcbZKq=cs{jHA9PEcUbdI$Bzg%B{GL(p+^l40&! zIWF*XjAxqH9Mw}fm_Psk0Al0qi65mFJyy~o#FF6+A7wO$n!{Tnj*~`i7}soqT4}*A zD+$Z?FotVU3K!xt)*wxNLuq5e`!HpZ=zI&Giu|zTZ)MQoE8V{NzyJXWcBJV!6j91P z;*L@G6mpNaqm+Hc9HZ_izN8C|7??;%>vTafNvo8P`B~M+XUh-ooZnl2{ z<%i=lfbY?vKL@fw+7;2Mj9!A&uX5ws^amNkUetV5{ztpa6Wn(|ulSh{F0D!&;gMo-M(|u;_{lw3s6_VPBRsB0Ax&GL@cAbun|2$1N0GD9_BnI;AR+S(nhteo(n8(7E*QG*CUKOG5=~E zI@nPHVfNfj;LWs^__pAo?!qJJ>+8nf7_@3)G`WQfEM}kNdjzpCGsd<9{apo9pa2V% zkjit49e(X(X1KA_(j4Ka000bVsNr-(72>1JGu5YF^}Bv zrIo^yhp`LVt5>;pA2UgE!6u65_ECh!9G-GcWr_W{gdZswBiCZyl&}SpQz$wy)WGf= zTc`!~lgp>MLd&EQy!eY~y?Gc+m=G#z6#! zQ$a~YbLM=Qb2!P@eKePY`b^@g&Z5^Q5GoO1G0rIswk5A%v2cvn^3lV)*PazgfZv1FJ@^2?qU_ldd5P{TDt4?Jh#M zC+=8qWxZVX)?%l%g6J5YtB15}`Sc~1mIM(A-o(6O3}0R^GhJ6xVi+*zo+@k1`zBXI z3VoPdQJeKnsWHJs@XCWE7rbp&>rsr#gNvZF4~t;Zd6-*QF?0m9Sjvyvd1Qyw@9;Ip zlQrSUU>j4UU$H6~2=xmjSZk!00`JGi5P3Fg1rN*FA)$zyEOV>c9nKOp{-#<-SGm%x zx1VBkPb41%HN2s=iKRdN>v`qJ#VZT9JWx01>%p1G^`;y?$-J`L&MUQ~v(fqfNWYh8 z0%?9Dbcly{!V(gTx)Wx6zfqxSPQo7Rg-*c?zGb*AxLzoR31~)Mem2=bQGl(lDc)*# z91br?)vG>jf#khZurSEPu8fZwt}tRJfiec;x;u+g>B$Cq3LY?YDUcfgT|)pr><)ab z@A@Dn!@2Xd=rzo|$=utjuT&xi=lx5_bH#^qoPzpY5CV!KrW7^1AVhN?6qQczxMs z(}|e6D~qK)5L0xK;*uR=pNN!Y_->5q5IOz}0vF{7Ep;>G&@W!Y=A8YF0p z53pPnd)YUBhIHGw{a=GwXTdeOJm;KUCu$sh#p=3o<7a1vs_j9;&DMgZ0RPxBTdQ3H zqvWsu13K0`%l_JQ13Ag|=Z)YxcdgkU)ZfDpVFDE}1*k1gCBZ~1PU18CzN=d`MX-T& zuD1sHj?u-#z_2b1?}0nHk_QfH-;#kjZnGfLTNZ$GIfIu-)gOQvOPhv$@cuI9EGAZ3 zyH=w*qB^4ut+Cr|EQtC-{mN{R@`)haaDniM){18j09L&JCNncHJWvcu+Z;yWzqQO~ zd1MW&oWjXFg4CgE#^~$^$W&5x=IdqQj%9QMd1bJ7U`BvY12maO+vA{X>gkO^x)PFw zS~r{`qWGyPBopR>>6n3)J!C=UX}=8Hh+vo}v{ zgH&VE%XSwIXFe-PBNCb4BAy#v|DJH>f7wjn(-pi+!4eFBFVLdQ`O$#V+27?9<;rPT zj(Ybj^AlFMxCnS%-L;i3?Q>E=B>WV=G77>lPuDRR=$pl!{8M4R*l)~lAMhSi_88ZG z<6ipH5Cy!Jb^fi;;e2;Id;4$Y&_NjbKO$`-*&Ck)g8~Pl1Hp@U-pf1wd;=E{u2H*< z(+BXk)X>tTgl1s85r&Bi(JAO|?9elBRl5ldjC0#JafA~k=ImDFs;X{4>2`fLfGKfS zOtj9h@yi@jb!Vvdb!hOyx5p$vmJWr>ASfW}*VA*D61+Mp#3j9Q(uqtCoXdDXNr^{? zJM1pF0fY58NRyw8+2!_Hb;$v-7p#V)Ysx4Mad+zDpni0M1DCe4J({WY%z4yq?K68H z^Aw%WCq$vX`_qH_dfkr|rTT%TKyAe^dBrfV7jXYqPN75fQxFKSKG{X#KtpzYfUFTw z&9*x9?XPQ|UZpPY&ehEuf}q!zwWMz(GN%DjR^US$aE^uyprZBcY^DOIOw1j{cu|kF zd~x3kMV;$kgrc=8xB4$5%3+ero*!(#jk4Y%0m~`oSq5ojRJc6U3tK%TQDd} zL^rJq^ZKC=Sw$sG1fyl@2Z&*qF_8dkx1FTq$NS8Mk%1^bAy#r*V|z2J9;*bNj7|wp zx$L?C$qu}_I||CB6pnIGBTR;-?Ace8$u#k`^7$LaOL4^-4=% z7Km-Okx%d5pk#HuGtgC=9S!j>jY+@9=&<$CyP%<_>KPZ3o+wXfwUv?lP*punfY^{N zY)~+y`BvT?y?}2i)2bKIQQCbFk(jQ7XM-T+ zX@5Lmjv$B^s&(wGmC92Lgl_1X$-QWlQ77;J(eEHkG=HztB-Ru zg@P~zkOo*xe#(D^op120EaG<3$Bh^g8r*052t^Vdf`Fb4xAFBM5XMj_vd zUA_4#*UFWdcr_gL`7C5QQAD5f;K zBje&lsITyV-~lF8L@vs#H%&wjsnpU+AhA&_=$!@o zQ5>cRZn&%9u**}~6j!^O_t^yePd9%cncht6jSze{y+(=m}+DYT#E zv%9m!56acA`R z-+^#Lg=r&|I&2=t87UTbMV=a}AzaN?xyz%%#AESay{ifgo^u2-%Gt_gCuf*ppS0~)L2_%A#mo{U7rB=l@{qv# zqa;r1&NmB_O=-0l+Z(Q(o$lp9^k!>ApegP7{@VvV@aIOso zZn2i6Do5&BN=-%e`-C*ZJQu3~008Q!8y6@#CUkQgD^mp;jFx?^3gpi`WaJ@e0004> zl^s#_H~*t8B(ysfyCpK!&4d{sN|}%?y+7(>3he*@9c#qgCP!N&Hx5zv6mpNaqm+Hc z9HZ_izN8C}$KH`p1=R8ymiU0rr(AgZgL-Edp`l_{Q)CU@4H|P$@;z-Ir zv=WzcKa5B&8wAJuq_vKE_(LU3HGt~$_T3?+KfY@)&XS1`fwM!|u=e>#z4cYrVfzwp zjlPKOQl-C~OVO;JE6SSw&j0lG?p|tXWxq?i^CFAQRX@+o{6Ui*!JXd<74t2@wgVX; z5BK&LyMiG|Pir5v=5e*P$hDzInd!oQ^38SKp2-LU{RL2P6$I1c=g-4rz4Bkl>(|SS zxaVf4;?sam28Uz41;NX*BJS{5UM^ovM7e5}{90^{A zyl4d`*>AB_zly77@)vnHc~F(jQ{f=H=z0K(R0^x(SOETpJjiM{YtyGhbXBjMXsU9Jx!iLu4A#DQ2;Dn{uRq46(k;c1zCyFS{WJFCP;xMp(RZeh7A`rf zh{rtuUIiBZ4dxz1KX$-bMlr}r|AI%p?D6$AYNVoVc9B$f`~HbR$L04gi=L+KM#6Xj z^#-L0)Jn6@C7nqVlTr~spbdZwxBWJF|L<+!fmxw;Ch08DLDu0h`&B;iZleX#iRykk zdv83z?J>Cr5ek7dI06DjwlWxkVQJ4HKE*s5WrOHxndOsYq;xS34@!Vxeu?n?6iGNcKIG3I^hRx_r*NP?- zaTnBTeQI{?A%V)0Cn157Mc|}P$~eNXB~uq{Q%mvNDB_h|v9K8lO~m!ZSzi4tp;CO- zpTUi>0#urVE1&6c3083DaySD{(tF5}=lR1n?@LIF+!p6?5iZh>TU;Z-7>TjM4O1UB z5+8Z0mepE+q#`M@K7cj5_+#zq>+b#bIYkqI24#Q-{xPySwf{9c8HICf^Tx@V2L?+L z-Vr;&G(%x?PEAQ?oIleP-5_Dji2fK?!r<)dyc!Rr&GP{MdEip-TGd0RK@#Xa^NO3rO|l;DF@oM~K7Qb;Shto=eo; z4 VLoi-Vk3{A7Y&lCt=ThoG005 Date: Sun, 17 Nov 2024 00:54:09 +0000 Subject: [PATCH 2/3] Moves to new config and setup system --- docs/.vitepress/config.mts | 1 + docs/internals/config.md | 32 +++++++++++++++ package-lock.json | 2 +- package.json | 5 ++- scripts/basic_setup.js | 50 +++++++++++++++++++++++ scripts/loadEnv.js | 31 --------------- scripts/migrations/index.js | 2 - scripts/reset.js | 2 - scripts/setup.js | 2 +- server/cache/index.js | 6 ++- server/database/sqlite/setup.js | 5 ++- server/index.js | 19 ++++----- server/middleware/demo.js | 9 ++--- server/utils/config.js | 70 +++++++++++++++++++++++++++++++++ server/utils/jwt.js | 9 ++--- 15 files changed, 184 insertions(+), 61 deletions(-) create mode 100644 docs/internals/config.md create mode 100644 scripts/basic_setup.js delete mode 100644 scripts/loadEnv.js create mode 100644 server/utils/config.js diff --git a/docs/.vitepress/config.mts b/docs/.vitepress/config.mts index a58741f..04f11e5 100644 --- a/docs/.vitepress/config.mts +++ b/docs/.vitepress/config.mts @@ -58,6 +58,7 @@ export default defineConfig({ // { text: 'Overview', link: '/internals/overview' }, { text: 'Changelog', link: '/internals/changelog' }, // { text: 'Flows', link: '/internals/flows' }, + { text: 'Config', link: '/internals/config' }, { text: 'Notifications', link: '/internals/notifications' }, { text: 'Permissions', link: '/internals/permissions' }, { text: 'Roadmap', link: '/internals/roadmap' }, diff --git a/docs/internals/config.md b/docs/internals/config.md new file mode 100644 index 0000000..a68bbd9 --- /dev/null +++ b/docs/internals/config.md @@ -0,0 +1,32 @@ +--- +aside: false +--- + +# Config + +Configurations are used to set up the server and database. The configurations are stored in a JSON file called `config.json` in the root directory of the project. + +## Config variables + +| Key | Type | Default | Reqiured | Description | +| ------------- | ------- | ------------------------------ | -------- | -------------------------------------------------------------------- | +| cors | String | [] | false | Comma separated list of domains to allow CORS requests from | +| database | Object | {"name": "lunalytics"} | false | Name of the database to use | +| jwtSecret | String | Random UUID | false | Secret key used to sign/verify JWT tokens | +| isDemo | boolean | false | false | Set to `enabled` to enable demo mode | +| migrationType | String | "automatic" | false | Type of migration to run. Can be either "automatic" or "manual" | +| port | Number | 2308 | false | Port to run the server on | +| version | String | Current version of npm package | false | Version of Lunalytics, used to apply migrations scripts for database | + +### Example config.json + +```json +{ + "jwtSecret": "lunalyticsJwtSecretKeyHerePlease", + "port": 2308, + "database": { "name": "lunalytics" }, + "isDemo": false, + "cors": ["http://localhost:3000", "http://localhost:8080"], + "version": "0.6.0" +} +``` diff --git a/package-lock.json b/package-lock.json index 398d7f0..817516b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "lunalytics", - "version": "0.6.1", + "version": "0.6.2", "lockfileVersion": 3, "requires": true, "packages": { diff --git a/package.json b/package.json index 44c6af5..2c24f6d 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "lunalytics", - "version": "0.6.1", + "version": "0.6.2", "description": "Open source Node.js server/website monitoring tool", "private": true, "author": "KSJaay ", @@ -27,7 +27,8 @@ "preview": "vite preview", "reset:password": "node ./scripts/reset.js", "server:watch": "nodemon --delay 2 --watch server --watch shared ./server/index.js", - "setup": "npm install && node ./scripts/setup.js && npm run build", + "setup": "npm install && node ./scripts/basic_setup.js && npm run build", + "setup:advance": "npm install && node ./scripts/setup.js && npm run build", "start": "cross-env NODE_ENV=production node server/index.js", "docs:dev": "vitepress dev docs", "docs:build": "vitepress build docs", diff --git a/scripts/basic_setup.js b/scripts/basic_setup.js new file mode 100644 index 0000000..14ff660 --- /dev/null +++ b/scripts/basic_setup.js @@ -0,0 +1,50 @@ +// import dependencies +import fs from 'fs'; +import path from 'path'; +import { v4 as uuidv4 } from 'uuid'; + +// import local files +import logger from '../server/utils/logger.js'; +import { loadJSON } from '../shared/parseJson.js'; +const packageJson = loadJSON('../package.json'); + +const configExists = () => { + const configPath = path.join(process.cwd(), 'config.json'); + return fs.existsSync(configPath); +}; + +if (configExists()) { + logger.error('SETUP', { + message: + 'Configuration file already exists. Please manually edit to overwrite or delete the file.', + }); + process.exit(0); +} + +try { + logger.info('SETUP', { message: 'Setting up application...' }); + + // write to config.json file + const configPath = path.join(process.cwd(), 'config.json'); + const config = { + port: 2308, + database: { name: 'lunalytics' }, + jwtSecret: uuidv4(), + migrationType: 'automatic', + version: packageJson.version, + }; + + fs.writeFileSync(configPath, JSON.stringify(config, null, 2)); + + logger.info('SETUP', { message: 'Application setup successfully.' }); + + process.exit(0); +} catch (error) { + logger.error('SETUP', { + message: 'Unable to setup application. Please try again.', + error: error.message, + stack: error.stack, + }); + + process.exit(1); +} diff --git a/scripts/loadEnv.js b/scripts/loadEnv.js deleted file mode 100644 index 6e3cf3b..0000000 --- a/scripts/loadEnv.js +++ /dev/null @@ -1,31 +0,0 @@ -import { existsSync, readFileSync } from 'fs'; -import path from 'path'; -import logger from '../server/utils/logger.js'; - -const configPath = path.join(process.cwd(), 'config.json'); - -if (!existsSync(configPath)) { - logger.info('SETUP', { - message: - 'Configuration file not found. Please run "npm run setup" (or "yarn setup") to create it.', - }); - process.exit(1); -} - -const config = JSON.parse(readFileSync(configPath, 'utf-8')); - -process.env.PORT = config.port; -process.env.JWT_SECRET = config.jwtSecret; -process.env.IS_DEMO = config.isDemo ? 'enabled' : 'disabled'; -process.env.DATABASE_NAME = config.database?.name; -process.env.CORS_LIST = config.cors; - -if (process.env.NODE_ENV === 'test') { - process.env.DATABASE_NAME = 'e2e-test'; - - logger.info('SETUP', { - message: 'Changed database name to "e2e-test" for testing purposes.', - }); -} - -logger.info('SETUP', { message: 'Environment variables loaded successfully.' }); diff --git a/scripts/migrations/index.js b/scripts/migrations/index.js index e518354..f43bf8b 100644 --- a/scripts/migrations/index.js +++ b/scripts/migrations/index.js @@ -1,5 +1,3 @@ -import '../../scripts/loadEnv.js'; - // import local files import { migrate as migrateTcpUpdate } from './tcpUpdate-0-4-0.js'; import { migrate as migrateNotifications } from './notifications-0-6-0.js'; diff --git a/scripts/reset.js b/scripts/reset.js index 687d036..4863263 100644 --- a/scripts/reset.js +++ b/scripts/reset.js @@ -1,5 +1,3 @@ -import '../scripts/loadEnv.js'; - // import dependencies import inquirer from 'inquirer'; diff --git a/scripts/setup.js b/scripts/setup.js index 0180de3..e108d11 100644 --- a/scripts/setup.js +++ b/scripts/setup.js @@ -94,7 +94,7 @@ inquirer }) .catch((error) => { logger.error('SETUP', { - message: 'Enable to setup application. Please try again.', + message: 'Unable to setup application. Please try again.', error: error.message, stack: error.stack, }); diff --git a/server/cache/index.js b/server/cache/index.js index 4b4b674..771de8f 100644 --- a/server/cache/index.js +++ b/server/cache/index.js @@ -8,6 +8,7 @@ import httpStatusCheck from '../tools/httpStatus.js'; import tcpStatusCheck from '../tools/tcpPing.js'; import Collection from '../../shared/utils/collection.js'; import NotificationServices from '../notifications/index.js'; +import logger from '../utils/logger.js'; class Master { constructor() { @@ -148,7 +149,10 @@ class Master { await service.sendRecovery(notification, monitor, heartbeat); } } catch (error) { - console.log(error); + logger.error('Notification - sendNotification', { + error: error.message, + stack: error.stack, + }); } } } diff --git a/server/database/sqlite/setup.js b/server/database/sqlite/setup.js index 740d5ee..9690413 100644 --- a/server/database/sqlite/setup.js +++ b/server/database/sqlite/setup.js @@ -2,6 +2,9 @@ import { existsSync, closeSync, openSync } from 'fs'; import knex from 'knex'; import logger from '../../utils/logger.js'; +import config from '../../utils/config.js'; + +const configDatabaseName = config.get('database')?.name || 'lunalytics'; export class SQLite { constructor() { @@ -12,7 +15,7 @@ export class SQLite { if (this.client) return this.client; const path = `${process.cwd()}/server/database/sqlite/${ - databaseName || process.env.DATABASE_NAME || 'lunalytics' + databaseName || configDatabaseName || 'lunalytics' }.db`; if (!existsSync(path)) { diff --git a/server/index.js b/server/index.js index 349cab7..d4f689f 100644 --- a/server/index.js +++ b/server/index.js @@ -1,5 +1,3 @@ -import '../scripts/loadEnv.js'; - // import dependencies import express from 'express'; import cors from 'cors'; @@ -15,9 +13,14 @@ import initialiseCronJobs from './utils/cron.js'; import authorization from './middleware/authorization.js'; import migrateDatabase from '../scripts/migrate.js'; import isDemo from './middleware/demo.js'; +import config from './utils/config.js'; const app = express(); +const corsList = config.get('cors'); +const isDemoMode = config.get('isDemo'); +const port = config.get('port'); + const init = async () => { // connect to database and setup database tables await SQLite.connect(); @@ -44,14 +47,12 @@ const init = async () => { app.use( cors({ credentials: true, - origin: process.env.CORS_LIST?.split(',') || ['http://localhost:3000'], + origin: corsList || ['http://localhost:3000'], }) ); } else { - if (process.env.CORS_LIST) { - app.use( - cors({ credentials: true, origin: process.env.CORS_LIST?.split(',') }) - ); + if (corsList) { + app.use(cors({ credentials: true, origin: corsList })); } logger.info('Express', { message: 'Serving production static files' }); @@ -62,7 +63,7 @@ const init = async () => { return res.status(200).send('Everything looks good :D'); }); - if (process.env.IS_DEMO === 'enabled') { + if (isDemoMode) { app.get('/api/kanban', (req, res) => { return res.sendFile(path.join(process.cwd(), '/public/kanban.json')); }); @@ -83,7 +84,7 @@ const init = async () => { } // Start the server - const server_port = process.env.PORT || 2308; + const server_port = port || 2308; app.listen(server_port, () => { logger.info('Express', { message: `Server is running on port ${server_port}`, diff --git a/server/middleware/demo.js b/server/middleware/demo.js index 8fb20c3..7606070 100644 --- a/server/middleware/demo.js +++ b/server/middleware/demo.js @@ -1,14 +1,13 @@ import { getDemoUser } from '../database/queries/user.js'; import { setDemoCookie } from '../../shared/utils/cookies.js'; +import config from '../utils/config.js'; + +const isDemoMode = config.get('isDemo'); const isDemo = async (request, response, next) => { const { access_token } = request.cookies; - if ( - process.env.NODE_ENV === 'production' && - process.env.IS_DEMO === 'enabled' && - !access_token - ) { + if (process.env.NODE_ENV === 'production' && isDemoMode && !access_token) { if ( !request.url.startsWith('/register') && !request.url.startsWith('/login') diff --git a/server/utils/config.js b/server/utils/config.js new file mode 100644 index 0000000..aa0f132 --- /dev/null +++ b/server/utils/config.js @@ -0,0 +1,70 @@ +import fs from 'fs'; +import logger from './logger.js'; + +class Config { + constructor() { + this.configPath = `${process.cwd()}/config.json`; + this.config = {}; + + try { + fs.watch(this.configPath, { persistent: false }, (eventType) => { + if (eventType === 'change') { + this.readConfigFile(); + } + }); + } catch (error) { + logger.error('CONFIG', { + message: error?.message, + stack: error?.stack, + }); + } + + logger.info('CONFIG', { message: 'Loading configuration...' }); + + this.readConfigFile(); + } + + readConfigFile() { + if (!fs.existsSync(this.configPath)) { + logger.error('CONFIG', { + message: + 'Configuration file not found. Please run "npm run setup" (or "yarn setup" or "pnpm setup") to create it.', + }); + process.exit(1); + } + + const fileData = fs.readFileSync(this.configPath); + + try { + this.config = JSON.parse(fileData); + process.env.VITE_API_URL = `http://localhost:${this.config.port}`; + + if (process.env.NODE_ENV === 'test') { + if (!this.config.database) this.config.database = {}; + this.config.database.name = 'e2e-test'; + + logger.info('CONFIG', { + message: 'Changed database name to "e2e-test" for testing purposes.', + }); + } + + logger.info('CONFIG', { + message: 'Configuration has been setup successfully.', + }); + } catch (jsonError) { + logger.error(`CONFIG`, { + message: 'Unable to parse config file JSON', + jsonError, + }); + } + } + + get(key) { + const value = this.config[key]; + return value; + } +} + +const config = new Config(); + +export default config; diff --git a/server/utils/jwt.js b/server/utils/jwt.js index 5fd5f4e..c615d2c 100644 --- a/server/utils/jwt.js +++ b/server/utils/jwt.js @@ -3,12 +3,12 @@ import jwt from 'jsonwebtoken'; // import local files import logger from './logger.js'; +import config from './config.js'; + +const jwtSecret = config.get('jwtSecret'); const verifyCookie = (value) => { try { - const jwtSecret = - process.env.JWT_SECRET || 'lunalyticsJwtSecretKeyHerePlease'; - let token = jwt.verify(value, jwtSecret, { algorithms: ['HS256'], }); @@ -24,9 +24,6 @@ const verifyCookie = (value) => { const signCookie = (value) => { try { - const jwtSecret = - process.env.JWT_SECRET || 'lunalyticsJwtSecretKeyHerePlease'; - let token = jwt.sign(value, jwtSecret, { expiresIn: 2592000, }); From 73c90abfc4dcafebc3fc18ac440aee3355ad8352 Mon Sep 17 00:00:00 2001 From: ksjaay Date: Sun, 17 Nov 2024 21:46:48 +0000 Subject: [PATCH 3/3] Adds new mobile menu for filtering --- app/components/home/menu/mobile.jsx | 88 +++++++++++-------- app/components/home/menu/mobile/layout.jsx | 71 +++++++++++++++ app/components/home/menu/mobile/status.jsx | 73 +++++++++++++++ app/components/home/menu/styles.scss | 6 -- app/components/icons/index.jsx | 2 + app/components/navigation/left.scss | 9 +- app/components/notifications/menu/styles.scss | 6 -- app/main.jsx | 1 + server/utils/config.js | 2 +- 9 files changed, 201 insertions(+), 57 deletions(-) create mode 100644 app/components/home/menu/mobile/layout.jsx create mode 100644 app/components/home/menu/mobile/status.jsx diff --git a/app/components/home/menu/mobile.jsx b/app/components/home/menu/mobile.jsx index 612425a..9ace574 100644 --- a/app/components/home/menu/mobile.jsx +++ b/app/components/home/menu/mobile.jsx @@ -1,12 +1,14 @@ // import dependencies import PropTypes from 'prop-types'; +import { FaCog, FaPlus } from 'react-icons/fa'; import { observer } from 'mobx-react-lite'; // import local files -import useDropdown from '../../../hooks/useDropdown'; -import { FaEllipsisVertical } from '../../icons'; -import Dropdown from '../../ui/dropdown'; import useContextStore from '../../../context'; +import Modal from '../../ui/modal'; +import Button from '../../ui/button'; +import HomeMobileMenuStatus from './mobile/status'; +import HomeMobileMenuLayout from './mobile/layout'; import MonitorConfigureModal from '../../modal/monitor/configure'; const HomeMenuMobile = ({ handleReset }) => { @@ -15,40 +17,54 @@ const HomeMenuMobile = ({ handleReset }) => { globalStore: { addMonitor }, } = useContextStore(); - const { toggleDropdown, dropdownIsOpen } = useDropdown(true); return ( - - - - - - - openModal( - , - false - ) - } - > - Add Monitor - - { - handleReset(); - toggleDropdown(); - }} - > - Reset - - - + + + + Close + { + handleReset(); + closeModal(); + }} + > + Reset + + + , + false + ); + }} + /> ); }; diff --git a/app/components/home/menu/mobile/layout.jsx b/app/components/home/menu/mobile/layout.jsx new file mode 100644 index 0000000..7e00200 --- /dev/null +++ b/app/components/home/menu/mobile/layout.jsx @@ -0,0 +1,71 @@ +// import dependencies +import { observer } from 'mobx-react-lite'; + +// import local files +import useDropdown from '../../../../hooks/useDropdown'; +import Dropdown from '../../../ui/dropdown'; +import useLocalStorageContext from '../../../../hooks/useLocalstorage'; +import { FaBars, IoGrid } from '../../../icons'; + +const views = [ + { + text: 'Cards', + id: 'cards', + icon: , + }, + { + text: 'Compact', + id: 'compact', + icon: , + }, +]; + +const HomeMobileMenuLayout = () => { + const { toggleDropdown, dropdownIsOpen } = useDropdown(true); + + const { layout, setLayout } = useLocalStorageContext(); + + const dropdownItems = views.map((view) => ( + { + setLayout(view.id); + toggleDropdown(); + }} + showDot + isSelected={layout === view.id} + dotColor="primary" + > +

+ {view.icon} + {view.text} +
+ + )); + + return ( + + + {layout.charAt(0).toUpperCase() + layout.slice(1)} + + + {dropdownItems} + + + ); +}; + +HomeMobileMenuLayout.displayName = 'HomeMobileMenuLayout'; + +HomeMobileMenuLayout.propTypes = {}; + +export default observer(HomeMobileMenuLayout); diff --git a/app/components/home/menu/mobile/status.jsx b/app/components/home/menu/mobile/status.jsx new file mode 100644 index 0000000..5b59113 --- /dev/null +++ b/app/components/home/menu/mobile/status.jsx @@ -0,0 +1,73 @@ +// import local files +import useDropdown from '../../../../hooks/useDropdown'; +import Dropdown from '../../../ui/dropdown'; +import useLocalStorageContext from '../../../../hooks/useLocalstorage'; + +import { HiStatusOffline, HiStatusOnline, FaBars } from '../../../icons'; + +const statusOptions = [ + { + text: 'All', + id: 'all', + icon: , + }, + { + text: 'Up', + id: 'up', + icon: , + }, + { + text: 'Down', + id: 'down', + icon: , + }, +]; + +const HomeMobileMenuStatus = () => { + const { toggleDropdown, dropdownIsOpen } = useDropdown(true); + + const { status, setStatus } = useLocalStorageContext(); + + const dropdownItems = statusOptions.map((view) => ( + { + setStatus(view.id); + toggleDropdown(); + }} + showDot + isSelected={status === view.id} + > +
+ {view.icon} + {view.text} +
+
+ )); + + return ( + + + {status.charAt(0).toUpperCase() + status.slice(1)} + + + {dropdownItems} + + + ); +}; + +HomeMobileMenuStatus.displayName = 'HomeMobileMenuStatus'; + +HomeMobileMenuStatus.propTypes = {}; + +export default HomeMobileMenuStatus; diff --git a/app/components/home/menu/styles.scss b/app/components/home/menu/styles.scss index cc932e4..76f5165 100644 --- a/app/components/home/menu/styles.scss +++ b/app/components/home/menu/styles.scss @@ -27,12 +27,6 @@ display: none; } -@include tablet { - #home-menu-status { - display: none; - } -} - @include mobile { .home-menu-buttons { display: none; diff --git a/app/components/icons/index.jsx b/app/components/icons/index.jsx index 93f27d9..68ddae7 100644 --- a/app/components/icons/index.jsx +++ b/app/components/icons/index.jsx @@ -22,6 +22,7 @@ import { FaCheck, FaBars, FaTrashCan, + FaFilter, } from 'react-icons/fa6'; import { IoArrowBack, IoColorPalette, IoGrid, IoReload } from 'react-icons/io5'; import { RiStackFill } from 'react-icons/ri'; @@ -38,6 +39,7 @@ export { FaCircleCheck, FaCog, FaEllipsisVertical, + FaFilter, FaHome, FaPlus, FaSignOutAlt, diff --git a/app/components/navigation/left.scss b/app/components/navigation/left.scss index 281a32f..282b02c 100644 --- a/app/components/navigation/left.scss +++ b/app/components/navigation/left.scss @@ -72,17 +72,10 @@ } .left-actions-bottom { - display: flex; - justify-content: center; - align-items: flex-end; - gap: 20px; + display: none; } .navigation-left-top-action { flex: 1; } - - .navigation-left-signout-button { - display: none; - } } diff --git a/app/components/notifications/menu/styles.scss b/app/components/notifications/menu/styles.scss index cc932e4..76f5165 100644 --- a/app/components/notifications/menu/styles.scss +++ b/app/components/notifications/menu/styles.scss @@ -27,12 +27,6 @@ display: none; } -@include tablet { - #home-menu-status { - display: none; - } -} - @include mobile { .home-menu-buttons { display: none; diff --git a/app/main.jsx b/app/main.jsx index da9e8cc..8137b2b 100644 --- a/app/main.jsx +++ b/app/main.jsx @@ -68,6 +68,7 @@ ReactDOM.createRoot(document.getElementById('root')).render( } /> } /> } /> + } /> diff --git a/server/utils/config.js b/server/utils/config.js index aa0f132..330e44c 100644 --- a/server/utils/config.js +++ b/server/utils/config.js @@ -30,7 +30,7 @@ class Config { message: 'Configuration file not found. Please run "npm run setup" (or "yarn setup" or "pnpm setup") to create it.', }); - process.exit(1); + return; } const fileData = fs.readFileSync(this.configPath);