From 7232f17cb7c484d8e1e9d320d252de53323360c7 Mon Sep 17 00:00:00 2001 From: charlesgauthereau Date: Sun, 22 Feb 2026 21:46:54 +0100 Subject: [PATCH] feat: add sqlite support, first working version. --- package.json | 2 +- public/images/sqlite.png | Bin 0 -> 41388 bytes src/db/migrations/0034_lush_speed.sql | 1 + src/db/migrations/meta/0034_snapshot.json | 2334 +++++++++++++++++++++ src/db/migrations/meta/_journal.json | 7 + src/db/schema/07_database.ts | 1 - src/db/schema/types.ts | 2 +- 7 files changed, 2344 insertions(+), 3 deletions(-) create mode 100644 public/images/sqlite.png create mode 100644 src/db/migrations/0034_lush_speed.sql create mode 100644 src/db/migrations/meta/0034_snapshot.json diff --git a/package.json b/package.json index 508f8b82..0686d1ee 100644 --- a/package.json +++ b/package.json @@ -127,5 +127,5 @@ "typescript": "^5.9.3", "zenstack": "2.14.2" }, - "packageManager": "pnpm@10.29.2+sha512.bef43fa759d91fd2da4b319a5a0d13ef7a45bb985a3d7342058470f9d2051a3ba8674e629672654686ef9443ad13a82da2beb9eeb3e0221c87b8154fff9d74b8" + "packageManager": "pnpm@10.30.1+sha512.3590e550d5384caa39bd5c7c739f72270234b2f6059e13018f975c313b1eb9fefcc09714048765d4d9efe961382c312e624572c0420762bdc5d5940cdf9be73a" } diff --git a/public/images/sqlite.png b/public/images/sqlite.png new file mode 100644 index 0000000000000000000000000000000000000000..e9ca7e00e5b2ad2f91e6ffec155975f056587f93 GIT binary patch literal 41388 zcmX_Iby$>5*Iz|MLBt@Wm2RYENkPD+8)>B*>0U4Zr5ge1Zs`UU>Fx&UUL+S-;+uu% zd%Z6Iac9oVocx`*{i-N0g^Nvs4S_&#VXt2)Lm;={5Xeo)o!j7F4&?G9AdsgJ*sGVS zuHUz2yuN>Ta@*P6aq6>q#BuA+ljl@^{#mLjcv=aDE@JY-<652!Og*wxWV;O56#+3? z_x}^UK2_nldq(X9n2sx|$4szI&QxB!u z3#b--lGbQ#=A2^NFN`>Z9aS%dwp$e%6z(E)^!vRZf`_C86Z=v^d}t=R-6B<4dSeds zV7i>^pO|yw}Gkt zYi@)r;DMcrF)M=Gn2^b+%(Co`v-wJv)7KFbs+u}KingNqmB0cY6VWz22=|BZ$8|;F z6LG0!+_yqKmIvzU1;$9BXa(+XM_=w!SyA`bh{o*pEZ^QiMd_Ag?x{xfZZE@pA_(_$ z8Pk=H1BgU&!w<87Zrd`=3A@yE@G~ShkJ=Fe`I%&OI(^@%RX=iKRov9v%w(uShEF>F zKl)$BH!vZ%t@6FHss%e;R_bdkJ~|>8(S(0RO$pCVJeGxrG9#(DLgq31EB!oTHmVeaA3!B7 z?I@$BC|zBO_^w3sv^<^&4j2(~cjt1DW&gO~&FKSQ3J3%7=?EV8_~kdr+mFi*d0~jI z`Y>;ewI}FnoAEH8jRWhVt6#0(?{>>z1;~nY3K1p#U(+AQ9+BjC~&eP8>-(Oxv zw>3o^jNyAh{;DyY4r>@aHa_yberMRD^<#dci};DXV*wLh{tvQ{es^$oDvHSB{gmh$ z&321dJ{9>U^PcBC5LJIn-o|kWkp1I}`3q9n3zYz2$PYYxuiqRADQ}4ULeSFutZdiT z_xZ#!D}G^0_GslZ*A3Clw;md_ zcAplLCk$@V1&tirF$Qmc;m)E~W=+C^SoF+PY^etbvj(HR^2`-8ViwI-)^JGb0Krd2@y21;;Fjn<9CqgE7IQ}Zi5GL zsx<0Q4iH`r@De3-YUfU6>sxgW$>#adXlZaNGOT z`%8L8 zcs5J?BbtvWtWSdIu<_uh9*&5!y-8Y4QQnf@j(gX`PUnUXn!*sRS%)U#{xSB;T0ej1 z&mn_k(^Z|@ixJ5b1#2qUd#UgHaKY~3F+I~W*<*i{?U!z0HAK(sWhFJwB9fl&(LD&s z#1VPZ5JBvD;3==*L#VXF`#G9*!w8$OiQ#^`r3-((_F^1z3_v8OLTJ+d{z==2ZE?mL zm&fEL!zsiJN5J1u*Xgi|;WQ`)rByS_yuOL6bil~Z1Kb@@0*WIt#MXszM`vw^K!||q z4!rB(WZ#W>6^d$_1qDh1hx{wL|*n7u#r(u^}X~`g2_9?Fju{ zF$5Pc^?sAFv-8>u)Y3(7KN=eNXid%Ra?J~^CKARDRPNW_H9Vwm;tQ`q%WdbjcXrps zAt~6;1ph#^r(fb|lGM$Hn`m;GR-R!go(=XxEY^*+8_vp>?>Qw2ZQseHf?4g|?EgKT znO}4f<5zj$8!~vTv+DlLJ2R6@H{e_{vr~W}<-*f_4Xw1Ig%T0m?=IqV={)w$h{)~! zJvskHdcR1Q31SAxZ7+X6U?BgG1UIw~TwQvzQ$FUzT3RBw32)pgx)5{kxXiZbL8 zMtc*>EF1AqCAyLx98noQbnUPn!+thM7Qo{e01rQ1SP4^S|AR^S);{VS{Wl3}unOO_(C5?xs?s zpItHh42Ez=nkm>_o{xo&jfZ^c04y8r?@wv;YR0|iFk3t$k?b46ZU0e&*D|$kePEmE5Sx-&W~P9%G`>=%id)mo7p1(U;hzQSzIw^RO0!>R5-2+ogU^zry6qeBFprqXN`3y821)jcmiC?69xPoThzun77f-Ig1elOhzND-PN;2@~fC6 z-zR2#$S5(&V_N^eV5f)^uJc&RWB2oz<1i-<<8O!mv4_P-G6xW8lW%mm#K?{w9ViI^4Lwo%#-!po>UH-Csqfra` zcfqy$1YnaHukrRwfNb~ijs8bEMN@>Auf0fKN6k66Df(@REJWUGKtN#&nLgtm!TR4p=Md1VW@4X`e8XG{j~umf`dp(cTREWfU+w zc7Bfqu)>E$t7UX=pzr4}myn<||Q3LHGst~*8fkol#Ymg6M6@(^Z>o+i}^xvh% zUm`m3+zYg&#vGA*`nRCi1(JpHRAb?a5VD{^-PsLRWp~H7+$R5FhYarA*&;#k=r) zT9?@>T^r&(LZ`V*wVYgtQ%Wo zA`GnOHp7nqCDFjQ`9wZ3CDxn!wfp{6z99o|x`h!lCx;$hIm`l@rNyHH%HkY5IM)t{ zHpBs||B-U|`bvVswV^D&zochhBHG!v+b1>RO%3@j|8m1o zSpDUrX9m7k&_vSky?(yDfN9g%)?T3TK-B3ii${q^X8*ZHyYB)%S>=bm*8j2l2^t7B zH?r_m7s~+WLAT$;Y9028rejf0ztSvOp9>t2LV#AX^=}z8phPBufpVHmZ;2=ko2EKnfG6~tODixWi?ls_@TFMg1$kZYVL6^ zcp+oi&}MYb`YSCW=#@jVbOcU@_i<5VDuc86m1#Rtc)?Lm1#YOqFOn{d+p1*jn?`X? zXt8R$O?ne(PFfsMLD+50Khy+CTXv?Hbwey@t!~8DQq7Ptw1J`|UQelnCF{y9R=#Y*^YPn%-Isoa zhdF)+oL#!PTwEyWlD27#ypY@cat7bgD;K)X)Ai87gQ25D-UB(Oxpn~p)1ND zsgIgC(2}xv#w?Bwc94zSfQE%%joSm+M`$?k7}kA8~l~Y6QW5 z{%|s;?>g|+lC;1nA@skp)X$Q@_G-ruj1rtt)$E62@OPS)vP4~0I>C=Bu#glxy~TLf zk1ae~oL)b^q4>cg_EOOC^Qi+UYH2RBlz@7mJt|7M0(*p)(D%yubAK$w5rHTcW%CNA z25$mpQGb>JWkl^!?4itnwbp|8&AMw73Qp<%9oi)U;Kp9Ld6hz_vxGjQ=~s}+aSBwZ zhfn&Uv?|@uftJ>o0B+zXfWa{2&?h{VH6!dCQe10X-7OJ2LL*(ru`Diy7BC6s)LqE% za6sM89rDx*9e(yD1fbT_4i`1itq2%aH|X-cdNDV;)@wn{!isfNR`D4>MJET-sqlPcfzs#Gh}g1Y5R(!vuLK>M%p3!t!a({*R7 zd(}^%k_}#!TLgw@R*dlxo>9C@14923uo;ap5gaW3`N0Y`^Mm4IB)*?xqsyrbfMqn_ z`4cK6F6KggG>VMC8}^$9RRZ{f ztC-Ml=9)k(n&wPkcRQ^-u;?I@gw{elX5YBxS3e`TvyWsmc;i?1AE>0G zjU&6Afuc42PCcSc8O{X7Pp_<*OcKyFo*zWUNgFMnDIqA62#PliP{*KCPJuCW5ot6c zZl4ZzDh70l5=p_%Qp!ZXJ25uvfN-yZZWd7@Xqao%l*3OpC^%4sj6Bqe(_&$P*Qt-1^GPOi)=q#qo(s} z-F3A8&@+XX;B)A+GKRD7iZupLcB3D*7sbEm4^o^X#O$&N9(gL6?A$PGmTuA$Y)_f{?YWlF$`tgxR zr>+SXCw<4(u+}RJ?eMu?MN_c&?@!>HQw&lmjQR))$`V$6*l?sEh8rMFB8wWrt#Y%%MlIco`>pWIiHuf~YbD~f#rq{8< z%9)j_q7Xo9a%ZpW0(aTlRy?25%(TIW2+t5} zWMrsFQ7Wq!uJmo@9G<9wr9?l5gMOD4FTVC_uZe&}^Eo|_qX#QW{t2md++ z#M^TGyF5>RUto`^mkZs)a@4%mQ7&f7e2uM4mx~+aq2rkgA*+W6S-3#`)VDAq^p!f4 zW%}Ge#Wv9~qjD8++0*4(u3YJhSU=$sSw~Mctd5KUhHLl@pycppU5cx~*uT|DiO>ne zhmgd0klu50p39K0tBlCxrFMwumWM%=r}nGIZ~|>`uT9Ds2zI=<5!d?puqON~sBoxP zsuIzY-KN#Yy_P&C+3NkbP41)R?o|rY`MSBbYNf-2aUdz=S%3WnHA2jKjrh$l(S)+W z8!B>FfAw=%bh8}*Jg89}W0M^Jql+2w6P*|Q!v<}`EtM`jrx341kW@2kTC8uWYVK0Q zq%1rT+5{**u`83*lF-y{nAYX+Xz-~lIr`-MYI=Kj4N&Gv~ znFIjfVGA3s$XxcXi#9Q-TykWEUb}{)MU<0qb~}$kZiaXTKk{X!vWD+fi=+Gz5X;en zxN`V*9=K(Gyba|LX23X;HpUog&-Xl49FT<+ekNjr94Q9r;$2$Etv#t&Y#h~CA=D@x zt}TruXfvhzekZ_x+1c$HSLHM2FVZ^$EE?pt2YC4D}GC7tvC03s$ROxi)r&Hj^8#SLxKML9f=mT`;+L0{lEiJ%Ix@t)|4%l z|9=c^+e!-I3!JnqE2Rqkxi(&Okdr7;-=7 zW1(Kfmm4V$tvt_~fY1^x{IGTc`l2MHXusW#Sjv?ErJ2vya^RFdy!m4aBOkaoMN%}T z@08yov4b0EK2LknMQwsY)8lCc%!9kV+sQDCTGq;D(vAwq7I<#jV zonBdPgw>@bFgJa$i_jPh*p=5jSiaU0XR$WC{*_9>p|q)bBmI4}A(e9`CNh<&M9L2z zQPqvsIk37rk^vU=e*>t>y5Nb2rOiI*RwdR}?vWm2cKCjv>F`nnj_JB{x$Re|CrZj? zIbf}q)df0vKhiQm>mlM~ec>K5LwCN5=*a)7Gg3|ph5PUx{ay(!tm^3k{YS5|g~OHw zqRgDFv=>LzM>lGQ&?znCmf~n2sY`5N3}uR1`4TVtx^^R#z7kJY?MhJWggz~K&UT#c zg74YUf3JB3Uel^&lc2#do2$B!Pf%R7HpH0__Li#JR@sz*{0&;xdCDejcwBHF^^%Gv z%qlmDfsfLw?c<<)x^ckHIYn5NjF25Vn$~c8*7V|<>I|r>m~l0iY*w8s_=SYCAZ-Bl zstP#Nmwk>ay_SM@b0ne@ZeRs>S3HBiPX~|H$K#BM_!v&%I6Tul;A%IcZ;E{evXL6iy-LsO28Nqa2;vbmGuV2 z(^X8-wb!qKu&4gRC=Y+(EOh>dI@OS7-9kTxw7@78^xq>lizDt2udwX{m@e**=F`7N zXg;;C$TeJ*6D2u;$~uknG3zxk3#%w`bNqU>-QyJr-PXT$;{T)pym+BTnPQ$vmFvA| z2*}e15FQ7di7xX!4|%UJDiQ6hk4{B$60xChh6_lKSv7+-yxup&&ZVh-Fmp6oNFrQL zj#FOS0S!1lUMUk~>npK{XoBmzHnuBCQ4=G;pa$HlWwU4f2o{w{bQJ@A8Wy=pQ{?X1 z9viRS>EOt(pP~oVy0QsatGOi_4>w(pCqO*FM2s0mNxoBvU8q;0%WAB;9agQ%qsMq% z+cK#t=r@m7m12t^zHeZ1QzHqXtuqIQ0kOT``Cuh|DxDFs!;RBL2Z*!uYbzVC+Vd9} zqr&uwhe>2z1hd))d2C^j81iYv2W#I9Al)e^xmz0`f1`q9-1kWQ#Vn zjf2$9)?kzamMr%|3B}peud#%6&B!0#Xq<)sftZ_^Yv^AYtKu;ufUjx<#XCW(?OQol zWXIf)X_nVY_5Ll0#jG}F8cGVblK^`jQl0;-a~Sz9kd??mfw@3QQ5k->< z>U7u6fIG5O0B#_829cxYG~Zvu^9>3AybX>_D`tFylZ<5X%@`n{=q z!Qba)UyaQ*Bw8Ybud8=HonWp-OO?YJR|w4FNIG>F6}helb;CF}rGdf)oRR*oMJ;Ol z#1*?dWqjmp-)q{VK1^Th#66K&=DC7)0BX7Rxg&ax2NJ#b!X-t5=iHNW!ik_*ke^FQ znfKT8?T&5FonG7PWM6c-lj-cwJ?Go;t^dm8bdK#PRWmRNibJ=(JGt3vM6KH!rf^O$ zuQe&>KJbKuBTa4&Yj;N4PtYdQb^d)Rtvq#5bhYn4Gj}((Jp?_2lwG0AGn{LST-H&$ z=hO@OBf~U{<>a@o@;ug0z#U))6ThK^iY)_225NvzqYj@v)E3}1T>Zr0@@5b5!D%W% znc2M7*yQOXe5$qmXrwdcA8~KUdAf0JCh*A`dYq^H4z`GBAWT9|aIVcOf7$^Z{`94H zkyBUGsAqRx!83D{IAsI9# zIT86l4%#iJ4n{F=Q+OBbilONz*PMH;cj8N_baI1ap$^g&u+tm$!sCVh`&gaq^_9L;2kZW%;fd3!P_aH=-1YAZAY%EcAQXzWj@))8L=N!Bjv!UiR$`h6%rsY7)x4fict@O`QsR&sU#6{LHB#{@?z$rt zN_+BU5eZB1ch?WxNCyo;W6G4>ZKhTz0`DT>bnNU+v$%j*+XSD=@>G2-=Z>P$P(;uW zVRtVm0>nQaM)Q{YA;3YbOwQ(eH#g1IBl(6_aXYnvO}k!k8-Z>WsC^98is%j zE1Zyvlmid4_+@b}3pby+xNtaTMrXHk-9cbDmERzC>;ep(Z8^v7ZIow%_RACKRU7iu zfPtxh$=SwDI#-;InP6KJli%#@7YX0GD=zPJL9zjhf?9o#Od>q5n~v^DjxQL3sS_{V z$s0nXjH4Y}IUi8x$fdGz2h4son;D#7OrOgAa7Wkz(Rgseq4tiw|>}m z0rzo4DXJEzw&5}9Q}(IkC1MQ`8P?3vt~XB-GyqDVS)RUzzRufXP?F#-NhGBlKkrL$ zrx*^Wm)B@ZwGE@GsZ$QmT^szy*C?lT`LoeRML&FQ5r91nIL4)`w#~l%9F6%0L8oAs z)l;!HbR_O4n>^NaNU5noA*}Txmh6(A8BJM4# z)<$(>t^K+p5-l5wK!Gw8Xks$MTPE4|6KLzcPY9u@S2B*x50{oW#$gs+$dzl3GCX5SkE8o}CDl z-lN8!NVO+tI(Y)af(h?ka+AiCi<<~62|qO#4L{9ef!^fd*((!LT6s(>7d7P?cc0|s zgn~MEQB7pAIl{Tq%0J^JP}*`e8w`^48vs__J1G9BR9dvfSbF@epZ|ABA$pn?^bsas zo-`-so|<@(7FiBTB~<64 z;kql#4*6nj=G?pvvotNcjvd(@+pG}^(VMp*jOQXUgoz|j$>*5{w4lS9^9lH) zlDhAmcn_lDwjC120?~?Hs@bteB<|ywO;>6_+J*N)5A(=9V*&+Ggt=ru{4z#{Dug z8Cj%phGi6y$@M9MBI+Q_2=6t#X__+Qj+Vmctp4VBD>^UO{7uew0fO8kcjm zHsp3^Q&A+y$(dw6^~pCkFI4e<&1=S)@5>a(W2s(Ts)pNv6ZZD9K=NwO)l<-Q$!CZjPIw|SV^wX z)HG=CA=?k-C3ra;voJVG>CI2u+u|Z%B`q<%f(+|=Fy^Jopx%^t>>4DrK8gxxYg^?j zNKV6^=~@3jj9Z3uxPr*em~bkEg@+n-y-ao!ZT4wQPja z#-z_q^TCdIf=etqS}ti9yDQj=?y&2t?RaD7Pe171?mm zbWeF&%)kmH9!!J^;alecfo0Ls~(eWZBsiDs7z6T$o@lXC&ox1P@N+VjSIih%I{nd|wKH2evN0!9MpPx0RG8|ToyjFb zJCpTVB*mk|LR$>$PLbJTnq7xm;FcgW;5-+yl=LcW6Ie98D0@K8TQ+?7IBq?Mk0LvJ zM+VGQ6;dHOR8M$|UnHrx6V<|^u!Z+G?UXwZ{8ZsF+#5JQ!aw%;MhLT(*|F|Y)o=^Y zGBf7u3WJfTM=+Pp?IH}DK;k2IZsYlUxo9|i(Ji7+&1gs_`5qZl#^Cn?W%}tKMP-gF z6tKByRAKk+JfDe4WxfKJ*Cg!bAD1HWE%(~TYI&k7g>A!z=_h(YSV!Au5h(f&iN32|Mu{6%^u4&9XF8W5^G56LT&L5o*QpuKAor6v zQXZ4rTHH8F%jKqDR?X%1tS@J6je%XrNDO@9+>9pjUxrE+g)&uM4mr+PTDO}Ri9AI* zNY>(}`{f?tFM>=XyL&ObFG$JC@FRYkjDGAygo#XT>)?bo?aZ3*w2)KZV1}nL;y%n} zYnuafHPtitWG?R4$j5M}uXx9fimi)&@{nA~oGE_2SzpI7mjm%pztXMF3E=q^&NoCH z*OHS;P<@fJt_8fqU=jrd-RTw4>QDx>CeGPB(!p34Rb6}CeqdyMA^1)sC#^wcgyee$bh3+niA2+FlZX-IZN{f%B7N6`?56mYrUQ`m}P~-Hfe>Fq48P?_$LmiO-Cm3 zWNWF{P^~>fn)60!dX|R6OqJ$Gl^)tbUZD>M>pPDCyVYar3)%VJswLVrIeicX8VHKg%_WFVjMlTJ0NtpaJ z(?aDb6M?8gtmEnH-F*_bGuB!kCcZ(TaeDLIjN+j0w_j)%g?23rW#p82`@87Vu5a2m zB_?A)?i8QR_kt|)R@up}Ka&<8n2S%EtAFWFb|MK=UJa+uJE$`v|Hj1r7nZXYG9!2~nO{I-Y`A@@ojrUDfj{|g?>m8t+)hGF!C{Hy$CTomp z-9ZJJY-}}NN{b8z?x(q?p#_<&f?Tu>8ha`h>UYGN%N(8aGWPLNancfo7N;8Wx$XN4 zxthq1a&<%N2KFuuo@r;Jknuo~9S_!Wv~5<) zGdAJ9uoCy}H?u{zHhOde{9Md>(z=)$+s2#eHhZ$aSD^av=HO~^Q>{$Pw)@d1710Id zMcu^&6Xh9?)mj>)N^u&(^7H<3aVDGkWn4ZxDJa$Vsj)c{Lj+;yzo8tB=2sd-GF`xH z@T3W?^1nD4&psQPRxaU)SKV2q++A(tYzxeUf`Qz4BciSV%3MwQAR4!6=80`iRPKVS zCbg5u8x7}xZc`cerVM1TBZ4MB=S?^v4E~j9Z}U-;H))xpNmj-Vuk8G!*9Yh}nLHfB zr&UFLe%0x5>&9O@kitEHmo=u~=I3t?#+}hqj)b>G>&1#xojP0V=r0a6fNs;X%U0XQ2MTe>CVW7Kt;FvavaY`BZrUeF9kzgk=q*To4 zGOBHSc;O{o7ImiD(ZrCCvfIapZ=|UH8;CV_w&+R9;9feXg9RpJj=w7_UF0r6b{ulF z?D|`9(&uxxyTZ#n<>G&}L(Y@iw=z;*PB($lAm&RjEOnGyg2ciIqmc*)^`XaVGtFsH zw@1%)B101CxN=>`?IJAT1t>j#^^n1~M>0ymgPw6GlhIm=y(L@J=)OOa!5q zCShMb%s&*R4#P37?Zt_9;`ieo%q)2`xDf6p1@zPO(RM9&B3%n*iKBC>4p9kafqSFp zyQZG+NK>Z!a~hF_9_iTgfsCgRQA03>$bEzIw9qeUvk*aHr}Sy+_VDE&D7o8o`6=0^ z&CxlNdUDd65a~a{Ps?P6&F9GErcS#|4(c`bGz0W5a9lr%i%%1|f==L)%^Q9hQ=0;_ z*3T$idx1?Ksbs7b-!prdc|y358ihW^mIOhb0T>tQ+7hd|3{EqXU3i=zGb0q6J7i-M z&B{hS<1!a^fQz0AJ#pg{ppC1`rizn~ZPAo5Es8?51ec!|5}$x3M@$lz1{0x0t+idT z0zx}l+AFK5?=FNv8^F-G?R&#&Oq@auySsm|xiL23Ma|ju61gFtxL3lcdCD^-iyLOD zEHugsA~HeK5i>zk(S7WKv!nQ*7(AI>vcR&}Rbqgprb%NEg+DR;2kL&5XdO8%qLGjg zs%I{sde%@{)frXm3DQLPOSz9DUy8d~D>Wx*CzoT}7ubi-eF>OABR4MKK&^vr+ey@& zXIi6UOPQU z>l>RnRVJs7M)=nX;<(7AQ=beZ!{9v_d8vC6)Pxd=@FGgzh)7vTQve2wmEcs__L{!U z4NUsz2Qhj9)hfJnBAv~Z&&`Iq)2@j&k2vSP9w`*}yj~eEF)+TQ{waE`<@R6lk zM<+fI!M;cjh>bVhbPuZAG;u3$tN%Jk7{2Be(WJkU9aJyswmWdT97%(;YzQkxnQM5g z9V9TV9cX5@U(`SJKg1D2 zb{BDW9x)qzO!&Htjo^?OFjg~>w@IzCXCx9#Y{m2zL`)o<3cf3^AE?^836btR&1|0` zC>z7csSDv)M9)W*pg?=1zf7TED7CF#lW^p1uYytuRCQqeRZMTAwtDtr`Alr*L1rwT z0c&Cy=h?#!;k?&nG)_?gf=+A)_1`^0q1%D;H>2J__j%%syR?>OS&<_91chA9h8aGG z7vaTibDw)ZJrZz39E5+I9yYr4U~S!7Beib|)8uA%n;>itB$%3G%-pCF&BBKrHC1$p z7|{0#HET?lGJVL|24L!t@$4I1Id=61L^T-H#eO-x%KADqo7t$Z%0+(?%_6T_^7UmhH-CM&Cz8To}gi#-wM7v)Te@>znU>frq+}s?2Br6(MFu zLD(2fA8zxJ)##auCzOk`Yw}p4O=5k(1I1t6cR`(AWZ?%BJTICYLGaDogft@u* zFp;`LTTPiuzuq-vOr%@BP_Vxgs+qIkD)qKr@22KFm(3b_l#Ce>H9lsp;i%Mp2hD$@ zIp!Tp)u830SP(&f;RF^%Z%+5~PX?pE#w>@PxY5~xI0`;vp>Qyf>;rQR4Phc0gIH=T z!pY;oJy~7llYWSYTgrTy`qF==XxW)j;%*=LbU67gJfZngm_)te8=pgCAzF- z>0Mfj0|X$;FIGzPTk@Tbw!f5KBisH7#PY*&Ws}oO!Q}Cyh8mBmg*EF&&MNK!ROLhP z;iWj?d5M7n!jTRA9cABOT=CRFO|WK;?So9~QM>KSrg!Suy;KmCutkhu0mw@DhZrWL1&zo;eV8?UAnfKx(;;X=AI5w1B|x7j&Iq@hV4~Q($k*A zq*BxToiBHYtw1Tm55yTvdwnvf6muCEE6U}%z>D(|-c6`u?=M>OE|_^b@ zG)8y*&P#zmR%I!Q(bQPrb4gqUA9{Rr8LxN%<{oBnKoO^-Mr5$PWT#~W3^*vKA+2eP z-0|T_1?LVBNQAO_oz)g7kv~momo4URl$oNCwjui6@6fnp!Zt zh*e8WQwwro3Ltzv$u_1zAkoo>ori@iv`4*Jd%~H(UY6dewP;sNM95m8l$P}ujCE>j ztQZD3=`S? zNEiwI!x&X#GpecniK(Hq`?>x2(+ML??dJ#L2Y63gGxGcIF&W&RV6pfVC(GOQ>dS+8 z$1&9Txl-bO>gK=twpx*~;TMrb$VS`94TO8LdlG7v(CdB`;~rV-6T|uvzRXsm*9`AQ zcWwVoMoPWI@ODM;>(5hcEIoF(&$2E4gbne+(m@bqA?l5>SNfXdRom*L5oT%_;ZFlM zUNNtnbLPZg9;_7i!-p@6+~RIr_8O2P!JIa)eE*=~D|ry*5lPhd(Jhop zW4GnB=QxSmZF7eu{veK4S3?|;RwEy3my6Y5@%t^Q-h1w$1EllgTup}~FHV!8wH5*L z5~=T9rN($k`ouh0+f~kYZhwh$47C`Uie$qW9$~0v+}6bpXj))ewIOgvOyv9 z>k!g-2j4T)f)ewev*p4E`PB#iKMO!ciL23g%a_OlPjE`g?XEuA5|gQWRnYP|Kx>9`0hX`G1~d zxp(=}6{{K6nd0lbj`^(h8Q@L)a;+d8Rg-)<`31@L1AqG7-r_9A&YOevk`4#+l*!KG z-^gA{$WxKu$|v#(#}ydqA{&^JP5JHM27J~tEHG)$f(oInaHK!=?!qPcuPlAR^1iY7 zIsczgBJP=E0|;!={_#NF+XLxZ4fWfFb7XHOvF3~GWRkEDwgM-p{gB%7X5aF-h|IFB&za9<`}~V`E~^20e(=NHeu7zy$EK+wXY}`@%Nq8FLe~BryyLsddvTjx@X*1^`vU3VY260Cem}VE_zK^*@u-}7Ft@#y$4JuY zs*r?$>5sh6ENc=8jgPE9b|KegDcIANlYcQ5nZ8{&pmXr6Cj3^cwnbZAME3j!?mwYz z97wywlOdNkI-D~eTUKA;^Vz9up^?P@lR|6EO4P8o$C3c*9D27KdV#Cw5YjY!*!%CC zNPu{L%jU6Zd^yE=J@+~%1oEfmz1gK-?trWM;YQ>`)hIWuGK0eHQ*+(&K;i0X68>y| zixHWpGmApc`ETvb&gz{h9pH#8VovQE25}G%9%-79uG+|!x9YnRrhA)JN)ykVSqdWS z+III0FFpI{@2(}d-^uE6$Cc!}gnnQ`4w5bE?W}3}1$wyPLdmd*&D3aVZByJ{O2zUc zt5?PLeCr?n%!S2&rgcb_Dd?B;uR|IX~p)m6*y zW_5PJ7Pe9~b}EBlw0B*1k(Z5a$<~@kaWb<8rxnYyMh%3Rso}KDFR`CJ0cj~#f7M8e zgyS6vAU_S>3$}l_&tA2zhBdHt_&9_{S1P^)Ux!joffAxjZg}>VrbJGoJdYE5*YWAW z+*}aZ?{A2TB$0u&C6`8y)^AJWze70~#cuXlpY>39^Pc*%J~`hGMWW8cLy~Z6#mF+{ zR;I}HkQBvgMqkUNn@30^*bM1Q6K+qD){lg1EV063!_>)Gycr_absi$M!_dM#5E|F@pmo$ynHLlkiDAs;>$A zm!vA&#f6or<-~&>ko6E+^DXmlkvVtg zFEVWZ%s9-`keqA?!il->Bgp$PV6cyXO|_wvW1Z9atzC!XXPt4k&p)s{%*v$>JMU!l zp1xhi$NJ4FV)OmY$m7XpQhgG0!{T1D%NweuhV9M&WW$nVIw0%LBYBJoEK7uG z{XJMW$_=>-pCT|7Wov`D|Nb^EdpeE78Gpe%_$e=QjUm%qF7^HWR??=Ai?TZ<9ST42 z&$KEwwr34VBUN-BbicwVzRi!(&+sQW(R1812&SivBNFj|DNi|w!vl$&c=-+k@?%}! z@`d}wx`$^lO%}zW=@ajb)$p+@{Ur=?y$O%D`i#Rc;qQ*bs1!oT49o8h;a6t9?NhxtC=BHF7eozzgdBgCCJk_xrCQ&vZmbjn}uH1}An zgB*$7_RueXvLT@5En7SPL;NU%`4?YA52O3&bvxkQI|zH1oMg^Dxrzx76RYP<7! zqL-32`|A}BpT9Uu)C%8mDSJXjDR-tf@Ne$RRL0G~Upfc=m)L&;pCUz| zm5MLOUJ?JndxLF3c2AkhVDyQ@+sc22veIT-E$2XVQ+`rMLYh3w?IPlH!?zF(EfwUf zMh{FS6y<6=yjWP%r;sn5CZ6edZ)Jz+{ZxZ#gwe!&G!758#)7QF1v(=!Fp)1m$Da`y z(8ss6BTVc%4qh)HKT0xXeI@C8!_;>}(Q@+>f9ahy{WnaPA_HnBLA$@uvF9t%<<4uF zK96-IX^Hh>vGc`cgyMV9KfQY_?>}}p`ov}ZUw+qfDL2L}KEdyf zH(+t&#&!-ycQcf}PzJFyehpS20&8vaptP#pb`x)mxSh}7wt^Vc3df4}M^K;t-_zg;%N5);b*_h?=ay8_c! ztW&aTCu`uJ-O{^C|0hCJIth-Lu)jYCg&(-^l75zqzBTq{Xy8n-@Dv%AhJruqM7xL5 zV>k6X+c_GuLF-MEPUdy-Nfk9FghH!YJRxa1Jkg3P*xZ6)X`0~!2h65%A-_7^8aZ13Wlh@ zuj`?tq>+#o85$hvE-5KV0Vx@fZlqhfL%O9wI;5Kcq`SM3?&iJo`@hczn7QYkv(MgZ zueJ7!w~JLSX6v|{rE_KoORH?4!x(p$jX#gJH$D^u@^X@krTWUKxlNY`eyt;q;Tjk(s(N;rfK^3?6-g-y4#rKc;afXOUi%$!ZfRuPkUhII56Qcu>S^T?c!T zmb+D4v1Poa>$*+`bZ{MQjRr{w@~)&#Ft~@8lF;fCGrDf%7UmnjJ>*%Sj2S#^Fa^osEcLA!r`asNk$_ z?8a=^5%5g@K?v9tHjULN(r96?x&do-s-tz$0T?N!n|{aOB@aS9L+p*~r0DUX_8>>6 zO}UTwnyr5$zUbWw66u7*yx_iZi7@QLTF=U#KMN*1-`mQ%xSS5}k}v-r@z~VJ-+3*} zM0;b^UlFBMGjyNh4iCeyk)0N1U8U1hAG-I@mB6~9mavQdvU@3csTBq8 zB{5){<&lmvfj2{6<=N4@+BVw9AKF$pz!C?Ai4b&$4__kEo&SG^E_?dBc98=)+=3jG z#d8wnZrqR#wGI7z;G@F+(+wZ^;cQ?qmcPrT}bBYE~ zmE2NR7yK&{Dy#5QsK>wOy<SEX%u@*H1SQ1qh~*-@Vt0GJ)YcQ7!M$E4oK*l0AkU z&gf~0P$!HCZ_4{`CpHL^k39ngA+$a~CY1iktNHXPSG5@=+NfWFjO4i?9uS8gR z(hV7T5iGkaZhA)~GrMvl_NVBng-9gwOB!sG3qpcmxtRd4N6_2nJFpS#<$yVMI05fR zE$gy<8~DdX!0EBROK*>LyA^oKMg^~*__){_8lhgaBdPALb<^B(A9Sqzd7Uf2KXycN zc~omYOM9zK#v$qAO&hsHB&n&t)6dZh!YL+au@mRCSdaEEEKvCw%eCGlcJ6cVbtTDQgkTiJY&;5+rgWb_vNL8;p_miAF|U0y2bmfGia<~%D(GRY zVF!FWY%y|UV{Qvz1jvGg4v65plMoL!N1b-fMl?-dL5-2$Kb)<$0MQBE=G%QU{ksr!H*53e4b zGKQ&>YX-OJ)TnQiHZOEb^;-GP1i?%G-obP@4M{&bnlWl6LhcE~4+{}!50P0;9~ za?U^hNodW2Z^qAW;d|mw*0AvYXxK3J$P8wypx=2uIt&K8Y5|!@4i}oM`5^_5q!P6U&kIp&lch2l#gP82Bh%2n(A7#nK4B60@Gk!_ndzG_s`A;h{~ zt2X}MLW5r(9eqcG2iNWQ`VU=G(s68EWM*&21NeRocGxR)#j{H$cE1g6#1GzT=@8+T z#wJ5*Z-^(svj0Oc>Ukd#EJ))_t~%QkV)EvJn;4QKMCUdNf-* zGkcEUwp8oM9`PyZE=8=|?iKe*&`t)D zZikYnx%w9+{d!9c7FDlx>IiX{#C_)T@fi~vkuX7tbJeorIsdc=gG!H=;>`m2me&@C z7)^7W?ihCZ;d9Hq*=IE*=cG`3NyuX>=eK8g`XID@t9KQe({gl|&1`UxykhwGtF#l9 z{QSI=eyY^QThR{ipj2$0yrWy9f#9x)pklyv*r`??E*%w;bb?_%hr0`Qm% z|8=0xSfjOD&n++3fa8~#Hx`v!_G##A(kv*L&;he%cno|xj-t~-q9M0TNt_c|zlVHl z;)UtJlA6)F9Aeoz;2{xv6kv$szWE4ox;ag{viFv#Amko(u`7xCbQrbsvub5UT06{3 zF9rDi9DdWqB?aMO(Lz*Brp#9sdK*e@L`c>eEDdR1zqzJZD>vVhcH8tOh9a@NaDWb& zg!c;qeAf?K>+$a-(EmC|Vd?*9jvuWz_eao*7T7R=HP(RpaFksq`qJ&|hoWh52ngQ(%=%y(J$J+CH1Jys z(S(u|FcQ!(-cese`-WHG%;>9=am=9?BN$}qC}z~iT~|&IxW~IJTH2iA^__gLkBY`x zR#0%gk15ur68vVq4(gf?xmWvQCJu@BIk&5>+z<)kegVhvX{(bOGZrF|gfed7gHGkE z<=F4FtmFqA8QXKi-sLal=+*5)<$rd5;@yl+bhSA9T~T>H1}W&}Px|&fpD*JagF2BAfAsJQ*l5L8HGj6nI z^JozUioAIJHJo&X6v_rP=s*obAv;zC*6h@`J(LXL+aZSl@Lx7@ESFolfjI~0fR%kr zE-o&p*U4lPM|C(iFIiAlwmXeaPeMDTYkpjNyw?%>wiO=c<9SI-dxM%2e4nGZGW*%qW0KB|J%W89U?vt6$>^}S zvaY11+L=YZVkV%gkM<|dZ{xq+(6jv0rerI)`%PL+!7-Oitpw~o$SBkbG=>5((g-d- zd8<;`ELQFqd8Zb?yk|OR@js>lz5Dj;S+XUq_iG0jhvD$di}?{bXl#7OwF*qW;?M+^ ziz|CUtYWwLZ>=sv!PvxE3W>(w2GK3Ye2O`ijh+htU;ZCw?0C-JUj&GlF!Ivuskpsf z5->bkxvVB}Nd6tS?%Cp>HiFVIsOj(;suGoVW=ySGVYQMZRC^iXgWPxZNJ5bMM5`A7 zlpVzi#5&hOKbxq0?95KPU~il=)naw2*fOvcz+e4UIpG7%fOQ8b$(2BznGWyj|HnoZ zNI$9%-cp9~W%j?{gG8ThF}I89psi-y#J+}(hv%J zP2S4`1cbzzOtWk)^|VJ($D!|D*~NeRehRHQ7pp+*n* z#GgAyHcft@(>h_0+fTA3E)-EMwT}TPGTFp9r{Z#tR=$Wgd3^}}YwT7B?j9-7MdVw-_4Id2azhz4z)A#iDYLI3B2;9e-W37oYdcz?id*PtJS9`4x zp~$>dPim29M+z9Z{DSUt9>d>vFmjm{NI7c8o$EtLNM_BY$69F--#CjE$fd}93aDIk zC1AHlkC*KfvNQIdHbJj%P~V`6jk*1+JUyam zHB|-#%&y78?&pGuPuXoTXfzK{u0XrlJ>23!beB*0+S{;f~vkFXirVK3KZVh$MMM1KPNrk!t$n1#zC zCH%EPxGYVg*LyvI=N|Jq&i?I~^XwSJ1gls1)4xY9U<84(MK-zy!~R*TcK=nKYCG+z zxXj$m{o5U%2Rwi#pG`9M=2gph!L+^MD7)C6I!F-fvh*N{$QJ=YhgLSDjs7W3uI>-L zf;AvHO%Eg?cMDJJ>dY*!hdjNn9E%^?Q%x+?Xc0l_+L~})Vk{Oz z#`;A)VoJ*yblbASoHgBSFER_^I830hy4drDUr$`u6H7)wWTA{MRNY@zO;Z`4*5*8#v~Tc@Pq>jn_A3XzPmG-31XF z+Bb1t?A6NXNRSI})*dKdQE-dSXTisoY&8R+hO|>kel4&j?L$QX6;wqLAA=+E1HfcL zp2q8vssdS^@O9Yf&6Hst0v$cH5g^?e}ApKe8o=uoK-j#`Jp*Gj=Jmw#m}`66VCw%x^f(29^(-=aw$K8HLs0t|ZZ z7hPvf3`L&`#K^h<_MLj$ITp^&03XE{wr~7rlsvL{PyH#b1@D`#?V4JpKpQ}p00t?6 zba2)aqrG12Ro1V>)rm|ohXN@R^;KZ!WX{ve4LgPFH{Oe94(Vhc(!%=2nSyr;_2x*v zC?b^>S$~D_5`5K^YtB?{!mtIgBUMTO9>|E9c^mvUc zpl+krQHG3Qm(ST_5j`S=49?CnDSjw?O(!ulerZPiH8=gM-JMH`?S*B1!cUa}bJQ~R4a=m>t?;hynI!s1KEXM7x z_#=2LYH(B?b$-iA2--Y@^P$~sy@0h={eUkbgoGHGV{BCxAf$QGA9>N&Yjk;F=vbG* zvme+KuXCuVkaY!nrHb?`2)kp=aXP;MFOKiMZe;f^3H9_N+OakFu40$P+@-H3vH>2f zCO&VK+4iOefNwW{4dD8tCE$g`FKe(&Dr9#`Z*C@(dg&k9&Y{>-h=|4QwYLTe~d zFVQ1b@R-1wDkiR0%fMb=%(dA2=wNZ|tjYBGlWpRxe|^il5HjugHs3w+5GnJ;a8KY*0d!r_R9+yZ zH?bZ!g}3gN`BRw~R!ikx~&9Mo@us z*vQ+ys0u>zAc(V5>LKsdf9D%4a1cKRHl^-Xn>kZv2Vu6%P?w^*1O_tyYw6`)2Dnn6 zJOj+WfmmQ=LrNOfP)1(V^#JY+QV`C&P@ef*r^x|F#aaA&A)P|4IFbIOn+lRaE6N3N zbWyy`v~6N=D<4Kn{b;tmy>zk4$6KL&uCe-CD$$HkaVcUCCuuf-oTm5T5WtE_FI9w* z7~HX3C`6o?)J(*ca;t9vbbKK~`E4HRnr)SN-7e5%sj~;!GLE9fmGxkrse#&z%wz-I zNnGEMr;BO;YGq^ljlKv9PXK_dp(7T9)|%R92nl{R)g%w7FXIvw@9yqA5;Eu1;cUIO?5&hf8d+dhr`!Dt$ULMhD@&A z2&e#c0Tts|EO-aLf}p*ursTZUARxQZ>nhsway+H|?X~E8`&Qm`ZImKLUJvTDnnz8n zaG=NKPVgo(GFIsCk}`XOpT*kA;i4B6?lFJ~+v4P`fEF}-PvlK!QRO7Nws%$N^4Z7F zz`kdtI+TE2UzaT+?He(W%Qh0(^wC^g98uAo!uprfQX`96-zNu16el`8SSmGwp!3r1 zOGjN>+l9nH+0w)~dT|?)YY~!m)1xT-vxXA5$nrIwUbBkcnSY!z%kjh?vdo#=<~>>B zUH~}TPV5BifA^x#Fb%5xe_jAd*_n-iF30wzK^5B<7y+1WmS;0-l_qcXf`MvDY({9b zm}#_gK4Ak?L*C5sQs(Hmm4swXzuq58;!+qs7a5<$9Q29b${BkuliMD`IueTOz~ zlNzSTD<5>hS2K6q3n)7MDQ4`bx(FC#PtYKj-|+?iC0IL^#C}+IrwYLIeJAeC9qP7g znb5)z_Klv&ijG^#+k6ww516VO8_D`FEh5c(aaLUb`*UtB$Xb%>sWRS)fIuPV8GAAa zAyEhFZ4Z$XQ?4~{nUaH(1HbnKkO3|hpZ(D*XQdwApjfe*>hqSDD5;VGoYbPbTFK&! z-OD()V)b$;qb621#(UqrPk5#oq;08rt4=ahiU*pq9_ww%bO(I}d)Sp&r^oI6y5%q9 zB(VH#*Cs&Hpl}cg3V!gxR-+j%jSxNzLc%|-0_+G3So z(YXgSC;uN?16(?L z`&b`B=}v_^gfBUDtH5P=)yHF;OoT)R@?U_Tl!<)u1i!EpL|&!Aev#>?R;zphjsRQ~ z6r0ZT!pn4}s3(+IpQmq&jSa{00E&>dZ@{C+iu601&p&O~;?m96abf`NpzQx>Og3_u z)uzN7>E|BBdUwGFH^!V{MW0nmZ`yC|sfAx7lxr4K12np5oSh8oRNbVd!ej6Y@T*l~lxOO? z%)a*GM|98XP2GJhC$6}4QDA9-Qn_l&9WrcDU$hYctNU>P!r!e$?fq9}RLemO@PYI? zU8I(oDSXH5o)|L~Om$@4+q8L;P>#~1*REo#x=@Og%b)w_?&!QmDMkD8nC5z!!QtS? zng<)2_P*JF+po6rRr(%_p{5Q|u|@F~TGrVieLld>1*Skc0%?bEZS(G#MJ{VKMe<9Rn< zBN7x|FosaDPk-*)RHJ&L%zm@P_;t_-AX6j?zsxr>OcME+d}x_4u>tPf4@Ykg^sbFB zt|@SaO*x3-+&ptl+vb3!cDYusQMb0(Q^g2dri3YH$YG3S%kp}pR|}&x{jpUKN%| zCug~IONQx|EDKvQHgRiRUhp_mcmrlr@!yM=QyNb$hSy47ZqLzSAmKs7+oW8%z0SH> zj`6uvvk8hfA^pBBH7C%fR5z?sijmU;-h4BPrP8d_rD-nvOeOoQaG?7Iwc;ziue;D2 zf=38b8&<}b)ZMK`S<$a&nPeE!t0$Be8Yc6Q%KIG*!i)Sxd3-xTgh?enl0mt~pV&QZ zCpjOi=M~CsEE?zC{=Q3i!h^ki(>Y?UTT$%t#mdpQQCN?ufHslubNv~y6Z6W}t`skbERJQ<+Sam&_F$M=3NbTdX) zxd_W=WgDD_Z{v1pheHWLi%;AamtlZlt*eVR8WbzkxMk@UiK-RTQ|lu&xDmomAg0&- z=$_P#cr<|DXLj}>*!#4i+D}gVT+MvgEs}zp>0KXg$hFN`J{~=oGbeA6aJd`TAp`R*^+m@8dICB%#?b) zv=%v?X&&Csq6D0jkag;p>^Ok7iz1+$_%HLibr=0e&+SQh2AcKpd(sYZ*G@ zYZc5=#fh|RkN3Yq8`~MY zMLb&5Gm7EG1onMpHM!0FG{i>O7R^%=Fp=pJ8OqD4l?%Tgd$`4yA@!uywl%2t>pA)i*`z(p?qC`iomgAcIN%AREJzrvjK#ca#DJ}b@cRk zYJV%0mZ3jjWMg8Y#Y+~+Ax+>DR?fh`Q;|}0a zjxwCdKlKKCzRnYL3h0ZY7_y7?sm-?L<#>fuvMkZB33$ADDhxS!y6o(Sk8*NE^>FIB zqsF+z(Rid(Km8#by5KomPjIhMtRVgkA>9EafFnfzII7EaIN45rbRGbBtOzlPzkl|D zq^q`6Dc9~NgN6r<&Q0uJPu3^)oE_xK&6RrzQn)`O&;#I;zu<%0hev+jG#E)7Gr)$6 z)p)6kN=4bX#*PQrv;JkcNv$CP=I=IPE8U$kvZ;WNDbglOT>t^&U}SSS zFZH0}2b~_16e$SYrPfbp9l*@@y^i5~dd(9^ z4v}z2m}T2>c8zRT{QVn-eu9<`{ol46-5j;W@8|oc;LpUC=R4?AWVbpUV!AdzAdi&T zHLaaXDlF2_jqqwk7&qbI0>=xA!(?0znz?mmzDwTd2e%epO|7%p# zX}RD71J7Y$Nfsz|tYS1R~J$Ft5xzZv8_6SfGE^y{Qu1Xw*<&T~ga= z!}VkfsP||M&uhGg(Nbc~a+mwGOa7HWVDOE){xEqw?$7ARKI057U-}-xT_Yeonv`3p zQF=W87>BU=^3yY*V7uEMRn9tKl*73sbc$Ct!osg@grV|Gga^X&RJ!wX#`C#=(&)|x z%ap4B{clE=b`ksReXr)D$M-i)UvxHm6&$I0c^xrJy0 z4*Cux-sU;^pe5drU zhLgz|NN=JLU5&?$4?avohv>dR>SCP3FJM5#Ti!bb@q-Q=xiF;H7&IiHI#sI+Clw6Ch^KKOsnj^R}J&@O1 z5YvL?CICgeSY0l?7-i~ zo8H8#g;9pmP?!^zcTdCmsikVnK??-WgNvr#Ri7~hyk2_l7lrcWBlYnaxbQHx*0 zCMh17>KRQr`NAqp$hY04;+B4m?xn)d}(-i&};F~q{K3LX>0R!UbYm_zAYIPI+3O}`TVWT#O6s%3@&q!8jB zIcKM%e3@NZ2&6?|@BQkDF6a8gPYrrl;(!qaFX--`hDfr$Mg*06vLOcg};5> zW*oJ96S;8>7b9*;@;Jzul%PcqSU!iD;nDjHgv+b$_A?!D=P=*+v{AXZKC^1e_ODMj z+Px^GamoPh$SJP?jpyfDB#++Kt18vxH=-z3wum9{!Sz5uYOP{@sZZqq^A6?9grMiJ zI+3sgbbH_@OabiG8ps|_9)R+?lDrVs7wg!GS_2`@9~V{o;bB5<=34ccc2Rf^hb-Z* z1ISCHHU~cT1aO68q$ zG_>rR$jgT`*ryU)8MKus$##Q}_wi4ZMq6-gOKG^df>dHFg9(P{kuP zhBW9}d8*j?wyc~CK(;P1i`b4^Q?E@rV>8Ezd###wu=qH@V(&3x+kX{1<1~V$k{&-QE#lA3$u@! zWgNFzo~po|TAgn8G@u^$j?sS3V{8tC=m#T?}maK3gtEBP>wu{z-+ zT)q}xNiOlvAAZw0SR)(@G9p{?p=WYH$ESnajG9ep?Ve`hyiTU&i3?C^y($$QT~3Gn z$`U~5R_5lmBA>ho5S9TO%BOEPN-H-Z;P}ZM8{hajJwc;voc*3@LA_>}M0lihN3~`K zmLVjodW{!CnAJ5?TZ7)M5Z(GS;F>%ozr17O83X@@j20~RDe9_iwJL6iPs&B|8r z>pF9~Ng^eREy0}@TsYkEUH`Avz_kwSCx5AWU7Ygp?=OErT=U#6(G&c_5V~isyG~s| zQLuz#QH+4{ua*x?ggU*M&9(AwI6!_lNK_2lN+P~_HdE;Fa()ecu>X5?R8Y6aiz8Bv zAm95mNq-|3YRB^BFRyYAN3Y$$)byavgcp zN5M1;V`Dp}5$5rLwc*+)9NIaf0sg0Eli7>SiwxAlOK(!#Hr=KKv zGu^S$nw`FRSHAHGpb9`;DRh>~kSShJ4q39cn7VXqm{gy2!FiL=J!= ztI6a|(A^LNHmpy=^h?%Ot*x9F3h!BU;l=KW-v3KtZ-o1YUe{OFe~IVFD6FK2#tN|l zyB!Mh!dNqz4)=aOAe&7}Gi$EDTvdwx-B4}zMi}elcgvII%riGd^6aH5s#Z9IB)?6g ze+h1&oKvK7g#SN@;By2I?nZL(W$?9BhD4)ut+~*dAS_95Mj)c>ez86=M{oQGs4Sq1 zA8P?stn{O_107V}!$`GdutN(;m%Wu-*EIi3;TKTzK(|?$=!=S>egs= z+WAn0aR))b)iO;%NB*xfmfKE9r;1Cgu5H{8BrW7eVlHnWs53J%P@H7Ty&Vz7G)R=V znq3pUr@i6AcgH?Ha+WsQadL3WT^F5C>MJwsQ|4mzY3Y=%qyyO{2s93Y2r+%hZ$nbaWlhTY3557?sPr1NfE2sznYL^Q2g%_u zJ;6TW3C}LmaX)D~T`{)ck~bl8Pnk07cW-rqrASW6+~>RVmIT2=sda4@UFI^dy6LX7QOW@-RyNttRLOpw=@GZ9i1fvPW z1>t{V1k1F6ZsYEQg=pSndok?X36&(X|G0KEUvB@5{E5_v&tH{js`&Qf{=&kz3jf4RsZF>V+!Mj)F!T)l? zY*c)29E~bdrJIKV0a<9;1h~Sn?fUNM1m?o13G;|LWN;w3e0HCU`HqyjH36vpz?dCo zCwK&pmY1K16>tgrIC>kQ_w}%#^z^N#et z^X_tbtbtG6?9t@{@^##QRu!&XgroYk1za(R5cbgk*eXA#c!6DjQH>F}WXhxQV|48iz|0qX*yj}-%kQSh`0)@^1NMda zAe!__FPZ#50a#JjqX$Lb_OzP}$s?oO(WS5emAf%fQ>fjSd#g7og9adc&8EKm9*F{8 zq)nngx@vOP)f+6;yh0#r3wXNipum*Z!|Sy~vEksibzNIPwFH(6E;m(eamu#J*u|K+ z4cWL8eX7mWyzS^P090ND_veNm20VVS3yk^eCNn%ftcBBr+<`v9ecPz9qe~KIzHwKy ztv!Vmy}olTriFjp8@!r&FV}y|_+h>RKi7pidwp)NocuSocr`SKBi6LCMVWGGwqY^+0HJtto zj7Q{C9M^5=>Bj2qF%G*;6^|Xn%K88~5Z44T`&p01v0BVTy0waFlhr46OQ@^{eSHt` zUS3izBxO(oHpmAOX2JE+4h|hE@u!GP%{iFiEeXh-^7Ku)aghh91V(eb%Xg;Nm8!F=D-dNC>X8Lx{1W(hT}Q~ZLq#)h>@4{GkP;Iu?>b$CIIqOz zU#a6tV5YLh_*X}Dudqeqtp4wpIZt2PT26z>v|ert;EE__0h0rWRm&vPZ`Xgw5=UF5 z{G)%_c0{N67qDPp?}p0w1>N0s7wChLfcuMBKj*&sLOj}}MDNnMrd`vUXkvp9tSg57 z(EjDEJvJaAFRvTp%5~6-W;Cv_eEq+&DB^QB~HERT6598uqi@d`>Ks|m;iUHspHhXakeuiwHk0nk`xpIC@i_u`0_MV1Rf<=>$FJBIR0ux%T>W8ZuK zK1gTwd-$h+zzo@OcFG0WhHLbL5}So$t>(5++3BwaA)(k-VII?Zw;#X|I_~B0%P*Sy z{*Hg2+S z(W&MxNt1LPsZtG?_>5%*$Sm|s#YX>wF*DsDYPW5L@aZxVX^}+nv$oM!``iLmNy32O zh3Hy(-42Ynm0X=E_DIl1+F*jx`9`ggE%-C|4w7~GSy=hdy8#^;u{)^cYMiEI*^p~v z2x``k+6}Do%8XN@Wd_Cd=T+iO3Xz`>X`phv#f1nx`Ct=bx2hBaJ*bo8596IDql! zzQcLt^>-AVEx^=apPb*J$LK#h;Lnal;;%cf;gnlW<%`WU*^IkarA0>%_px-ZQ~?wBHPpdJcXMDL zLO$WNe;v8@MBxSL8!^@wEs(<#b2m>@L^Z1Y3x;PZrd(vXEj|OyRL8M`h6R(Tr8@!O zuL>54ls#cdj=M$YePBc&{dm0x0&KmrtSmvptbV<1MM26Gm`a2m=`OoJMLXcG3)J}} zlLIt~kE|QMqj;lY?f#Y?^qYDY1)dcm1(nqUIX)Zj>I^J7fE{~5WB7x*v1AyCG+PD4EWWgXL4GwRCt%x^_Ahl5gUog}%1lX6Cu z6*HXgd#pSbfq&tqSr3@M;v_pdulw;t9>XpAFwjCw#Gehci!vpR5!E3jm&-IF$2muGh%KcD z@-UfosZ`(^?GUi%UheL2QOf-d2tik%l0tfVZ5}H@-DVOdGPYsxuDn5LX+tsd(--R2 z+L_l`N}*{KN^c(31zoGG4F8Obie<#62T+ag96uzwhR26X?b^^kYF72qHvs0!iy#q1 zyCbp8SyRDl$Wu)eelU;d)KZUtJK%{zHH}%gk*c4iXN~j~7QtXGTN--7l81=`7BDcYmW#JH~-or!|Dc3Y;=@XU$*)WY~Rmys$){!-X$)vkp# z`o1u*B+8A2(V0`H0cW!R6Yn}J10PPrX=VjU_xG+v4o!^Zpckz>wK3I>BDp-k;Oh97 zL7g?Sb=fXH78KMr<%92!YqfDvU#5@O8S~{lJ%jGB3J=)pRKEzl5a`kW&0Ur7H<4y@ zQ`$DK)b^+x&>ivBS>f$S=(fj$NExtf9q`Vp6~O zP-Dbbavkr(BOckKVf4g|xEwlv*;_*>_I z@%dHKx*ypb02V>Dl{!Bj`+-OfAU2GnZ9nRJAqK-~^7ImY#d+pm6yrZ^JM7(%5XM&5rlhGPD1LvR{(=(7vKx3`?n&xJU!)y1Cn|6cE6^g z`>ea|`tZ28-_24*le+aG@N05-sxgV;bVNI+=9GV7mY4w;Z?70xE2K=o=#?|BRkJo|I4rsM?u74qOR1Np zWS<+=SME+-AG?a=u1l51(~G~1JbGoC^zkIxkRA_UYu%i({tHYua<%;&CyR$inmL!J z!SM9%isENN%Gy6z@~pk-(S0A?&dn!Rll)}2a2qxew5#Llr90yRG(nqy@%#4zCd6{R zLqu(umVLiN99R!}8x~9At34;?b(7Po7aGbJ=HS)$W>lYejE_iHPLo@;U*(81uQ+ZE@OO9!`N+*|R?vr$_g%FOmJ;Y# zI|eoI#$01evx@V4Rw~Eq3TZEDPhOQvsl%Fid{eG5t;jIr5iyM2bFz~}uTfl3g+8si&P$~d|?GJdEYD~~gkdsLOU9gXdE4fuD& z_7ncMl8GrvMAZBK8--*q62}!(r`pd0bC=fpc))hs{we6)&jdsq6R-7}@?raO4Q_?41*@!j zv_Dg;&v@1SR$Y$XKBRS>RP53#r>bq!Zcg(HSyj>2?h7&2$LG53WbGo*mm3!dHmH#Z z+X$Fwb<|BAFMxibPwO1cZ@)d8{q6XW%N6*{Uj95pvLL8_6Qi7>eZ$w+ zK!NkwaX(U@?o|UTdk-YZg&UUPMUntub6)-wm)?7mb}*rSpC_e zZSAR_FIy#kS~91&=U(zId?8t{^d;BM!;o>ny2v--Q%isC_Ba!tf_5+LR^n={`VoYC zo>ffWIQo{Voziiy*36_`r)-UCaXUx{m08J5{p@%Lb%FeqRDUjpNLIYaoAlMo2p<1H zxv4oe#o-rEB?|Z$U-~E$2 z=X=g`p68r%&u6#~eI}MluK#6<=9QmxL^D$jNXRqw!V}%@8$H24U0=XjixrxFp9@uX zLeEBq_0^T|_LCYfzn!`|%Y26do*{V!u718ZpN*Xyi$By|p5WQSIBQd`EL>Jo!?@Wr z1swzqNk}G&Q9OGGwwM1FzasOQu$Qu#m=o&gxPodbr2;bA444T7V%mz?igXiMB}BrS zM$DE%v%Lp%2`oFLM3CHq(gRkvTz6abQwv#Y8rSI<*CZ#6TUjc28Iu>K5PY9rFHBai zU>0{a$!`KMMut_~WX;yyIb(~GLPX>N``$ZG2~v@@rTZmLjWnMsQgSfMeG8@QR=VqM z#f?S6$9JS~DN%af5ua>p569C6C0V`IJCRWg*hA#Bt;$-DyY^(hibb`bCIZyPjV}5( zYGo@NY9{Q57$_icLh_=A#Sgn)uXnl$YvQq*;5C4oP-Hsddwd-DgxwYFB;FGdDXAGG z5+8PMZ_`D&%0D75Isv()T|059RF9=FWVNr^NV>lGjNY@+wbd7q2?}2CUvh>v8%Xag z=28OBSbyGprnNro@q^_5S)D{5LPKF#H(EzWtGPHgu<)h3z=A4sm?u6Ev*(Sr4DLizd2qo#;RCI*o+*xdm+%VocK7StqU#Kq zV-H+^5(~Nw(FrnJuJaQW1;&|x`0Uug9_v+PE>)t;eD&3GooW3#ooq;-pBT6OV|y`^ zT@j(Q`l}q_0-LV$1Sn>ckLzZ_m;>#wM_)ExPM$E~% zM1o>Wc+WPo=GHTyJL@Y`?eP2!aBn8uYJUcXsTw@|YcqX+J(#UK+!O zcbg803M(9XPNu`$s^osGVcEA5l_9qyn3J-5{hl7_qS@_;fxk3PT^;>{@=KTI#on3y ziE`l#KR@ZHP9+S4i97Gr$u^nA>+6y=s#c$mYc?rXj^$7b>`HU^#nY#1qvJuKTIwf9$rxgtYN>+}+4k@oS+$w}k2yXc=L6XBmNn_~OsaS<-# zwiDA6vI1=+FIggoAHyBB)hWjF!J3?$&Khrb&$A%~>rb!|moiG}<%a7rr;@6UIck}O zeAEwN+6zEDZ8g6*nY8i4Nz>GSH7~K^X~$-f%Tn{`Yp?Clj%^n0;taC#PBk)ef8BfBO!dH` zKd^ny72BWA4drW{H(7H@<{Ie+Ovx*2+AYYVSh_~b8ztF-@&qjN;0Y>ZyW7t!b@qYyv0tG`wL8 z@GLSvPn9J%b5xsgrCj-q6dGTp5iZj_suAwe&}5+0N{8|bWm;Yj&?%zFyH42re09RG zTRk!O%6?m$b+{LA_!B*N(C;~$h3<3M7TOX^d&P_d@XvL<4bSCbs}D!efr|qXn_A(p1<{|?H%7H ziz;;faCO9aFV4sV(pY+*n9O7nM*{^u@u{R@v7!a+6g*>yV`k zBk$5PLdCrW%d6+87Qmx`%L*j2x#aK*mF2#;mQ$hi;T9G8nfq_lOu)b6*P0IBF7L?- zSu|!yTQaivRBKpfb6Dg3z)2V`u~r?r(KMZc64xj!8&LjZ_{CWfRJ=;jB6&tE$KKWt zX7BV=a!g}7PgtF@ACvYFqM+<>Nqm52faV2%%|d+@ZlE*FN4jEY_>@&)(Zl&9^t*2> zuS@FOerAuo(|J=Z_WdT|FtVEIra;!VQVWe^^a~6IB7b*xR$=sKVe*cXmr=>VEgOR|1E@_%kUx)s&g<-dwT^ zI?+<%eY24}bO})kQ3vmm@ESRPuJ!8nt~$3|{xp19{>IXp_Z|8GPVajeL}It^;WpRbQUQ*2cGi}jLL{?Jyczx8u%BIq*{g7h27&Cb zcakK!o{Jfv)AWdatEF7IH=X*+R}9ulJDrPbVOXHio8ybxO;JU-%ZgGPju%r#)9@uQ>X6+ifIaAjj)032g2Q5#ER`0pI>#O(Sbx0(4uhqx z7PO}5zo-OHExhEjjNuBu-!%yd$v6M)sexB-qssj=NUC;Hnw-d|adB~X#g_3%n9Ey? zqjBPQ>>XGtccax*GF2R_$$|VPIG^@%ns=FHR0oABGo~qFDl~W@)NhxQV4)?|-Yg0XRNe2**; zfivA59yWWsiJ+RbCkq05X2rm}I(c3Wa~SQi!=j9Ko;Gi~pet1V>PV#$=@=S9W?^o(Dh)D*JqiS3cO$}RBV))P1^ zRSDR#t@dbJyeqK4>u%s;P7;AaP=!KJ@cMVFprJ-c$fIOxz5cRZQ}(tW&MS%kD)9Y+ z-V=E0Cnuzy`YC(696s=o8vu$}>Zrpaclwy9Id`LCz$q9E_EH7n_NyeDjdbv5YVu*Q zRPy3*Peg}!SHIkax!>j&rIY`&rwiFzK=QJ#EM|=?o`$6wATeBX2lq+bNog86Acnq_ zTyQR`6G9`9ie}O49bVK!71B{MAGBd*y29K@k}T}m%m;L!H}M>ig%1jMawS4pKpr@O zQj2CQB^pWZXsMGDbBnYbnB^LfM?R{mLq5KoNR~?$AZ|jj+-r7OktXzi2{Q#odowNb zgTjtd>w6!}f`3_2)k#3Uz z=u-f7@~`1dM{JmUK(gFRqCHsRI2@%;7c$wxrK|4CiRuB_9r^__f<<#7^$H5vLLbj3 zh;?2ADG?F|i5=Y6RSHrn12-2ECj~V#lO_;lSQoGU-bwowcA5 zJqjga_8*in<%odHzBo@xi>QARdgZ8`GYr?@!(6Y!6uW7PAjAz;MB1Ux@$ zn0G|9!WU53ymovWUu~horDwAd)=^s@p6pjtDav|QYj30-Y3bo}kn77|^57e?KnkeB z3Gn0?Z{tgINgHHPlHl@WQ11xtB^?m>pO_nF=rj%Rz#Vr6=>HX%QQ#sQ3Hc*V9eFm| zZye}~?p34%z5F=`B6=8A<&jvh<{HcjU{eE&p4o1AXaA4$dbBfk-(F~NKvdJ0f%L~n z`Tn;F>jikB*=`^#B-FPs+*23z&0+C=#-ADc$KdheD3gN-2v8m+*Gewtf_A|4%=Nx` zYj5e4+yX7>mj+Uy=%cbY0@g=`7Fn9e<*y%Z_<}RO1=WNq^q;NpQ=~lDSZu`K0BZQ0 z3&L({_4pRo<s@Z!^w%u*pDZOrUqy>FtGss#HelV!_udoQfpVP?V zAbJ=W`;Y$uvfsE5%OqeSqsb=PX*`#>Yl8tsj7ya9A> zDs=9>`#xm2a!aFUNSU|Mp0@6-SJQ0;7FR zt%_ZX&n=1?6YXVU`-d?X_HQp?f=YoMbfU8wL{{Pq&2n5 z_tz#}1cI2n0!oI!?C@p)Q-dy_;&Gu45LR5H)mY4gI6aXQX+&3b2A5YGHCTBBmD&+h zo#`e8$vHftfbpostMf0u5FbtxME3oM z3=r*^LZBDZ%A^8;7R_rA6_qt^O)U)@((JgM2Zd({=MKwM2Q;6ws*nH`OaqD_b!Ojf7 z2b714QD(z>ZMe=?2gL)d&fu>sNj@T?9GD%QRU6Bh>ss1L;pBPQyAZeqorKlrB5U9I4M8@Uz|`?5;)KycSHJuxoL#T7y?T@as#PiC zZDoi=ab>8B#tCL0G<{?2>CIohe!8KlQ~^T7Q0&NBpHMR}=nole1N$$|&WP}>NUB(q z)owt$KFFBX(H65+blM^iMRPwIILD7^IYwk?q}lV^k7#C5p(W{Kq$xk9x8#x^7kX(I zkA{4Vi>p2XB9l%0*js$?_#>)$nfVky zG6vKlsJ!)`EE;%5xol>;DJ>+lX%3p_@rFcPY=MrhOF$HjE~?9q$%XlUyBCVJ-jyvMc3C*P)}bNVDiTbL;Dag@E#NQSHi69=Q4e zFj;gZg8@RG6NCsZk(0;*u*vAaws5KBVv1`YpwI8D;2g8|<4y|<_XvPCMi0s{xb&^d zMT;!?m=Yp&o;C7@3JT_+q?L0}i-6`T%?NJSe%( z_+ocybBM>X8N(I56)AiKr*w+D{$JMMxBej`b{MvPH|`eN5Qe>bm-f9PU$7+?X3nn L*HE9dF^~QSP>%Ei literal 0 HcmV?d00001 diff --git a/src/db/migrations/0034_lush_speed.sql b/src/db/migrations/0034_lush_speed.sql new file mode 100644 index 00000000..13da5485 --- /dev/null +++ b/src/db/migrations/0034_lush_speed.sql @@ -0,0 +1 @@ +ALTER TYPE "public"."dbms_status" ADD VALUE 'sqlite'; \ No newline at end of file diff --git a/src/db/migrations/meta/0034_snapshot.json b/src/db/migrations/meta/0034_snapshot.json new file mode 100644 index 00000000..eddc488e --- /dev/null +++ b/src/db/migrations/meta/0034_snapshot.json @@ -0,0 +1,2334 @@ +{ + "id": "90c26bd4-552c-445a-8491-487bcf705fa6", + "prevId": "29b53ca7-d603-4433-96f0-44d2df48ebdc", + "version": "7", + "dialect": "postgresql", + "tables": { + "public.settings": { + "name": "settings", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "name": { + "name": "name", + "type": "varchar(255)", + "primaryKey": false, + "notNull": true + }, + "smtp_password": { + "name": "smtp_password", + "type": "varchar(255)", + "primaryKey": false, + "notNull": false + }, + "smtp_from": { + "name": "smtp_from", + "type": "varchar(255)", + "primaryKey": false, + "notNull": false + }, + "smtp_host": { + "name": "smtp_host", + "type": "varchar(255)", + "primaryKey": false, + "notNull": false + }, + "smtp_port": { + "name": "smtp_port", + "type": "varchar(255)", + "primaryKey": false, + "notNull": false + }, + "smtp_user": { + "name": "smtp_user", + "type": "varchar(255)", + "primaryKey": false, + "notNull": false + }, + "smtp_secure": { + "name": "smtp_secure", + "type": "boolean", + "primaryKey": false, + "notNull": false + }, + "default_storage_channel_id": { + "name": "default_storage_channel_id", + "type": "uuid", + "primaryKey": false, + "notNull": false + }, + "encryption": { + "name": "encryption", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "default": false + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "deleted_at": { + "name": "deleted_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "settings_default_storage_channel_id_storage_channel_id_fk": { + "name": "settings_default_storage_channel_id_storage_channel_id_fk", + "tableFrom": "settings", + "tableTo": "storage_channel", + "columnsFrom": [ + "default_storage_channel_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "set null", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "settings_name_unique": { + "name": "settings_name_unique", + "nullsNotDistinct": false, + "columns": [ + "name" + ] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.account": { + "name": "account", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "account_id": { + "name": "account_id", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "provider_id": { + "name": "provider_id", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "user_id": { + "name": "user_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "access_token": { + "name": "access_token", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "refresh_token": { + "name": "refresh_token", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "id_token": { + "name": "id_token", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "access_token_expires_at": { + "name": "access_token_expires_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "refresh_token_expires_at": { + "name": "refresh_token_expires_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "scope": { + "name": "scope", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "password": { + "name": "password", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "deleted_at": { + "name": "deleted_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "account_user_id_user_id_fk": { + "name": "account_user_id_user_id_fk", + "tableFrom": "account", + "tableTo": "user", + "columnsFrom": [ + "user_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.passkey": { + "name": "passkey", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "publicKey": { + "name": "publicKey", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "userId": { + "name": "userId", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "credentialId": { + "name": "credentialId", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "counter": { + "name": "counter", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "deviceType": { + "name": "deviceType", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "backedUp": { + "name": "backedUp", + "type": "boolean", + "primaryKey": false, + "notNull": true + }, + "transports": { + "name": "transports", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "deleted_at": { + "name": "deleted_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "passkey_userId_user_id_fk": { + "name": "passkey_userId_user_id_fk", + "tableFrom": "passkey", + "tableTo": "user", + "columnsFrom": [ + "userId" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.session": { + "name": "session", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "expires_at": { + "name": "expires_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true + }, + "token": { + "name": "token", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "ip_address": { + "name": "ip_address", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "user_agent": { + "name": "user_agent", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "user_id": { + "name": "user_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "impersonated_by": { + "name": "impersonated_by", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "active_organization_id": { + "name": "active_organization_id", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "deleted_at": { + "name": "deleted_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "session_user_id_user_id_fk": { + "name": "session_user_id_user_id_fk", + "tableFrom": "session", + "tableTo": "user", + "columnsFrom": [ + "user_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "session_token_unique": { + "name": "session_token_unique", + "nullsNotDistinct": false, + "columns": [ + "token" + ] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.two_factor": { + "name": "two_factor", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "secret": { + "name": "secret", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "backup_codes": { + "name": "backup_codes", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "user_id": { + "name": "user_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": { + "two_factor_user_id_user_id_fk": { + "name": "two_factor_user_id_user_id_fk", + "tableFrom": "two_factor", + "tableTo": "user", + "columnsFrom": [ + "user_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.user": { + "name": "user", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "email": { + "name": "email", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "email_verified": { + "name": "email_verified", + "type": "boolean", + "primaryKey": false, + "notNull": true + }, + "image": { + "name": "image", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "role": { + "name": "role", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "theme": { + "name": "theme", + "type": "user_themes", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'light'" + }, + "banned": { + "name": "banned", + "type": "boolean", + "primaryKey": false, + "notNull": false + }, + "ban_reason": { + "name": "ban_reason", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "ban_expires": { + "name": "ban_expires", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "lastConnectedAt": { + "name": "lastConnectedAt", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "lastChangedPasswordAt": { + "name": "lastChangedPasswordAt", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "two_factor_enabled": { + "name": "two_factor_enabled", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "default": false + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "deleted_at": { + "name": "deleted_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "user_email_unique": { + "name": "user_email_unique", + "nullsNotDistinct": false, + "columns": [ + "email" + ] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.verification": { + "name": "verification", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "identifier": { + "name": "identifier", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "value": { + "name": "value", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "expires_at": { + "name": "expires_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "deleted_at": { + "name": "deleted_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.organization": { + "name": "organization", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "slug": { + "name": "slug", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "logo": { + "name": "logo", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "metadata": { + "name": "metadata", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "deleted_at": { + "name": "deleted_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "organization_slug_unique": { + "name": "organization_slug_unique", + "nullsNotDistinct": false, + "columns": [ + "slug" + ] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.member": { + "name": "member", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "organization_id": { + "name": "organization_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "user_id": { + "name": "user_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "role": { + "name": "role", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "deleted_at": { + "name": "deleted_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "member_organization_id_organization_id_fk": { + "name": "member_organization_id_organization_id_fk", + "tableFrom": "member", + "tableTo": "organization", + "columnsFrom": [ + "organization_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "member_user_id_user_id_fk": { + "name": "member_user_id_user_id_fk", + "tableFrom": "member", + "tableTo": "user", + "columnsFrom": [ + "user_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.invitation": { + "name": "invitation", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "organization_id": { + "name": "organization_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "email": { + "name": "email", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "role": { + "name": "role", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "status": { + "name": "status", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "expires_at": { + "name": "expires_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true + }, + "inviter_id": { + "name": "inviter_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "deleted_at": { + "name": "deleted_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "invitation_organization_id_organization_id_fk": { + "name": "invitation_organization_id_organization_id_fk", + "tableFrom": "invitation", + "tableTo": "organization", + "columnsFrom": [ + "organization_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "invitation_inviter_id_user_id_fk": { + "name": "invitation_inviter_id_user_id_fk", + "tableFrom": "invitation", + "tableTo": "user", + "columnsFrom": [ + "inviter_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.projects": { + "name": "projects", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "slug": { + "name": "slug", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "is_archived": { + "name": "is_archived", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "default": false + }, + "organization_id": { + "name": "organization_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "deleted_at": { + "name": "deleted_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "projects_organization_id_organization_id_fk": { + "name": "projects_organization_id_organization_id_fk", + "tableFrom": "projects", + "tableTo": "organization", + "columnsFrom": [ + "organization_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "projects_slug_unique": { + "name": "projects_slug_unique", + "nullsNotDistinct": false, + "columns": [ + "slug" + ] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.backups": { + "name": "backups", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "status": { + "name": "status", + "type": "status", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'waiting'" + }, + "file": { + "name": "file", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "file_size": { + "name": "file_size", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "database_id": { + "name": "database_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "imported": { + "name": "imported", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "default": false + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "deleted_at": { + "name": "deleted_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "backups_database_id_databases_id_fk": { + "name": "backups_database_id_databases_id_fk", + "tableFrom": "backups", + "tableTo": "databases", + "columnsFrom": [ + "database_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.databases": { + "name": "databases", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "agent_database_id": { + "name": "agent_database_id", + "type": "uuid", + "primaryKey": false, + "notNull": true, + "default": "gen_random_uuid()" + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "dbms": { + "name": "dbms", + "type": "dbms_status", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "backup_policy": { + "name": "backup_policy", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "is_waiting_for_backup": { + "name": "is_waiting_for_backup", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "backup_to_restore": { + "name": "backup_to_restore", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "agent_id": { + "name": "agent_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "last_contact": { + "name": "last_contact", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "project_id": { + "name": "project_id", + "type": "uuid", + "primaryKey": false, + "notNull": false + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "deleted_at": { + "name": "deleted_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "databases_agent_id_agents_id_fk": { + "name": "databases_agent_id_agents_id_fk", + "tableFrom": "databases", + "tableTo": "agents", + "columnsFrom": [ + "agent_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "databases_project_id_projects_id_fk": { + "name": "databases_project_id_projects_id_fk", + "tableFrom": "databases", + "tableTo": "projects", + "columnsFrom": [ + "project_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "no action", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.restorations": { + "name": "restorations", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "status": { + "name": "status", + "type": "status", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'waiting'" + }, + "backup_storage_id": { + "name": "backup_storage_id", + "type": "uuid", + "primaryKey": false, + "notNull": false + }, + "backup_id": { + "name": "backup_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "database_id": { + "name": "database_id", + "type": "uuid", + "primaryKey": false, + "notNull": false + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "deleted_at": { + "name": "deleted_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "restorations_backup_storage_id_backup_storage_id_fk": { + "name": "restorations_backup_storage_id_backup_storage_id_fk", + "tableFrom": "restorations", + "tableTo": "backup_storage", + "columnsFrom": [ + "backup_storage_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "restorations_backup_id_backups_id_fk": { + "name": "restorations_backup_id_backups_id_fk", + "tableFrom": "restorations", + "tableTo": "backups", + "columnsFrom": [ + "backup_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "restorations_database_id_databases_id_fk": { + "name": "restorations_database_id_databases_id_fk", + "tableFrom": "restorations", + "tableTo": "databases", + "columnsFrom": [ + "database_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.retention_policies": { + "name": "retention_policies", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "database_id": { + "name": "database_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "type": { + "name": "type", + "type": "retention_policy_type", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "count": { + "name": "count", + "type": "integer", + "primaryKey": false, + "notNull": false, + "default": 7 + }, + "days": { + "name": "days", + "type": "integer", + "primaryKey": false, + "notNull": false, + "default": 30 + }, + "gfs_daily": { + "name": "gfs_daily", + "type": "integer", + "primaryKey": false, + "notNull": false, + "default": 7 + }, + "gfs_weekly": { + "name": "gfs_weekly", + "type": "integer", + "primaryKey": false, + "notNull": false, + "default": 4 + }, + "gfs_monthly": { + "name": "gfs_monthly", + "type": "integer", + "primaryKey": false, + "notNull": false, + "default": 12 + }, + "gfs_yearly": { + "name": "gfs_yearly", + "type": "integer", + "primaryKey": false, + "notNull": false, + "default": 3 + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "deleted_at": { + "name": "deleted_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "retention_policies_database_id_databases_id_fk": { + "name": "retention_policies_database_id_databases_id_fk", + "tableFrom": "retention_policies", + "tableTo": "databases", + "columnsFrom": [ + "database_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.agents": { + "name": "agents", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "slug": { + "name": "slug", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "version": { + "name": "version", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "is_archived": { + "name": "is_archived", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "default": false + }, + "last_contact": { + "name": "last_contact", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "deleted_at": { + "name": "deleted_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "agents_slug_unique": { + "name": "agents_slug_unique", + "nullsNotDistinct": false, + "columns": [ + "slug" + ] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.notification_channel": { + "name": "notification_channel", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "provider": { + "name": "provider", + "type": "provider_kind", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "organization_id": { + "name": "organization_id", + "type": "uuid", + "primaryKey": false, + "notNull": false + }, + "name": { + "name": "name", + "type": "varchar(255)", + "primaryKey": false, + "notNull": true + }, + "config": { + "name": "config", + "type": "jsonb", + "primaryKey": false, + "notNull": true + }, + "enabled": { + "name": "enabled", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "deleted_at": { + "name": "deleted_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "notification_channel_organization_id_organization_id_fk": { + "name": "notification_channel_organization_id_organization_id_fk", + "tableFrom": "notification_channel", + "tableTo": "organization", + "columnsFrom": [ + "organization_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.organization_notification_channels": { + "name": "organization_notification_channels", + "schema": "", + "columns": { + "organization_id": { + "name": "organization_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "notification_channel_id": { + "name": "notification_channel_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": { + "organization_notification_channels_organization_id_organization_id_fk": { + "name": "organization_notification_channels_organization_id_organization_id_fk", + "tableFrom": "organization_notification_channels", + "tableTo": "organization", + "columnsFrom": [ + "organization_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "organization_notification_channels_notification_channel_id_notification_channel_id_fk": { + "name": "organization_notification_channels_notification_channel_id_notification_channel_id_fk", + "tableFrom": "organization_notification_channels", + "tableTo": "notification_channel", + "columnsFrom": [ + "notification_channel_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "organization_notification_channels_organization_id_notification_channel_id_unique": { + "name": "organization_notification_channels_organization_id_notification_channel_id_unique", + "nullsNotDistinct": false, + "columns": [ + "organization_id", + "notification_channel_id" + ] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.alert_policy": { + "name": "alert_policy", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "notification_channel_id": { + "name": "notification_channel_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "event_kind": { + "name": "event_kind", + "type": "event_kind[]", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "enabled": { + "name": "enabled", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": true + }, + "database_id": { + "name": "database_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "deleted_at": { + "name": "deleted_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "alert_policy_notification_channel_id_notification_channel_id_fk": { + "name": "alert_policy_notification_channel_id_notification_channel_id_fk", + "tableFrom": "alert_policy", + "tableTo": "notification_channel", + "columnsFrom": [ + "notification_channel_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "alert_policy_database_id_databases_id_fk": { + "name": "alert_policy_database_id_databases_id_fk", + "tableFrom": "alert_policy", + "tableTo": "databases", + "columnsFrom": [ + "database_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.notification_log": { + "name": "notification_log", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "channel_id": { + "name": "channel_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "policy_id": { + "name": "policy_id", + "type": "uuid", + "primaryKey": false, + "notNull": false + }, + "organization_id": { + "name": "organization_id", + "type": "uuid", + "primaryKey": false, + "notNull": false + }, + "event": { + "name": "event", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "provider": { + "name": "provider", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "provider_name": { + "name": "provider_name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "title": { + "name": "title", + "type": "varchar(255)", + "primaryKey": false, + "notNull": true + }, + "message": { + "name": "message", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "level": { + "name": "level", + "type": "level", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "payload": { + "name": "payload", + "type": "jsonb", + "primaryKey": false, + "notNull": false + }, + "success": { + "name": "success", + "type": "boolean", + "primaryKey": false, + "notNull": true + }, + "error": { + "name": "error", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "provider_response": { + "name": "provider_response", + "type": "jsonb", + "primaryKey": false, + "notNull": false + }, + "sent_at": { + "name": "sent_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "deleted_at": { + "name": "deleted_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.organization_storage_channels": { + "name": "organization_storage_channels", + "schema": "", + "columns": { + "organization_id": { + "name": "organization_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "storage_channel_id": { + "name": "storage_channel_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": { + "organization_storage_channels_organization_id_organization_id_fk": { + "name": "organization_storage_channels_organization_id_organization_id_fk", + "tableFrom": "organization_storage_channels", + "tableTo": "organization", + "columnsFrom": [ + "organization_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "organization_storage_channels_storage_channel_id_storage_channel_id_fk": { + "name": "organization_storage_channels_storage_channel_id_storage_channel_id_fk", + "tableFrom": "organization_storage_channels", + "tableTo": "storage_channel", + "columnsFrom": [ + "storage_channel_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "organization_storage_channels_organization_id_storage_channel_id_unique": { + "name": "organization_storage_channels_organization_id_storage_channel_id_unique", + "nullsNotDistinct": false, + "columns": [ + "organization_id", + "storage_channel_id" + ] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.storage_channel": { + "name": "storage_channel", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "organization_id": { + "name": "organization_id", + "type": "uuid", + "primaryKey": false, + "notNull": false + }, + "provider": { + "name": "provider", + "type": "provider_storage_kind", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "name": { + "name": "name", + "type": "varchar(255)", + "primaryKey": false, + "notNull": true + }, + "config": { + "name": "config", + "type": "jsonb", + "primaryKey": false, + "notNull": true + }, + "enabled": { + "name": "enabled", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "deleted_at": { + "name": "deleted_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "storage_channel_organization_id_organization_id_fk": { + "name": "storage_channel_organization_id_organization_id_fk", + "tableFrom": "storage_channel", + "tableTo": "organization", + "columnsFrom": [ + "organization_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.storage_policy": { + "name": "storage_policy", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "storage_channel_id": { + "name": "storage_channel_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "enabled": { + "name": "enabled", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": true + }, + "database_id": { + "name": "database_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "deleted_at": { + "name": "deleted_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "storage_policy_storage_channel_id_storage_channel_id_fk": { + "name": "storage_policy_storage_channel_id_storage_channel_id_fk", + "tableFrom": "storage_policy", + "tableTo": "storage_channel", + "columnsFrom": [ + "storage_channel_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "storage_policy_database_id_databases_id_fk": { + "name": "storage_policy_database_id_databases_id_fk", + "tableFrom": "storage_policy", + "tableTo": "databases", + "columnsFrom": [ + "database_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.backup_storage": { + "name": "backup_storage", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "backup_id": { + "name": "backup_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "storage_channel_id": { + "name": "storage_channel_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "status": { + "name": "status", + "type": "backup_storage_status", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'pending'" + }, + "path": { + "name": "path", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "size": { + "name": "size", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "checksum": { + "name": "checksum", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "deleted_at": { + "name": "deleted_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "backup_storage_backup_id_backups_id_fk": { + "name": "backup_storage_backup_id_backups_id_fk", + "tableFrom": "backup_storage", + "tableTo": "backups", + "columnsFrom": [ + "backup_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "backup_storage_storage_channel_id_storage_channel_id_fk": { + "name": "backup_storage_storage_channel_id_storage_channel_id_fk", + "tableFrom": "backup_storage", + "tableTo": "storage_channel", + "columnsFrom": [ + "storage_channel_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + } + }, + "enums": { + "public.user_themes": { + "name": "user_themes", + "schema": "public", + "values": [ + "light", + "dark", + "system" + ] + }, + "public.retention_policy_type": { + "name": "retention_policy_type", + "schema": "public", + "values": [ + "count", + "days", + "gfs" + ] + }, + "public.provider_kind": { + "name": "provider_kind", + "schema": "public", + "values": [ + "slack", + "smtp", + "discord", + "telegram", + "gotify", + "ntfy", + "webhook" + ] + }, + "public.event_kind": { + "name": "event_kind", + "schema": "public", + "values": [ + "error_backup", + "error_restore", + "success_restore", + "success_backup", + "weekly_report" + ] + }, + "public.level": { + "name": "level", + "schema": "public", + "values": [ + "critical", + "warning", + "info" + ] + }, + "public.provider_storage_kind": { + "name": "provider_storage_kind", + "schema": "public", + "values": [ + "local", + "s3", + "google-drive" + ] + }, + "public.backup_storage_status": { + "name": "backup_storage_status", + "schema": "public", + "values": [ + "pending", + "success", + "failed" + ] + }, + "public.dbms_status": { + "name": "dbms_status", + "schema": "public", + "values": [ + "postgresql", + "mysql", + "mongodb", + "sqlite" + ] + }, + "public.status": { + "name": "status", + "schema": "public", + "values": [ + "waiting", + "ongoing", + "failed", + "success" + ] + }, + "public.type_storage": { + "name": "type_storage", + "schema": "public", + "values": [ + "local", + "s3" + ] + } + }, + "schemas": {}, + "sequences": {}, + "roles": {}, + "policies": {}, + "views": {}, + "_meta": { + "columns": {}, + "schemas": {}, + "tables": {} + } +} \ No newline at end of file diff --git a/src/db/migrations/meta/_journal.json b/src/db/migrations/meta/_journal.json index de4afef2..3082aefc 100644 --- a/src/db/migrations/meta/_journal.json +++ b/src/db/migrations/meta/_journal.json @@ -239,6 +239,13 @@ "when": 1770923665015, "tag": "0033_handy_valeria_richards", "breakpoints": true + }, + { + "idx": 34, + "version": "7", + "when": 1771790675240, + "tag": "0034_lush_speed", + "breakpoints": true } ] } \ No newline at end of file diff --git a/src/db/schema/07_database.ts b/src/db/schema/07_database.ts index 4e9d5cb9..af111121 100644 --- a/src/db/schema/07_database.ts +++ b/src/db/schema/07_database.ts @@ -9,7 +9,6 @@ import {timestamps} from "@/db/schema/00_common"; import {AlertPolicy, alertPolicy} from "@/db/schema/10_alert-policy"; import {StoragePolicy, storagePolicy} from "@/db/schema/13_storage-policy"; import {BackupStorage, backupStorage} from "@/db/schema/14_storage-backup"; -import {storageChannel} from "@/db/schema/12_storage-channel"; export const database = pgTable("databases", { id: uuid("id").primaryKey().defaultRandom(), diff --git a/src/db/schema/types.ts b/src/db/schema/types.ts index bca9af82..ad98078d 100644 --- a/src/db/schema/types.ts +++ b/src/db/schema/types.ts @@ -2,7 +2,7 @@ import {pgEnum} from "drizzle-orm/pg-core"; import {createSelectSchema} from "drizzle-zod"; import {z} from "zod"; -export const dbmsEnum = pgEnum("dbms_status", ["postgresql", "mysql", "mongodb"]); +export const dbmsEnum = pgEnum("dbms_status", ["postgresql", "mysql", "mongodb", "sqlite"]); export const statusEnum = pgEnum("status", ["waiting", "ongoing", "failed", "success"]); export const typeStorageEnum = pgEnum("type_storage", ["local", "s3"]);