From 8f083b0946f66a68fd7b7cfc6a50c1ba4a722cb5 Mon Sep 17 00:00:00 2001 From: Jacob Maynard Date: Thu, 26 Feb 2026 10:49:04 -0600 Subject: [PATCH 1/9] swap to queue for emails --- .cursor/rules/durable-objects.mdc | 2 - .mcp/memory.db-wal | Bin 0 -> 41232 bytes packages/docs/STATUS.md | 8 +- .../diagrams/02-system-architecture.md | 4 +- ...urable-objects-migration-review-2026-02.md | 256 ----------- .../docs/audits/prod-audit-2026-01-19-full.md | 3 +- packages/workers/src/__tests__/health.test.js | 1 - packages/workers/src/__tests__/helpers.ts | 9 +- packages/workers/src/auth/config.ts | 84 ++-- packages/workers/src/auth/email.ts | 34 -- packages/workers/src/config/constants.ts | 7 - .../workers/src/durable-objects/EmailQueue.ts | 159 ------- .../__tests__/EmailQueue.test.js | 421 ------------------ packages/workers/src/index.ts | 38 +- packages/workers/src/lib/email-queue.ts | 26 ++ .../workers/src/lib/send-invitation-email.ts | 141 ++++++ .../src/routes/__tests__/contact.test.js | 78 ++-- .../src/routes/__tests__/email.test.js | 156 ------- .../__tests__/project-invitations.test.js | 11 +- packages/workers/src/routes/account-merge.ts | 23 +- .../billing/__tests__/invoiceHandlers.test.ts | 8 +- .../src/routes/billing/handlers/dunning.ts | 11 +- .../billing/handlers/invoiceHandlers.ts | 2 +- packages/workers/src/routes/contact.ts | 40 +- packages/workers/src/routes/email.ts | 146 ------ packages/workers/src/routes/health.ts | 4 +- packages/workers/src/routes/members.ts | 113 +---- .../workers/src/routes/orgs/invitations.ts | 111 +---- packages/workers/src/routes/orgs/members.ts | 111 +---- packages/workers/wrangler.jsonc | 51 ++- 30 files changed, 383 insertions(+), 1675 deletions(-) delete mode 100644 packages/docs/audits/durable-objects-migration-review-2026-02.md delete mode 100644 packages/workers/src/durable-objects/EmailQueue.ts delete mode 100644 packages/workers/src/durable-objects/__tests__/EmailQueue.test.js create mode 100644 packages/workers/src/lib/email-queue.ts create mode 100644 packages/workers/src/lib/send-invitation-email.ts delete mode 100644 packages/workers/src/routes/__tests__/email.test.js delete mode 100644 packages/workers/src/routes/email.ts diff --git a/.cursor/rules/durable-objects.mdc b/.cursor/rules/durable-objects.mdc index 83b8543c1..bb2c35268 100644 --- a/.cursor/rules/durable-objects.mdc +++ b/.cursor/rules/durable-objects.mdc @@ -16,7 +16,6 @@ Durable Objects provide stateful, single-instance objects for each project. They - **ProjectDoc**: Manages project Y.Doc and WebSocket connections - **UserSession**: Manages user session state -- **EmailQueue**: Manages email sending queue ## ProjectDoc Pattern @@ -211,4 +210,3 @@ this.doc.on('update', async (update) => { - `packages/workers/src/durable-objects/ProjectDoc.js` - Main ProjectDoc implementation - `packages/workers/src/durable-objects/UserSession.js` - User session management -- `packages/workers/src/durable-objects/EmailQueue.js` - Email queue management diff --git a/.mcp/memory.db-wal b/.mcp/memory.db-wal index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..c94b0be32f15cdf283602d41e67d1ab1e7dc6473 100644 GIT binary patch literal 41232 zcmeI536xxEb>F4Y(n~FGb`5AW^G36%TT->&zBD5Sjii~;jP_+_R2rdvTS+}?bv0Gh z5&~m`4K~CWj4{NJ;1ICmV4H~pNgy`Fh67FvUN|;*!SPOPHYdh_cjNr-_g<-AkGlFK z=OpL&B-Ll;>-XOM)_ec=fA9BI^^^Y{8^3c+;}7pxv*yM%^7E?uUiX_LXYTsB_s?zn z{`))42YIx%{QP^b{OEHNmDjxc#Ib|3y-aVlJC~xKZqxdP8`iu;*QvXKCL5(q@gvvk z`#1bn{gv)ly4btksw7*(2I{uq$v>n=itp0fYi`BiApRXL`!SH9OfuRP58W?I| zsDYsdh8h@ZV5ourLmKFej%>1bt$mF)JD+ARpG{wWE}QRlX0z_O#f3ELW$DHF_LaFT zJ)iXjV|$P9-*a-me&F!F{ZH#Fw9tP^0UWMoswn73UwX40N-&8FFW zl3mxq=)hr@8m&C?l6>-&8}pGjUpI1haUtt;vvh?8j|?1nsnNe0yVkz`{$3Q%UElF_nq6OvbaKzb2lroZ zIelVWFMeiI{p9|qPwGdHA2_t<_-Xx#{ikJZ7+6`?A*1fUnl8gt*j$>RJ|;TmoTN{4F~o9 z%=G>^#+18MJG&HTX*xT9e$YHGgFWFr^cV{kjwhUCypH?RmpT)@rjkM&3 z%WD*7oZPd1GTkS8juW4V^{zUsj?RT`_ z)P7C-W$hQVPiQ}@{j~P)wV%>{Li<3fnS>vm6G;QX_r0&c1k0Ot`&(7F`ON9VJSK0B|^ zEJVpgZo0d!Wbv+UC)u^onY}dIo4w4V#coz~xNE8P)U(|g{X#UK&M{_pfyAISo9Ky} z55bK2FqKaGlHOzVqWQjdqVHSmNOq$iiDib<b-Vf^?JP6(`UOnwe?8v_m{U?Qin3;_U&q!reOp#`oz)p+-!1He{!}x7l{EUSu7(k zF-*R+2)&buPN*QOqpd;P!*c#Tr|?3`wyfn$I@>MQv1e{>VseJHW%Ji2R;W;B_HcF~ zx;)EZfM=PdWuE4gegZ^hosODKw+ozdXyrCK(Q9|IsbU}|ccMqeGc#`G&1TTUWp)sq zsqTgL;#|5nhpE0>Z$)$6Y)16AfORBil(Ys*6OA`d$Z= z3$iXpomoNQ^qKa2?kxMVdCWEOO0=k)>Q(52wsSE}#puZex|uzX-*okv zWG;*57Z;A^D?BKJ>?2j0D2#d_otzQ94X6gx({|Ps6F<@>on=V+>*7yKTH@LHs3T6+ z)!QxZT6^1z^F5mEQ;;v5Y#&>|Oz)4YpPmv|!#VY%`yOHX$px0$!1`Ilw3S;HQ&d*L zOoCdny}T|}56qLA&B{iSJUkL(vHW9;8C8mw`rK@{H$J{!*}He4lcE2)bXwojVke-_ z9NP2rxxIMm{=KJ89(Z#9x&6nFA31&klep+}iGy0v>>PmX>J#D)%Rn``Q}6cL3#_?c zAIr&_80dE{EOJnXOl!?QY$<6%y;V;o0ghR@UBlYV-NGZ@GHg#gT8V z6_Ry~$cW4+Y8Z*%YB+}3YQ&zIHEcid%{X-uBa0UD?M#6r;mYILd6vuSkLDufbEhG} zKHV&5S(v7abDy7U$Kb9%fBM0kc|Q{~OHccqPwR)Gg_+6!9YR*=z2f4MgIrpi>&-4e zcuRp|X|S%il8|zjl)i7wDg6oZ^kUhNGS0kx`|)dgs6;S_mLi(9GpY@J( z_Nv{>lD7Id6#TQ81Omlx@s~b)XQuS0gkzHSrG@sqk}b|(l0kM#CFKPJx?>C4?{2m? zH7@+Iefx3Z90J?Qrn6|er1V31sFms~*+idEJ~=b>yZ}2{bkw~% zpOm`D-5d3vAR?rXpAbLkU{Go;^(1!!jG~VtOix7({Zcz!giogRnQm_}y?SJ!JA>At zh~%QUbaB6swu&p|f646JtZFU~$AxnxZY%baXz+@x(?lkkCN4P}6eTOcg+y5WB06 zkN5etZ?YKo0R=^KskeM4`|@dZbI|0~j;p!kBzn!86)lMoy5ka3&`pQrNn+0IJQq;u zD{|$xJH)takjxziLzL~?n(aWW3bGPV7Z-BmPPOMJw&kY)oVb))Ov&{lq*|xPk^>?dBs?(K!sC>Ed$;xw;S8LzYeqZ~n_HQ{mh_!v34eZoz(MIb3t^Ql}pRIqe z{$uqYsDF3;74`XgTt8F~>i5>y)V@;tMD1O*x71!&yIMO`{d)CJs=r$OaP=pv@2>t} z_4UeJP|)v4;O)zQk=EAOeiLHnroUhUQOPuFj&{Z8$4?V;L4^&hIAsOpvf zTKVP5hh&|@pP>eZ8W?I|sDYsdh8h@ZV5oti2L6#~pt^3$+WsfYt$N z+TuVWE!Rj&g1BEhs;#?wEjyh26X}`$<8#X%zjWE%*?y&GN*$i*KWvsBo-SQKy{wO? zN|Go0O;42`p6ow7QF?g1bbYLJeYA9aq;!3_bbY9FeXw->MCtnRWpg}Gl04R*&ZDJ= zkCd+WFKfE5Uwv=?;^F?qo@EtZ(trHWvd1qj^}KtT*882@U3z#|>3U1)`p#vu-dvKruyp-`vV!jD_rIxB)-rYbuLg}w?_Lr?Ju=I*Zx%dqV`AH?`prr z-u_p#Piddjeop%t?LV;3|4Hq~wD)N5(tb#LE2jo;&|a&3hxQ6>QCrY1YAr3&p3$Dt zj%$as$F#lLi?vX5v|ZYE?S4(yHfy(QH)&OEM7yE>_w~Q3f4%tCvWq5gaI&(}X! z{|vkPpRa$c{*n5J>K~}Tzy7c5@8u-o9rYiqzq$TT>aVN6y8g=g<@(F&bM^C_C7i84 zT|ZGjTtC1`#Y6S!x?4BuJL(VA@2THe-&DW3UaOC?nBmV*149iAH89k`Py<5^3^g#+ zz)%B24Gc9f)WAv_Sif$~+LjcV6sZ)66tNVM6f;tslj5aPoR#7kDb7gIl;X4$PfPKX z6i-TVN{W+GoRH$U6vw1ED#Z~g4oh)Jii1)-A;sfT9FXEMDIS&L5h?adu}_Mlp>JAm%@|6mBNw2mco+4l){i=mlRV{G^E%m#SSU9 zOED?MgcRGPctDE#rMORud!^Va#XVB!Qrs=YT~ch3;!Y_xOYuS}ULeICQf!jqb}4R? z;#Mhck>X}4Zj$0gDKshSQq-iVN>PzwT#7L%Mx_{$Vxtrrq*yP-Iw@{gw{FcCfKY!= z&_5S=-yi?N&Xb3Bd|jOjjQ`pi?Hk(XwO``z1m37Uq1{*e>)P+tK3x0Z+G}f9YJ2%^ zz-0B+)o%54^`WX&y}x=#wNm+3W4*C9XHBUmX9N@jul*sJ%n$ z)PA-0mg>RE+bfS%UR1e9+oX+iCh%wVKdS!%CjkGZ{uBPu6~-_H6BJ?P#@C`BdenD(%Xt%2egn z`o{XN^W6izrqyn!{&Mx-Re!Ad&hg)03H-xnLk$cyFx0?M149iAH89k`Py_$ZYM{Dq zWbH#=`pWC>`tY$Yx75v7C%*adH$O9x<&uT>{>J$31wNFQYWYo4ZWF7Uuh{A*$|diR zpLfobCFjbLmzHnNma9FZZoZgn`%GEVEK5$8Z=O~+U&;r4sw{a@-4t^>RhFDAOHPy} z$ICaz$~Q;LH%H1hhs!sI$~OngH&2vr9#=QTtPhkWkExqt){mAYkCbor=hZL{7TTw7 z3d`*+-#lEt*`sd0jCC>bOUjam)Xi7&-d?P33Ty8!OCBt@c~SXhI&YH$DO5Lw8H4hT zU%v6wO|eq9eB+dF>~b4E;|GaF*QUBDlxUPCyVOn5^;B8XC`)##o1%jqv40$~U^YDSErREV-+Ev!#4< zr@AT3xVbEOVflvd0W5j_9qOhSXH!{nd-;ZM11z<kBbOoU^?OIcg z88(v@g|;^p+F>((zR;bv)tHVGG^0U6+i{vRD+n3Wneq*{d2X=KX})wd;n~%M&kPc} zfzdoOP-ukB=88fTZwF5E^kAXge0s3ZY(6zeXqjH~$w5NH4VtG`5ZcPvhS@y1n()MG z!sDw6j|~#~M$kMuNazNB^T-N9YuW-sVbDChn()wS!h-{arqg_4kT5We=Hn{}&1uKM zo_6!VYQo1>6FxdnXgSSC1_@0oXzpJ@XiPiilxqjgeX9xgt|okVHQ}DYLcjTv)r1eN zCVcT~!riM0A6!lNqCrB_Hk;Ec3yrDJvYO%bLd%~v>?y+xn!(CKYbp$arawp+;P&1M zLT}o3FqzkMR}(s`3GLN{)*zt+;>|%q+jg7A3PQ*_m~ukDxofb{Yfh~uYzz|Grrq2* zNN8DZbH@ro0)RK=x<+&RKp`zB2MHa76DtTU0wGqho7)Bpt>y!(3GW{)G@JJg78=ca z2MH~BXzL)MXuyZ(mJ#+iJpF2MHb1Xx=hNXggl><`sml(0Jfm&6@@aEw6dwibBgKAM%>oAfe}b z&H6wgd0%Y>q4Khjtfo3h82CZ6GEj&kjjt#qpqq~092+Pkog5t`G@#Ux6@>P*8&27# z+1xltXa!z#!$2XNuzp3MTD;w|gv4xbvKvNiJ^R)4Yj-s&r=$Ep*&SK!wx@2|YJa;9Qc#>Rht{6ph!8qdZb z9KU7k%VQrK-8S|^?EW7a+cNr%(NB-QXY{JfVE8lCz)%B24Gc9f)WA>!|5r3HvF_B` z$c>y}PJv#J=nR*+gIlQQClW5s?WNLjUKdPy9+iDyREvAm+? z#bMw!tdQwB38TiD%~_@48iC!4tSobns)}Cbr&h~t_&yVLGRJO2E-&e`5+|_DG_VcF zIj1VRye~D4(H?r{ZK-M4hz!eZc%g@8IAe?wbBC(vq!D^WJwfO;iFqs#UL`1mTfnD`e-<&#mffcOkO*fIhkvj!eOxlZt5)hb_nS zc{^PS%nXmA?Zj@RzHd5)6FKZ6_o<3;26!xk*UZ{7v&d~kDQg3svDb`jx7T}ITPOlBy2_3_YP1i8jT)fy4{^2S%Sq6xTqUcFg5qz4Fi5DgTb2PAe%o$I^&M;Z(wyL~>Vl%-DQ_zbw%!cdx0mk8Ns97+gD&jw;5!wweNU^mq=!rpHoR}8C$t>3DJIv95sgfjY1(_2^zUkhgDjH@2g*d=Wd?pB3R^ow-IBuC))QYXd z4Wwe!3c@r(d#>vW0kEtnGvPklNW;kE?Vv&Qn5q~Aq3y)rF-jO3$Ad_*b;}4?Fpvn7 z@J?0Hu`MrUQoLsr%p|NMOrjKvV!kA@QBd}vs%Sy!sR{OdAt|4309R%tkd%wnK{(wSnQx_`*|ItQ zEGn8#OlPgY#e`s{fjfYaRs=H`xW6CXt16RjA7`8%{gC z1++b%^uN({reRFsG^Xd=Gdv#1Fkto?3Poa++^?mK8cSCsgX8 z<(kl#$^1wfK$DsgpD!{|*S2tA&vWyo(<#cZS-DyfAM{8EOxtsDYeWt$ls=fe&*5y~ zllNEzLQg76a%a1~8=wRNm#IcFp>ld)(S~a|MC)83@RViS4r->EAF7A&1v4-mluz)m zyj*vI&GHFY%n7E>r^F+%PT+aOE<04Co2Cbmhkq3hek0DV?tci z_8rdnEHyZ5z6CfXJsc@+6j)x4PH-(c21Kp_6x>`(HqiFe;34=f6mOzVH?*k4 z`>cVJ8p|Y0#Ts}jxMdMCl8*yBK0(1C3AJGW8J!s9q42&uv;bRJp@5D?7BrAA ziirf+jM);(45d7aCHZ(3#LN$dmQHEQ>YUK>UFILEil!M5@EKVA-xV9lK%wVichjT~ z+$+~IsAMvRfPqEkKynzCiQ<`fQs0)gZO}Y`jF=XLlTQ)^vA^&vqKE4QR^b_ZrpjSG zx)<#$%wQlEL(_mf6F{iecqy=eYUDXRsfU=?_Lw;45Mw9{o8+r31pxsJ7tXN>Pyr&Q zC2wMzk-JcUx?DKS;KH{QkQjn7*`?uvY;kg>vuxoWU`q!sT%E56VEeEX2E&%Q(S)EG z9BTj@Xd%ewPBs{Nz#2aBU<H6HNr#>73azim83(pM>F=GK>z)*Om42?~QESME0ha=$P zeCGTM7+@65V>W_}s%nb`@I0ikao8A053CWdRl|Tn zzUV=i6!yi)YCfn7EJ#p+4kcnsRi7RK9~8uzfT^nKP=zfBx|cW%CrV8y0$?x*jwIA3 z&(NwvXUaX;lI0-~pxSsjtN=NOIGZvtS0IuZnJyDiE`Tqq8w8${1BvYw#4FrE z4@8LE?Bo)@1WEiCrjnFG5T@+n3i(M&!7rH=ufCs4ANh4$4joDB#raa0%u=&HtSDdfqC2l>@*iA2Y7;|ph%}kEyRihY*^A4W>OuXVo&xdgblEhqZs#Po^S;V z6(TE`6WV}647^SSsUi?T!Q#neV4^0X3)6x@XhmX1ECiR{PQDsO8-q{5n585d0sp!} zzEm4EEH-cKk+0@fHGtt(Fto47Ql9n z1w*Kc*oY8FeneB*o=Qbr9PZ(k#8=Ffo0!msQvw2pW6lLY$^KcAWCs$Y3a$WbqH9SJ zsj6lU8NvHt10Tj#rs`9&I+e^qETp}KCx}zxYh*TLqWxG+N=k4NrUcFXD2S(G(NMO5 z#Lhf`8xG@!vhilmg}>)O##<#3ho?A5WTi?UggOWmj&lKM?wOL9lV1>|NtA`A+~ zWHS$kNjjGMJ2S_Y5(&`0pjK2TiUSF1U(0Txh>l_|SWR+t6489|;seZ?B*F!~hSEIk zS&8VKfJv0fnUbMd6f7j!igE=e}4>pAs{Pkt(*s%()kmSA!1Hcv5dNI5KfM#abj! z=mI>W5Cu;HAon4D1m!^gN=v{`Y)Kx#`X!3w`Xn|>AeY1~#Ga~4*{zD^Wk<u_#+2QMckBtB>4@=BYOu~ z6Of8=h>QRSobgO%#a;t$BBjIM6jRDWNLKdeG{ozR;R!?R zqlxUKhIE*xe}oYtgDE+vhoxe!RP-v?>9 zFgXpl70m+~dy2jpnN2*KAk68hcrWv01IifCBI!;);lONig2QG4qzJ(&eaJD1+9^U6 z#Bae8hYdJ38J@&=(xu$;I5s^3S@y&9UQjagM)^cn*LFq zC556}8HG7Rj>4wc2`^Dvw?HuG2lD9|sv?U~Pw^8-O8O)2fk`o%pi=T}R>Uvahw~5s z$^ij0#URDl#1vu+b|kGKr6Gt*YnX(9O{A4GChV!k!Od|1NyG_LB%6xofRQK!q9(ukOY3fDQhLN7tcgW;1l~Y&pd`pPQx~j+?=$K zWL0&EuEpL!om>OcDQ%)vK_&=f1=LqHiGz|7LTo|-dEUpyQ<703Bf>UbDof||4akrn z$uU!LP6OLAw9psSy0o!Tb0ID>OCc6%jSCYA&;(Q@5YBTi;d=fTSAcJb@M=mh7ABM9 zLD|v|C2O z_3;&YlrUq^jhc^aN{BcT^GU3U(o$9J=R&FpGG&LM*2owfasgE~sZhBZ2o=Fc=mw>e zMi<*J&MMHdq@1GZ{G=A3fokqSD=mtBFE#^!34eRL@dGxYGFQvAfQN4SF|hCfTIaZpv=OfaVcSY z$v))lj0{F*Bv~vjqmBXyw#5dUO}XSucsuDA$*~H9>NpT!5Et3l6uye1$X=gq5`%$mLr#Zt{@X;0t&LL=O9uUnb<-IQiMe`$?Yjl0PD)JGr%Yk zX)KRYVNjVsp?b_F`Xrqps1~FoDuFbK5_mN>%?D?Vw5GOF1DaL#1RHYZg=fkKWh%a~ z_aS4&`}kS|TPmd{q6R&oXUVoz{8mW;VVEIEun7n-Yff{77_^LU$QMD_mnhf(CN?Fo zpX?EHh{0GKjp26WL=yFOHk>KIL4HOE>%$@QU^c`IlykkB#H5ShCqK%yqu7zVPFS%4-yap>(i`w6-le) z@sg$Ihr0MW1Mp1to-96JBnbuc5#~`JRf*ow3?w6aB+x25ksNXIJq!FDut~rDNilE9 z*Jv$=!nxfbkUV1s^hCHEhhQ2Sfm#T1%st-}5EUg};zn|kdM)8bUvf^ysRxXcpYSQL z0T{Fitron%HcU1(qD~kqR}&f*<+3UWk-b%JV9wV#)t65W;Sm6-v@GfrqZ39su+5p5 z%u;r%DQkcZI7Y}H|L=d^K%OpJ2%Ha{LhNc7+11KsnqlD2Tt!R~H{qif_Ur7( z!`!R+Pz-Hg5OPm~Q;rxM4Vo6j%EtwLN0)PN$-PMT`-gU@o77&V;6z+b48ak374xA} z@GB>#YC zeNKZph;nSV@f_wWRR!;u4KT@m8lTA_Mq5cwIj>$1Y&Z65^H8@o3=T&Hr3$9!Q$cD{UYKt)cipk2u&B#$qA zlgt(aqdIaYB*m#A2$fH$)He~xY4bkG1i&XK0VBwXe$uNa0gpW{iy>FbH=p2*Tu(TO z{|MF2*+GAxJLoy*0{lCLYd7}K1^)OmcfRSjKmUn0);JefTid*b|As$94Gc9f)WA>! zLk$cyFx0?M149iAH89k`|F0VO6TKN3HiCB5#+ z3z@E3t2)n<>Q|z!-pLl`_~VIGzcSmqaDA`(?7aR+7VEMdoYMEq&FSiE-b<62Z(q?{ zbL}f#y?3G0UOaz6kM!=We9v3w-@i;3ldPk+7Uz@RYolmou^TqQSCKB~z@FeSs zrY`X-I?u)B*+@THe3yMn7uDol&UW?r=n^WJN!p#LmvtLzjr25;W|t@RUC$RZWMxR@ z*JQ4^eFu-}m!r;XG~esyeJ}sEJJap5hRe2oY4$vWh&GhQXE1Bl%hGenTqM(-*3WER zve?$MGiY7!Uck<&ej%G%V8z$;)XnD8#_as%*`De!pSDs#t{m1Lou5tgx!L)P`uS`= zD+bOne per project
Yjs sync & content] - EmailQueue[EmailQueue] UserSession[UserSession
One per user
Notifications] end + EmailQueue[Cloudflare Queue
Email delivery] end subgraph Storage["Cloudflare Storage"] @@ -56,7 +56,7 @@ flowchart TB - **Durable Objects**: - **ProjectDoc**: One per project, holds Yjs document for real-time collaboration and content storage - **UserSession**: One per user, manages WebSocket connections for real-time notifications (e.g., project invites) - - **EmailQueue**: Background email processing +- **Cloudflare Queue**: Async email delivery with retries and dead letter queue, consumed by Postmark ### Storage diff --git a/packages/docs/audits/durable-objects-migration-review-2026-02.md b/packages/docs/audits/durable-objects-migration-review-2026-02.md deleted file mode 100644 index db05a497a..000000000 --- a/packages/docs/audits/durable-objects-migration-review-2026-02.md +++ /dev/null @@ -1,256 +0,0 @@ -# Durable Objects Migration Review - February 2026 - -## Context - -All three Durable Objects (EmailQueue, UserSession, ProjectDoc) were migrated from `implements DurableObject` with fetch-based routing to `extends DurableObject` with: -- Typed RPC methods (replacing `stub.fetch(new Request(...))`) -- Hibernatable WebSocket API (ProjectDoc, UserSession) -- Debounced Y.Doc persistence (ProjectDoc) - -This document records the findings from a 3-reviewer quality audit after implementation. Each issue was independently verified against the source code. - -## Verification Status - -- Tests: 450/450 pass (8 pre-existing failures in stop-impersonation.test.js unrelated to migration) -- Typecheck: Only pre-existing Stripe API version errors -- Lint: Only pre-existing issues in other files - ---- - -## Critical Issues - -### C1. ProjectDoc: `schedulePersistenceIfNoConnections` is fire-and-forget - -**File**: `packages/workers/src/durable-objects/ProjectDoc.ts`, lines 214, 259, 300, 415, 433, 446, 483 -**Confidence**: 90% -**Found by**: Reviewer 2 - -**Problem**: The `schedulePersistenceIfNoConnections()` method is `void` and calls `this.flushPersistence()` (which is `async` and does `await this.ctx.storage.put(...)`) without awaiting it. When RPC methods like `syncProject`, `syncMember`, `syncPdf`, and several dev methods call this, the RPC returns to the caller before the storage write completes. If the DO is evicted before the unawaited `flushPersistence` finishes, the Y.Doc mutation is lost permanently. - -**Code**: -```typescript -// Returns void, does not await the async flushPersistence -private schedulePersistenceIfNoConnections(): void { - if (this.ctx.getWebSockets().length === 0) { - this.flushPersistence(); // fire-and-forget - } -} -``` - -**Fix**: Make the method `async`, return `Promise`, and `await` the flush. All callers must also `await` it. - -**Regression test**: Call `syncMember('add', ...)` via RPC with no active WebSocket connections, then verify the Y.Doc state was persisted to storage. - ---- - -### C2. ProjectDoc: `webSocketError` missing `initializeDoc()` call - -**File**: `packages/workers/src/durable-objects/ProjectDoc.ts`, lines 757-772 -**Confidence**: 87% -**Found by**: Reviewer 2 - -**Problem**: After hibernation wake, `this.doc` and `this.awareness` are `null`. The `webSocketClose` handler correctly calls `await this.initializeDoc()` at line 738, but `webSocketError` at line 757 does not. When the DO wakes from hibernation due to a WebSocket error event, the `this.awareness` null-check silently skips awareness cleanup, leaving stale presence cursors visible to other clients. - -**Code**: -```typescript -// webSocketClose (correct): -async webSocketClose(ws, _code, _reason, _wasClean) { - await this.initializeDoc(); // re-initializes after hibernation wake - // ... awareness cleanup works -} - -// webSocketError (missing): -async webSocketError(ws, error) { - console.error('WebSocket error in ProjectDoc:', error); - // NO initializeDoc() call -- this.awareness is null after hibernation - const attachment = ws.deserializeAttachment(); - if (attachment && attachment.awarenessClientId != null && this.awareness) { - // this.awareness is null, so this block is silently skipped - awarenessProtocol.removeAwarenessStates(...); - } -} -``` - -**Fix**: Add `await this.initializeDoc()` at the top of `webSocketError`, matching `webSocketClose`. - -**Regression test**: Not practically testable -- vitest pool DOs don't truly hibernate. Fix is a one-line addition with clear correctness from code inspection. - ---- - -### C3. EmailQueue: Dead-letter write pattern is fragile - -**File**: `packages/workers/src/durable-objects/EmailQueue.ts`, lines 85-89 -**Confidence**: 92% -**Found by**: All 3 reviewers - -**Problem**: The unawaited `storage.put` followed by awaited `storage.delete` was designed for write coalescing (both operations in the same batch). While Cloudflare DO storage *should* coalesce these (the `put` is queued, then the `await delete` flushes the batch), the unawaited `put` means any rejection is silently swallowed as an unhandled promise. This is fragile and the misleading "atomically" comment suggests the intent was clearer guarantees. - -**Code**: -```typescript -// Move to dead letter queue atomically -- both writes coalesce -this.ctx.storage.put(`dead-letter:${emailRecord.id}`, emailRecord); // unawaited -await this.ctx.storage.delete(`email:${emailRecord.id}`); // awaited -``` - -**Fix**: Await both writes explicitly. The atomic coalescing comment should be removed since sequential awaits are separate transactions (but both succeeding is the correct behavior -- we want the dead-letter record to exist before deleting the original). - -**Regression test**: After triggering max retries, verify the dead-letter record exists in storage AND the email record is deleted. - ---- - -## Important Issues - -### I1. ProjectDoc: `syncProject` member replacement not in `doc.transact()`, iteration-during-mutation unsafe - -**File**: `packages/workers/src/durable-objects/ProjectDoc.ts`, lines 196-211 -**Confidence**: 85% -**Found by**: Reviewers 1, 2 - -**Problem**: Two issues in the member replacement loop: - -1. **Mutation during iteration**: Deleting from a Y.Map while iterating its entries may skip entries depending on Y.js internals. -2. **No transaction**: Each `delete` and `set` fires the `doc.on('update')` listener individually, broadcasting partial state to connected WebSocket clients. Between the delete loop and add loop, all clients briefly see an empty members map. - -**Code**: -```typescript -const membersMap = this.doc!.getMap('members'); -for (const [userId] of membersMap.entries()) { - membersMap.delete(userId); // mutating while iterating -} -for (const member of data.members) { - membersMap.set(member.userId, memberYMap); // broadcasts individually -} -``` - -**Fix**: Collect keys first, then wrap both loops in `this.doc!.transact(() => { ... })`. - -**Regression test**: Call `syncProject` with a different member list, verify old members are fully removed and new members are present. - ---- - -### I2. Y.Map member construction duplicated 4 times - -**File**: `packages/workers/src/durable-objects/ProjectDoc.ts` (3 sites) + `dev-handlers.ts` (1 site) -**Confidence**: 95% -**Found by**: Reviewer 1 - -**Problem**: The same 7-field `memberYMap.set(...)` pattern appears at: -- `syncProject` (line 202-210) -- `syncMember` add branch (line 226-234) -- WebSocket connect handler (line 635-643) -- `dev-handlers.ts` handleDevImport (line 327-335) - -Any schema change (e.g., adding `username` field) requires finding and updating all 4 sites. One copy already diverges slightly (line 637 casts `(user.name as string)`). - -**Fix**: Extract a `buildMemberYMap(member)` function in `ProjectDoc.ts` and export it for `dev-handlers.ts` to use. - -**Regression test**: Not directly testable (code quality). The `syncProject` test from I1 indirectly validates the builder works. - ---- - -### I3. Dev RPC methods duplicate the same `ctx` object 6 times - -**File**: `packages/workers/src/durable-objects/ProjectDoc.ts`, lines 394-397, 406-409, 422-425, 440-443, 453-456, 471-474 -**Confidence**: 88% -**Found by**: Reviewer 1 - -**Problem**: Six dev methods each construct the same `{ doc, stateId, yMapToPlain }` object before delegating to `dev-handlers.ts`. - -**Fix**: Extract a private getter: -```typescript -private get devCtx() { - return { - doc: this.doc!, - stateId: this.ctx.id.toString(), - yMapToPlain: this.yMapToPlain.bind(this), - }; -} -``` - -**Regression test**: Not directly testable (code quality). - ---- - -### I4. Test mock in `helpers.ts` missing RPC methods - -**File**: `packages/workers/src/__tests__/helpers.ts`, lines 364-375 -**Confidence**: 85% -**Found by**: Reviewer 3 - -**Problem**: The `mockDO` object used by `createTestEnv` is missing: -- `getDeadLetterQueue` (EmailQueue) -- All 7 dev RPC methods: `devExport`, `devImport`, `devPatch`, `devReset`, `devRaw`, `devTemplates`, `devApplyTemplate` (ProjectDoc) - -Any future test using `createTestEnv` that hits these paths will get `TypeError: stub.method is not a function`. - -**Fix**: Add all missing methods to the mock. - -**Regression test**: Not applicable -- this IS test infrastructure. - ---- - -### I5. `dev-routes.ts`: `template!` non-null assertion without guard - -**File**: `packages/workers/src/routes/orgs/dev-routes.ts`, line 299 -**Confidence**: 83% -**Found by**: Reviewer 3 - -**Problem**: The `template` query param is `z.string().optional()`, so it can be `undefined`. The `!` suppresses the TypeScript error but at runtime `undefined` gets interpolated into a URL as the literal string `"undefined"`, silently applying the wrong template. - -**Code**: -```typescript -const template = query.template; // string | undefined -const data = await projectDoc.devApplyTemplate(template!, mode); // passes undefined -``` - -**Fix**: Add a 400 guard before the call: -```typescript -if (!template) { - return c.json({ error: 'template query parameter is required' }, 400); -} -``` - -**Regression test**: Call apply-template route without template param, expect 400. - ---- - -## Issues NOT fixed (minor) - -| ID | Issue | Reason deferred | -|----|-------|-----------------| -| M1 | EmailQueue `queueEmail` uses raw `Error` instead of `createDomainError` | Convention-only, runtime behavior correct | -| M2 | `helpers.ts` duplicates `getProjectDocName` instead of importing | Low risk, test-only code | -| M3 | `project-sync.ts` thin wrappers used inconsistently | Refactoring scope beyond migration | - ---- - -## Files Modified by Migration - -### Phase 1 (EmailQueue) -1. `packages/workers/src/durable-objects/EmailQueue.ts` -2. `packages/workers/src/routes/email.ts` -3. `packages/workers/src/routes/billing/handlers/dunning.ts` -4. `packages/workers/src/routes/orgs/invitations.ts` -5. `packages/workers/src/routes/orgs/members.ts` -6. `packages/workers/src/routes/members.ts` -7. `packages/workers/src/durable-objects/__tests__/EmailQueue.test.js` -8. `packages/workers/src/routes/__tests__/email.test.js` -9. `packages/workers/src/routes/__tests__/project-invitations.test.js` - -### Phase 2 (UserSession) -10. `packages/workers/src/durable-objects/UserSession.ts` -11. `packages/workers/src/lib/notify.ts` -12. `packages/workers/src/commands/lib/notifications.ts` -13. `packages/workers/src/routes/invitations.ts` -14. `packages/workers/src/durable-objects/__tests__/UserSession.test.js` - -### Phase 3 (ProjectDoc) -15. `packages/workers/src/durable-objects/ProjectDoc.ts` -16. `packages/workers/src/lib/project-sync.ts` -17. `packages/workers/src/lib/project-doc-id.ts` -18. `packages/workers/src/commands/lib/doSync.ts` -19. `packages/workers/src/routes/users.ts` -20. `packages/workers/src/routes/avatars.ts` -21. `packages/workers/src/routes/orgs/dev-routes.ts` -22. `packages/workers/src/durable-objects/__tests__/ProjectDoc.ws-auth.test.js` -23. `packages/workers/src/__tests__/helpers.ts` diff --git a/packages/docs/audits/prod-audit-2026-01-19-full.md b/packages/docs/audits/prod-audit-2026-01-19-full.md index 70732a021..4b2112680 100644 --- a/packages/docs/audits/prod-audit-2026-01-19-full.md +++ b/packages/docs/audits/prod-audit-2026-01-19-full.md @@ -93,7 +93,8 @@ packages/ | --------------- | ---------------- | ---------------------------------------------------------- | | D1 (SQLite) | Primary database | Users, sessions, orgs, projects, subscriptions | | R2 | Object storage | PDF files, avatars | -| Durable Objects | Stateful workers | ProjectDoc (Y.js), UserSession (notifications), EmailQueue | +| Durable Objects | Stateful workers | ProjectDoc (Y.js), UserSession (notifications) | +| Cloudflare Queue| Email delivery | Async email processing with retries and DLQ | ### External Services diff --git a/packages/workers/src/__tests__/health.test.js b/packages/workers/src/__tests__/health.test.js index 68abcf0dc..4d3834d3b 100644 --- a/packages/workers/src/__tests__/health.test.js +++ b/packages/workers/src/__tests__/health.test.js @@ -77,7 +77,6 @@ describe('Health Check Endpoints', () => { expect(body.services.durableObjects.bindings).toBeDefined(); expect(body.services.durableObjects.bindings.USER_SESSION).toBe(true); expect(body.services.durableObjects.bindings.PROJECT_DOC).toBe(true); - expect(body.services.durableObjects.bindings.EMAIL_QUEUE).toBe(true); }); it('GET /health returns degraded status when database fails', async () => { diff --git a/packages/workers/src/__tests__/helpers.ts b/packages/workers/src/__tests__/helpers.ts index f4d0b8a5e..0963ac058 100644 --- a/packages/workers/src/__tests__/helpers.ts +++ b/packages/workers/src/__tests__/helpers.ts @@ -365,8 +365,6 @@ export function createTestEnv(overrides: Record = {}): Record ({ toString: () => `do-${name}` }), get: (_id: unknown) => ({ fetch: async () => new Response(JSON.stringify({ ok: true }), { status: 200 }), - queueEmail: async () => {}, - getDeadLetterQueue: async () => [], notify: async () => {}, syncProject: async () => {}, syncMember: async () => {}, @@ -383,12 +381,17 @@ export function createTestEnv(overrides: Record = {}): Record {}, + sendBatch: async () => {}, + }; + return { DB: env.DB, PDF_BUCKET: mockR2, PROJECT_DOC: mockDO, USER_SESSION: mockDO, - EMAIL_QUEUE: mockDO, + EMAIL_QUEUE: mockQueue, RATE_LIMIT_KV: { get: async () => null, put: async () => {}, diff --git a/packages/workers/src/auth/config.ts b/packages/workers/src/auth/config.ts index 90a8fa7f8..706b450cb 100644 --- a/packages/workers/src/auth/config.ts +++ b/packages/workers/src/auth/config.ts @@ -8,10 +8,18 @@ import Stripe from 'stripe'; import { drizzle } from 'drizzle-orm/d1'; import { eq, and } from 'drizzle-orm'; import * as schema from '../db/schema'; -import { createEmailService } from './email'; import { getAllowedOrigins } from '../config/origins'; import { isAdminUser } from './admin'; -import { MAGIC_LINK_EXPIRY_MINUTES } from './emailTemplates'; +import { + MAGIC_LINK_EXPIRY_MINUTES, + getVerificationEmailHtml, + getVerificationEmailText, + getPasswordResetEmailHtml, + getPasswordResetEmailText, + getMagicLinkEmailHtml, + getMagicLinkEmailText, +} from './emailTemplates'; +import { queueEmail } from '../lib/email-queue'; import { notifyOrgMembers, EventTypes } from '../lib/notify'; import { copyAvatarToR2, isExternalAvatarUrl, isInternalAvatarUrl } from '../lib/avatar-copy'; import { createDomainError, SYSTEM_ERRORS } from '@corates/shared'; @@ -72,9 +80,6 @@ export function createAuth(env: Env, ctx?: ExecutionContext) { // Initialize Drizzle with D1 const db = drizzle(env.DB, { schema }); - // Create email service - const emailService = createEmailService(env); - // Build social providers config if credentials are present const socialProviders: Record = {}; @@ -169,17 +174,14 @@ export function createAuth(env: Env, ctx?: ExecutionContext) { magicLink({ sendMagicLink: async ({ email, url }: { email: string; url: string }) => { console.log('[Auth] Queuing magic link email to:', email, 'URL:', url); - if (ctx && ctx.waitUntil) { - ctx.waitUntil( - (async () => { - try { - await emailService.sendMagicLink(email, url); - } catch (err) { - console.error('[Auth:waitUntil] Magic link email error:', err); - } - })(), - ); - } + const subject = 'Sign in to CoRATES'; + const html = getMagicLinkEmailHtml({ subject, magicLinkUrl: url }); + const text = getMagicLinkEmailText({ magicLinkUrl: url }); + + // Queue send is a direct binding call, no need for waitUntil keepalive + queueEmail(env, { to: email, subject, html, text }).catch(err => + console.error('[Auth] Magic link email queue error:', err), + ); }, expiresIn: 60 * MAGIC_LINK_EXPIRY_MINUTES, }), @@ -442,21 +444,14 @@ export function createAuth(env: Env, ctx?: ExecutionContext) { // Password reset - sendResetPassword is required for requestPasswordReset to work sendResetPassword: async ({ user, url }: { user: BetterAuthUser; url: string }) => { console.log('[Auth] Queuing reset email to:', user.email, 'URL:', url); - if (ctx && ctx.waitUntil) { - ctx.waitUntil( - (async () => { - try { - await emailService.sendPasswordReset( - user.email, - url, - user.givenName || user.name || user.username, - ); - } catch (err) { - console.error('Background email error:', err); - } - })(), - ); - } + const name = user.givenName || user.name || user.username || 'there'; + const subject = 'Reset Your Password - CoRATES'; + const html = getPasswordResetEmailHtml({ name, subject, resetUrl: url }); + const text = getPasswordResetEmailText({ name, resetUrl: url }); + + queueEmail(env, { to: user.email, subject, html, text }).catch(err => + console.error('[Auth] Password reset email queue error:', err), + ); }, }, @@ -471,27 +466,16 @@ export function createAuth(env: Env, ctx?: ExecutionContext) { sendOnSignUp: true, sendOnSignIn: true, autoSignInAfterVerification: true, - // CRITICAL: Wrap the email sending in a function passed to waitUntil - // This ensures NO email work happens during the request - it all runs after response sendVerificationEmail: async ({ user, url }: { user: BetterAuthUser; url: string }) => { console.log('[Auth] Queuing verification email to:', user.email, 'URL:', url); - if (ctx && ctx.waitUntil) { - ctx.waitUntil( - (async () => { - try { - await emailService.sendEmailVerification( - user.email, - url, - user.givenName || user.name || user.username, - ); - } catch (err) { - console.error('[Auth:waitUntil] Background email error:', err); - } - })(), - ); - } else { - console.log('[Auth] No ctx.waitUntil available, email will not be sent'); - } + const name = user.givenName || user.name || user.username || 'there'; + const subject = 'Verify Your Email Address - CoRATES'; + const html = getVerificationEmailHtml({ name, subject, verificationUrl: url }); + const text = getVerificationEmailText({ name, verificationUrl: url }); + + queueEmail(env, { to: user.email, subject, html, text }).catch(err => + console.error('[Auth] Verification email queue error:', err), + ); }, }, diff --git a/packages/workers/src/auth/email.ts b/packages/workers/src/auth/email.ts index 825b7283a..6f803ea8c 100644 --- a/packages/workers/src/auth/email.ts +++ b/packages/workers/src/auth/email.ts @@ -11,8 +11,6 @@ import { getPasswordResetEmailText, getMagicLinkEmailHtml, getMagicLinkEmailText, - getProjectInvitationEmailHtml, - getProjectInvitationEmailText, } from './emailTemplates'; import type { Env } from '../types'; @@ -42,13 +40,6 @@ export interface EmailService { _userDisplayName?: string, ) => Promise; sendMagicLink: (_to: string, _magicLinkUrl: string) => Promise; - sendProjectInvitation: ( - _to: string, - _projectName: string, - _inviterName: string, - _invitationUrl: string, - _role: string, - ) => Promise; isProduction: boolean; } @@ -147,36 +138,11 @@ export function createEmailService(env: Env): EmailService { return sendEmail({ to, subject, html, text }); } - /** - * Send project invitation email - */ - async function sendProjectInvitation( - to: string, - projectName: string, - inviterName: string, - invitationUrl: string, - role: string, - ): Promise { - if (env.SEND_EMAILS_IN_DEV !== 'true' && !isProduction) { - console.log('[Email] Development environment - email sending is DISABLED'); - console.log('[Email] Project invitation URL:', invitationUrl); - return { success: true, id: 'dev-id' }; - } - // Sanitize project name for email subject (strip control chars, collapse whitespace, truncate) - const { sanitizeEmailSubject } = await import('../lib/escapeHtml'); - const safeProjectName = sanitizeEmailSubject(projectName, 50); - const subject = `You're Invited to "${safeProjectName}" - CoRATES`; - const html = getProjectInvitationEmailHtml({ projectName, inviterName, invitationUrl, role }); - const text = getProjectInvitationEmailText({ projectName, inviterName, invitationUrl, role }); - return sendEmail({ to, subject, html, text }); - } - return { sendEmail, sendEmailVerification, sendPasswordReset, sendMagicLink, - sendProjectInvitation, isProduction, }; } diff --git a/packages/workers/src/config/constants.ts b/packages/workers/src/config/constants.ts index b119d0d12..c45b07a91 100644 --- a/packages/workers/src/config/constants.ts +++ b/packages/workers/src/config/constants.ts @@ -59,13 +59,6 @@ export const SESSION_CONFIG = { ALARM_INTERVAL_MS: 60 * 60 * 1000, } as const; -export const EMAIL_RETRY_CONFIG = { - MAX_RETRIES: 3, - BASE_DELAY_MS: 1000, - MAX_DELAY_MS: 30000, - BACKOFF_MULTIPLIER: 2, -} as const; - export const TIME_DURATIONS = { INVITATION_EXPIRY_MS: 7 * 24 * 60 * 60 * 1000, INVITATION_EXPIRY_SEC: 7 * 24 * 60 * 60, diff --git a/packages/workers/src/durable-objects/EmailQueue.ts b/packages/workers/src/durable-objects/EmailQueue.ts deleted file mode 100644 index 077ca5fcb..000000000 --- a/packages/workers/src/durable-objects/EmailQueue.ts +++ /dev/null @@ -1,159 +0,0 @@ -import { DurableObject } from 'cloudflare:workers'; -import { EMAIL_RETRY_CONFIG } from '../config/constants'; -import { createDomainError, SYSTEM_ERRORS } from '@corates/shared'; -import type { Env } from '../types'; - -export interface EmailPayload { - to: string; - subject: string; - html?: string; - text?: string; -} - -interface EmailRecord { - id: string; - payload: EmailPayload; - attempts: number; - nextRetryAt: number; - createdAt: number; - status: 'pending' | 'sent' | 'retry-pending' | 'failed'; - lastAttemptAt?: number; - sentAt?: number; - error?: string; -} - -export class EmailQueue extends DurableObject { - /** - * Queue an email for sending with retry support (RPC method) - */ - async queueEmail(payload: EmailPayload): Promise { - if (!payload?.to || !payload?.subject || (!payload?.html && !payload?.text)) { - throw new Error('Invalid email payload: to, subject, and html or text are required'); - } - - const emailId = crypto.randomUUID(); - const emailRecord: EmailRecord = { - id: emailId, - payload, - attempts: 0, - nextRetryAt: Date.now(), - createdAt: Date.now(), - status: 'pending', - }; - - await this.ctx.storage.put(`email:${emailId}`, emailRecord); - await this.attemptSend(emailRecord); - } - - /** - * Attempt to send an email with exponential backoff - */ - async attemptSend(emailRecord: EmailRecord): Promise { - const { createEmailService } = await import('../auth/email'); - const emailService = createEmailService(this.env); - - emailRecord.attempts++; - emailRecord.lastAttemptAt = Date.now(); - - try { - const result = await emailService.sendEmail( - emailRecord.payload as Parameters[0], - ); - - if (result.success) { - console.log( - `EmailQueue: email sent to ${emailRecord.payload.to} (attempt ${emailRecord.attempts})`, - ); - // Delete immediately after successful send instead of using setTimeout - await this.ctx.storage.delete(`email:${emailRecord.id}`); - return true; - } else { - throw createDomainError( - SYSTEM_ERRORS.INTERNAL_ERROR, - { service: 'email' }, - result.error || 'Unknown email error', - ); - } - } catch (err) { - const error = err as Error; - console.error( - `EmailQueue: send failed for ${emailRecord.payload.to} (attempt ${emailRecord.attempts}):`, - error.message, - ); - - if (emailRecord.attempts >= EMAIL_RETRY_CONFIG.MAX_RETRIES) { - emailRecord.status = 'failed'; - emailRecord.error = error.message; - await this.ctx.storage.put(`dead-letter:${emailRecord.id}`, emailRecord); - await this.ctx.storage.delete(`email:${emailRecord.id}`); - console.error(`EmailQueue: moved to dead letter queue: ${emailRecord.payload.to}`); - return false; - } - - // Calculate next retry time with exponential backoff - const delay = Math.min( - EMAIL_RETRY_CONFIG.BASE_DELAY_MS * - Math.pow(EMAIL_RETRY_CONFIG.BACKOFF_MULTIPLIER, emailRecord.attempts - 1), - EMAIL_RETRY_CONFIG.MAX_DELAY_MS, - ); - emailRecord.nextRetryAt = Date.now() + delay; - emailRecord.status = 'retry-pending'; - - await this.ctx.storage.put(`email:${emailRecord.id}`, emailRecord); - - await this.scheduleRetryAlarm(); - - console.log(`EmailQueue: scheduled retry for ${emailRecord.payload.to} in ${delay}ms`); - return false; - } - } - - /** - * Schedule an alarm to process retry queue - */ - async scheduleRetryAlarm(): Promise { - const currentAlarm = await this.ctx.storage.getAlarm(); - if (!currentAlarm) { - await this.ctx.storage.setAlarm(Date.now() + 1000); - } - } - - /** - * Process retry queue (called by alarm) - */ - async processRetryQueue(): Promise { - const now = Date.now(); - const emails = await this.ctx.storage.list({ prefix: 'email:' }); - - let nextRetryTime: number | null = null; - - for (const [_key, emailRecord] of emails) { - if (emailRecord.status === 'retry-pending' && emailRecord.nextRetryAt <= now) { - await this.attemptSend(emailRecord); - } else if (emailRecord.status === 'retry-pending' && emailRecord.nextRetryAt > now) { - if (!nextRetryTime || emailRecord.nextRetryAt < nextRetryTime) { - nextRetryTime = emailRecord.nextRetryAt; - } - } - } - - if (nextRetryTime) { - await this.ctx.storage.setAlarm(nextRetryTime); - } - } - - /** - * Alarm handler for processing retries - */ - async alarm(): Promise { - await this.processRetryQueue(); - } - - /** - * Get dead letter queue for debugging/monitoring (RPC method) - */ - async getDeadLetterQueue(): Promise { - const deadLetters = await this.ctx.storage.list({ prefix: 'dead-letter:' }); - return Array.from(deadLetters.values()); - } -} diff --git a/packages/workers/src/durable-objects/__tests__/EmailQueue.test.js b/packages/workers/src/durable-objects/__tests__/EmailQueue.test.js deleted file mode 100644 index 30d52d26f..000000000 --- a/packages/workers/src/durable-objects/__tests__/EmailQueue.test.js +++ /dev/null @@ -1,421 +0,0 @@ -/** - * Tests for EmailQueue Durable Object - * Tests email queueing, retry logic, batching, and Postmark integration - */ - -import { describe, it, expect, beforeEach, vi } from 'vitest'; -import { env, runInDurableObject, runDurableObjectAlarm } from 'cloudflare:test'; - -// Mock Postmark -vi.mock('postmark', () => { - return { - Client: class { - constructor() {} - sendEmail() { - return Promise.resolve({ ErrorCode: 0, MessageID: 'test-message-id' }); - } - }, - }; -}); - -// Mock email service -const mockSendEmail = vi.fn(async () => ({ - success: true, - id: 'test-message-id', -})); - -vi.mock('@/auth/email.js', () => { - return { - createEmailService: _env => ({ - sendEmail: mockSendEmail, - }), - }; -}); - -describe('EmailQueue Durable Object', () => { - // Helper to retry DO operations on invalidation errors - async function runInDurableObjectWithRetry(stub, fn, maxRetries = 5) { - for (let attempt = 0; attempt < maxRetries; attempt++) { - try { - return await runInDurableObject(stub, fn); - } catch (error) { - const errorMessage = error?.message || String(error) || ''; - const isInvalidationError = - errorMessage.includes('invalidating this Durable Object') || - errorMessage.includes('inputGateBroken') || - errorMessage.includes('invalidating') || - error?.remote === true || - error?.durableObjectReset === true; - if (isInvalidationError && attempt < maxRetries - 1) { - // Wait longer before retrying (exponential backoff with longer base delay) - const delay = 100 * Math.pow(2, attempt); - await new Promise(resolve => setTimeout(resolve, delay)); - continue; - } - throw error; - } - } - } - - beforeEach(async () => { - vi.clearAllMocks(); - // Reset mock implementation (clearAllMocks doesn't clear implementations - // set by mockRejectedValue, so previous tests' permanent mocks leak through) - mockSendEmail.mockResolvedValue({ success: true, id: 'test-message-id' }); - // Clear storage between tests - // Use try-catch to handle DO invalidation gracefully - try { - const stub = await getEmailQueueStub(); - await runInDurableObject(stub, async (instance, state) => { - const emails = await state.storage.list({ prefix: 'email:' }); - for (const [key] of emails) { - await state.storage.delete(key); - } - const deadLetters = await state.storage.list({ prefix: 'dead-letter:' }); - for (const [key] of deadLetters) { - await state.storage.delete(key); - } - await state.storage.deleteAlarm(); - }); - } catch (error) { - // Ignore DO invalidation errors in cleanup - test will create fresh DO - const isInvalidationError = - error?.message?.includes('invalidating this Durable Object') || - error?.message?.includes('inputGateBroken') || - error?.remote === true || - error?.durableObjectReset === true; - if (!isInvalidationError) { - throw error; - } - } - }); - - async function getEmailQueueStub() { - const id = env.EMAIL_QUEUE.idFromName('default'); - return env.EMAIL_QUEUE.get(id); - } - - async function queueEmail(payload) { - const stub = await getEmailQueueStub(); - await stub.queueEmail(payload); - } - - describe('Email Queueing', () => { - it('should queue and send email successfully', async () => { - const payload = { - to: 'test@example.com', - subject: 'Test Email', - html: '

Test

', - text: 'Test', - }; - - await queueEmail(payload); - - // Verify email was sent - expect(mockSendEmail).toHaveBeenCalledTimes(1); - expect(mockSendEmail).toHaveBeenCalledWith(payload); - }); - - it('should reject invalid payload - missing to', async () => { - const payload = { - subject: 'Test Email', - html: '

Test

', - }; - - await expect(queueEmail(payload)).rejects.toThrow(/Invalid email payload/); - expect(mockSendEmail).not.toHaveBeenCalled(); - }); - - it('should reject invalid payload - missing subject', async () => { - const payload = { - to: 'test@example.com', - html: '

Test

', - }; - - await expect(queueEmail(payload)).rejects.toThrow(/Invalid email payload/); - }); - - it('should reject invalid payload - missing html and text', async () => { - const payload = { - to: 'test@example.com', - subject: 'Test Email', - }; - - await expect(queueEmail(payload)).rejects.toThrow(/Invalid email payload/); - }); - - it('should accept email with only html', async () => { - const payload = { - to: 'test@example.com', - subject: 'Test Email', - html: '

Test

', - }; - - await queueEmail(payload); - - expect(mockSendEmail).toHaveBeenCalledTimes(1); - }); - - it('should accept email with only text', async () => { - const payload = { - to: 'test@example.com', - subject: 'Test Email', - text: 'Test', - }; - - await queueEmail(payload); - - expect(mockSendEmail).toHaveBeenCalledTimes(1); - }); - }); - - describe('Retry Logic', () => { - it('should retry failed emails with exponential backoff', async () => { - // First attempt fails - mockSendEmail.mockRejectedValueOnce(new Error('Postmark error')); - - const payload = { - to: 'test@example.com', - subject: 'Test Email', - html: '

Test

', - }; - - await queueEmail(payload); - - // Verify email was stored for retry - const stub = await getEmailQueueStub(); - await runInDurableObjectWithRetry(stub, async (instance, state) => { - const emails = await state.storage.list({ prefix: 'email:' }); - expect(emails.size).toBeGreaterThan(0); - - // Check retry status - const emailEntries = Array.from(emails.entries()); - const emailRecord = emailEntries[0][1]; - expect(emailRecord.status).toBe('retry-pending'); - expect(emailRecord.attempts).toBeGreaterThanOrEqual(1); - expect(emailRecord.nextRetryAt).toBeGreaterThan(Date.now()); - }); - }); - - it('should move to dead letter queue after max retries', async () => { - // Fail all attempts - mockSendEmail.mockRejectedValue(new Error('Persistent error')); - - const payload = { - to: 'test@example.com', - subject: 'Test Email', - html: '

Test

', - }; - - await queueEmail(payload); - - const stub = await getEmailQueueStub(); - - // Simulate max retries - await runInDurableObjectWithRetry(stub, async (instance, state) => { - const emails = await state.storage.list({ prefix: 'email:' }); - if (emails.size > 0) { - const emailEntries = Array.from(emails.entries()); - let emailRecord = emailEntries[0][1]; - - // Manually set attempts to max - emailRecord.attempts = 3; // MAX_RETRIES - await state.storage.put(`email:${emailRecord.id}`, emailRecord); - - // Attempt send (should fail and move to dead letter) - await instance.attemptSend(emailRecord); - - // Check dead letter queue - const deadLetters = await state.storage.list({ prefix: 'dead-letter:' }); - expect(deadLetters.size).toBeGreaterThan(0); - - const deadLetterEntries = Array.from(deadLetters.entries()); - const deadLetter = deadLetterEntries[0][1]; - expect(deadLetter.status).toBe('failed'); - expect(deadLetter.attempts).toBe(4); // Original + 3 retries - } - }); - }); - - it('should process retry queue when alarm triggers', async () => { - // Queue an email that will fail - mockSendEmail.mockRejectedValueOnce(new Error('Temporary error')); - mockSendEmail.mockResolvedValueOnce({ success: true, id: 'retry-success' }); - - const payload = { - to: 'test@example.com', - subject: 'Test Email', - html: '

Test

', - }; - - await queueEmail(payload); - - const stub = await getEmailQueueStub(); - - // Set up retry-pending email - await runInDurableObjectWithRetry(stub, async (instance, state) => { - const emails = await state.storage.list({ prefix: 'email:' }); - if (emails.size > 0) { - const emailEntries = Array.from(emails.entries()); - let emailRecord = emailEntries[0][1]; - emailRecord.status = 'retry-pending'; - emailRecord.nextRetryAt = Date.now() - 1000; // Past due - await state.storage.put(`email:${emailRecord.id}`, emailRecord); - } - }); - - // Trigger alarm - await runDurableObjectAlarm(stub); - - // Verify retry was processed - expect(mockSendEmail).toHaveBeenCalledTimes(2); // Initial + retry - }); - }); - - describe('Email Storage', () => { - it('should clean up sent emails immediately', async () => { - const payload = { - to: 'test@example.com', - subject: 'Test Email', - html: '

Test

', - }; - - await queueEmail(payload); - - // After successful send, email record should be deleted immediately - const stub = await getEmailQueueStub(); - await runInDurableObjectWithRetry(stub, async (instance, state) => { - const emails = await state.storage.list({ prefix: 'email:' }); - expect(emails.size).toBe(0); - }); - }); - }); - - describe('Dead Letter Queue', () => { - it('should store failed emails in dead letter queue', async () => { - mockSendEmail.mockRejectedValue(new Error('Persistent failure')); - - const payload = { - to: 'test@example.com', - subject: 'Test Email', - html: '

Test

', - }; - - await queueEmail(payload); - - const stub = await getEmailQueueStub(); - await runInDurableObjectWithRetry(stub, async (instance, state) => { - // Manually trigger max retries scenario - const emails = await state.storage.list({ prefix: 'email:' }); - if (emails.size > 0) { - const emailEntries = Array.from(emails.entries()); - let emailRecord = emailEntries[0][1]; - emailRecord.attempts = 3; // MAX_RETRIES - await state.storage.put(`email:${emailRecord.id}`, emailRecord); - - await instance.attemptSend(emailRecord); - - // Check dead letter queue - const deadLetters = await instance.getDeadLetterQueue(); - expect(deadLetters.length).toBeGreaterThan(0); - expect(deadLetters[0].status).toBe('failed'); - expect(deadLetters[0].error).toBeDefined(); - } - }); - }); - }); - - describe('C3: Dead-letter write atomicity', () => { - it('should have dead-letter record AND no email record after max retries', async () => { - mockSendEmail.mockRejectedValue(new Error('Permanent failure')); - - const payload = { - to: 'deadletter@example.com', - subject: 'Atomicity Test', - html: '

Test

', - }; - - await queueEmail(payload); - - const stub = await getEmailQueueStub(); - await runInDurableObjectWithRetry(stub, async (instance, state) => { - const emails = await state.storage.list({ prefix: 'email:' }); - if (emails.size === 0) return; // Already moved on first attempt at max retries - - const emailEntries = Array.from(emails.entries()); - const emailRecord = emailEntries[0][1]; - const emailId = emailRecord.id; - - // Set to max retries so next attempt triggers dead-letter - emailRecord.attempts = 3; - await state.storage.put(`email:${emailId}`, emailRecord); - - await instance.attemptSend(emailRecord); - - // Both conditions must hold simultaneously - const deadLetters = await state.storage.list({ prefix: 'dead-letter:' }); - const remainingEmails = await state.storage.list({ prefix: 'email:' }); - - expect(deadLetters.size).toBe(1); - expect(remainingEmails.size).toBe(0); - - const deadLetter = Array.from(deadLetters.values())[0]; - expect(deadLetter.id).toBe(emailId); - expect(deadLetter.status).toBe('failed'); - expect(deadLetter.error).toBe('Permanent failure'); - }); - }); - }); - - describe('Alarm Scheduling', () => { - it('should schedule alarm for retry processing', async () => { - mockSendEmail.mockRejectedValueOnce(new Error('Temporary error')); - - const payload = { - to: 'test@example.com', - subject: 'Test Email', - html: '

Test

', - }; - - await queueEmail(payload); - - const stub = await getEmailQueueStub(); - await runInDurableObjectWithRetry(stub, async (instance, state) => { - const alarm = await state.storage.getAlarm(); - expect(alarm).toBeGreaterThan(Date.now()); - }); - }); - - it('should not schedule duplicate alarms', async () => { - mockSendEmail.mockRejectedValue(new Error('Error')); - - const payload1 = { - to: 'test1@example.com', - subject: 'Test 1', - html: '

Test 1

', - }; - - const payload2 = { - to: 'test2@example.com', - subject: 'Test 2', - html: '

Test 2

', - }; - - await queueEmail(payload1); - const stub = await getEmailQueueStub(); - - let firstAlarm; - await runInDurableObjectWithRetry(stub, async (instance, state) => { - firstAlarm = await state.storage.getAlarm(); - }); - - await queueEmail(payload2); - - await runInDurableObjectWithRetry(stub, async (instance, state) => { - const secondAlarm = await state.storage.getAlarm(); - // Should be the same alarm (not duplicated) - expect(secondAlarm).toBe(firstAlarm); - }); - }); - }); -}); diff --git a/packages/workers/src/index.ts b/packages/workers/src/index.ts index d36cf43da..4b447dcb5 100644 --- a/packages/workers/src/index.ts +++ b/packages/workers/src/index.ts @@ -10,13 +10,14 @@ import type { ContentfulStatusCode } from 'hono/utils/http-status'; import * as Sentry from '@sentry/cloudflare'; import { UserSession } from './durable-objects/UserSession'; import { ProjectDoc } from './durable-objects/ProjectDoc'; -import { EmailQueue } from './durable-objects/EmailQueue'; import { createCorsMiddleware } from './middleware/cors'; import { securityHeaders } from './middleware/securityHeaders'; import { requireAuth } from './middleware/auth'; import { requireTrustedOrigin } from './middleware/csrf'; import { errorHandler } from './middleware/errorHandler'; import { createDomainError, SYSTEM_ERRORS } from '@corates/shared'; +import { createEmailService } from './auth/email'; +import type { EmailPayload } from './lib/email-queue'; import type { Env } from './types'; // Route imports @@ -25,7 +26,6 @@ import { healthRoutes } from './routes/health'; import { orgRoutes } from './routes/orgs/index'; import { userRoutes } from './routes/users'; import { dbRoutes } from './routes/database'; -import { emailRoutes } from './routes/email'; import { billingRoutes } from './routes/billing/index'; import { googleDriveRoutes } from './routes/google-drive'; import { avatarRoutes } from './routes/avatars'; @@ -35,7 +35,7 @@ import { contactRoutes } from './routes/contact'; import { invitationRoutes } from './routes/invitations'; // Export Durable Objects -export { UserSession, ProjectDoc, EmailQueue }; +export { UserSession, ProjectDoc }; // Create main Hono app with OpenAPI support const app = new OpenAPIHono<{ Bindings: Env }>(); @@ -133,9 +133,6 @@ app.post('/api/admin/stop-impersonation', async c => { // Mount admin routes app.route('/api/admin', adminRoutes); -// Mount email routes -app.route('/api/email', emailRoutes); - // Mount contact form route (public) app.route('/api/contact', contactRoutes); @@ -381,5 +378,32 @@ export default Sentry.withSentry( // Add request data to error reports sendDefaultPii: true, }), - app, + { + fetch: app.fetch, + + // eslint-disable-next-line no-undef + async queue(batch: MessageBatch, env: Env): Promise { + const emailService = createEmailService(env); + + for (const msg of batch.messages) { + try { + const result = await emailService.sendEmail( + msg.body as Parameters[0], + ); + + if (result.success) { + msg.ack(); + } else { + console.error(`[EmailQueue] Send returned error for ${msg.body.to}:`, result.error); + const delay = Math.min(30 * 2 ** msg.attempts, 1800); + msg.retry({ delaySeconds: delay }); + } + } catch (error) { + console.error(`[EmailQueue] Exception sending to ${msg.body.to}:`, error); + const delay = Math.min(30 * 2 ** msg.attempts, 1800); + msg.retry({ delaySeconds: delay }); + } + } + }, + }, ); diff --git a/packages/workers/src/lib/email-queue.ts b/packages/workers/src/lib/email-queue.ts new file mode 100644 index 000000000..70a74452e --- /dev/null +++ b/packages/workers/src/lib/email-queue.ts @@ -0,0 +1,26 @@ +/** + * Email queue producer utility + * + * Sends email payloads to the Cloudflare Queue for async delivery. + * The queue consumer (in index.ts) processes messages via Postmark. + */ +import { createDomainError, VALIDATION_ERRORS } from '@corates/shared'; +import type { Env } from '../types'; + +export interface EmailPayload { + to: string; + subject: string; + html?: string; + text?: string; +} + +export async function queueEmail(env: Env, payload: EmailPayload): Promise { + if (!payload?.to || !payload?.subject || (!payload?.html && !payload?.text)) { + throw createDomainError( + VALIDATION_ERRORS.INVALID_INPUT, + { fields: ['to', 'subject', 'html', 'text'] }, + 'Email payload requires to, subject, and html or text', + ); + } + await env.EMAIL_QUEUE.send(payload); +} diff --git a/packages/workers/src/lib/send-invitation-email.ts b/packages/workers/src/lib/send-invitation-email.ts new file mode 100644 index 000000000..5dc925270 --- /dev/null +++ b/packages/workers/src/lib/send-invitation-email.ts @@ -0,0 +1,141 @@ +/** + * Shared helper for sending project invitation emails with magic links. + * + * Extracts the duplicated ~80-line magic-link generation + email queueing + * pattern that was repeated across members.ts, orgs/invitations.ts, + * and orgs/members.ts. + */ + +import { createDomainError, SYSTEM_ERRORS } from '@corates/shared'; +import type { Env } from '../types'; +import { queueEmail } from './email-queue'; + +interface SendInvitationEmailParams { + env: Env; + email: string; + token: string; + projectName: string; + inviterName: string; + role: string; +} + +interface SendInvitationEmailResult { + emailQueued: boolean; +} + +/** + * Generates a magic link and queues an invitation email. + * + * Throws on critical errors (missing AUTH_SECRET, failed magic link generation). + * Returns { emailQueued: false } if only the queue send fails, since the + * invitation record already exists in the database and can be resent. + */ +export async function sendInvitationEmail( + params: SendInvitationEmailParams, +): Promise { + const { env, email, token, projectName, inviterName, role } = params; + + const appUrl = env.APP_URL || 'https://corates.org'; + const envRecord = env as unknown as Record; + const basepath = envRecord.BASEPATH || ''; + const basepathNormalized = basepath ? basepath.replace(/\/$/, '') : ''; + + const callbackPath = `${basepathNormalized}/complete-profile?invitation=${token}`; + const callbackURL = `${appUrl}${callbackPath}`; + + const authBaseUrl = env.AUTH_BASE_URL || env.APP_URL || 'https://corates.org'; + let capturedMagicLinkUrl: string | null = null; + + const { betterAuth } = await import('better-auth'); + const { magicLink } = await import('better-auth/plugins'); + const { drizzleAdapter } = await import('better-auth/adapters/drizzle'); + const { drizzle } = await import('drizzle-orm/d1'); + const schema = await import('@/db/schema.js'); + const { MAGIC_LINK_EXPIRY_MINUTES } = await import('@/auth/emailTemplates.js'); + + const authSecret = env.AUTH_SECRET || (envRecord.SECRET as string | undefined); + if (!authSecret) { + throw createDomainError( + SYSTEM_ERRORS.INTERNAL_ERROR, + { key: 'AUTH_SECRET' }, + 'AUTH_SECRET must be configured', + ); + } + + const tempDb = drizzle(env.DB, { schema }); + const tempAuth = betterAuth({ + database: drizzleAdapter(tempDb, { + provider: 'sqlite', + schema: { + user: schema.user, + session: schema.session, + account: schema.account, + verification: schema.verification, + twoFactor: schema.twoFactor, + }, + }), + baseURL: authBaseUrl, + secret: authSecret, + plugins: [ + magicLink({ + sendMagicLink: async ({ url }: { url: string }) => { + capturedMagicLinkUrl = url; + }, + expiresIn: 60 * MAGIC_LINK_EXPIRY_MINUTES, + }), + ], + }); + + await tempAuth.api.signInMagicLink({ + body: { + email: email.toLowerCase(), + callbackURL: callbackURL, + newUserCallbackURL: callbackURL, + }, + headers: new Headers(), + }); + + if (!capturedMagicLinkUrl) { + throw createDomainError( + SYSTEM_ERRORS.INTERNAL_ERROR, + { service: 'magic-link' }, + 'Failed to generate magic link URL', + ); + } + + if (env.ENVIRONMENT !== 'production') { + console.log('[Email] Project invitation magic link URL:', capturedMagicLinkUrl); + } + + const { getProjectInvitationEmailHtml, getProjectInvitationEmailText } = + await import('@/auth/emailTemplates.js'); + const { escapeHtml } = await import('@/lib/escapeHtml.js'); + + const emailHtml = getProjectInvitationEmailHtml({ + projectName, + inviterName, + invitationUrl: capturedMagicLinkUrl, + role, + }); + const emailText = getProjectInvitationEmailText({ + projectName, + inviterName, + invitationUrl: capturedMagicLinkUrl, + role, + }); + + const safeProjectName = escapeHtml(projectName); + + try { + await queueEmail(env, { + to: email, + subject: `You're Invited to "${safeProjectName}" - CoRATES`, + html: emailHtml, + text: emailText, + }); + return { emailQueued: true }; + } catch (err) { + console.error('[Invitation] Failed to queue invitation email:', err); + return { emailQueued: false }; + } +} diff --git a/packages/workers/src/routes/__tests__/contact.test.js b/packages/workers/src/routes/__tests__/contact.test.js index 7c8f84af9..ddfddc396 100644 --- a/packages/workers/src/routes/__tests__/contact.test.js +++ b/packages/workers/src/routes/__tests__/contact.test.js @@ -7,23 +7,20 @@ import { Hono } from 'hono'; import { env, createExecutionContext, waitOnExecutionContext } from 'cloudflare:test'; import { json } from '@/__tests__/helpers.js'; -// Mock Postmark -const mockSendEmail = vi.fn(async () => ({ - ErrorCode: 0, - MessageID: 'test-message-id', -})); - +// Mock Postmark (still needed since email-queue module may import it transitively) vi.mock('postmark', () => { return { Client: class { - constructor() { - this.sendEmail = mockSendEmail; + constructor() {} + sendEmail() { + return Promise.resolve({ ErrorCode: 0, MessageID: 'test-message-id' }); } }, }; }); let app; +const mockQueueSend = vi.fn(async () => {}); beforeAll(async () => { const { contactRoutes } = await import('../contact.js'); @@ -33,19 +30,21 @@ beforeAll(async () => { beforeEach(() => { vi.clearAllMocks(); - // Reset rate limiter by using unique IPs for each test - // This prevents rate limiting from interfering with other tests }); let testCounter = 0; -async function fetchContact(path = '', init = {}) { +async function fetchContact(path = '', init = {}, envOverrides = {}) { testCounter++; const testEnv = { ...env, - POSTMARK_SERVER_TOKEN: 'test-token', + EMAIL_QUEUE: { + send: mockQueueSend, + sendBatch: vi.fn(async () => {}), + }, CONTACT_EMAIL: 'contact@example.com', EMAIL_FROM: 'noreply@example.com', + ...envOverrides, }; // Use unique IP for each test to avoid rate limiting interference @@ -80,8 +79,14 @@ describe('Contact Routes - POST /api/contact', () => { expect(res.status).toBe(200); const body = await json(res); expect(body.success).toBe(true); - expect(body.messageId).toBe('test-message-id'); - expect(mockSendEmail).toHaveBeenCalledTimes(1); + expect(body.messageId).toBeDefined(); + expect(mockQueueSend).toHaveBeenCalledTimes(1); + + const payload = mockQueueSend.mock.calls[0][0]; + expect(payload.to).toBe('contact@example.com'); + expect(payload.subject).toBe('[Contact Form] Test Subject'); + expect(payload.text).toContain('John Doe'); + expect(payload.html).toContain('John Doe'); }); it('should accept submission without subject', async () => { @@ -98,6 +103,9 @@ describe('Contact Routes - POST /api/contact', () => { expect(res.status).toBe(200); const body = await json(res); expect(body.success).toBe(true); + + const payload = mockQueueSend.mock.calls[0][0]; + expect(payload.subject).toBe('[Contact Form] New Inquiry'); }); it('should reject missing name', async () => { @@ -205,11 +213,8 @@ describe('Contact Routes - POST /api/contact', () => { expect(body.message || body.error).toMatch(/message/i); }); - it('should handle Postmark API errors', async () => { - mockSendEmail.mockResolvedValueOnce({ - ErrorCode: 406, - Message: 'Invalid email', - }); + it('should handle queue send errors', async () => { + mockQueueSend.mockRejectedValueOnce(new Error('Queue unavailable')); const res = await fetchContact('', { method: 'POST', @@ -225,33 +230,6 @@ describe('Contact Routes - POST /api/contact', () => { const body = await json(res); expect(body.code).toBeDefined(); expect(body.code).toMatch(/SYSTEM_EMAIL_SEND_FAILED/); - expect(body.message || body.error).toBeDefined(); - }); - - it('should return error when POSTMARK_SERVER_TOKEN not configured', async () => { - const testEnv = { - ...env, - POSTMARK_SERVER_TOKEN: null, - }; - - const ctx = createExecutionContext(); - const req = new Request('http://localhost/api/contact', { - method: 'POST', - headers: { 'content-type': 'application/json' }, - body: JSON.stringify({ - name: 'John Doe', - email: 'john@example.com', - message: 'Test message', - }), - }); - const res = await app.fetch(req, testEnv, ctx); - await waitOnExecutionContext(ctx); - - expect(res.status).toBe(503); - const body = await json(res); - expect(body.code).toBeDefined(); - expect(body.code).toMatch(/SYSTEM_SERVICE_UNAVAILABLE/); - expect(body.message || body.error).toMatch(/service|unavailable/i); }); it('should trim whitespace from fields', async () => { @@ -266,9 +244,9 @@ describe('Contact Routes - POST /api/contact', () => { }); expect(res.status).toBe(200); - expect(mockSendEmail).toHaveBeenCalled(); - const callArgs = mockSendEmail.mock.calls[0][0]; - expect(callArgs.TextBody).toContain('John Doe'); - expect(callArgs.TextBody).not.toContain(' '); + expect(mockQueueSend).toHaveBeenCalled(); + const payload = mockQueueSend.mock.calls[0][0]; + expect(payload.text).toContain('John Doe'); + expect(payload.text).not.toMatch(/^ {2}John/); }); }); diff --git a/packages/workers/src/routes/__tests__/email.test.js b/packages/workers/src/routes/__tests__/email.test.js deleted file mode 100644 index f0bb99095..000000000 --- a/packages/workers/src/routes/__tests__/email.test.js +++ /dev/null @@ -1,156 +0,0 @@ -/** - * Tests for email routes - */ - -import { beforeAll, beforeEach, describe, expect, it, vi } from 'vitest'; -import { Hono } from 'hono'; -import { env, createExecutionContext, waitOnExecutionContext } from 'cloudflare:test'; -import { json } from '@/__tests__/helpers.js'; - -// Mock postmark -vi.mock('postmark', () => { - return { - Client: class { - constructor() {} - sendEmail() { - return Promise.resolve({ Message: 'mock' }); - } - }, - }; -}); - -let app; - -beforeAll(async () => { - const { emailRoutes } = await import('../email.js'); - app = new Hono(); - app.route('/api/email', emailRoutes); -}); - -beforeEach(() => { - vi.clearAllMocks(); -}); - -async function fetchEmail(path, init = {}) { - const mockFetch = vi.fn(async request => { - // Handle the full URL request from email route - const url = typeof request === 'string' ? new URL(request) : new URL(request.url); - if (url.pathname === '/enqueue' || url.pathname.includes('enqueue')) { - return new Response(JSON.stringify({ success: true }), { - status: 202, - headers: { 'Content-Type': 'application/json' }, - }); - } - return new Response(JSON.stringify({ success: true }), { - status: 200, - headers: { 'Content-Type': 'application/json' }, - }); - }); - - const testEnv = { - ...env, - ENVIRONMENT: 'production', - EMAIL_QUEUE: { - idFromName: vi.fn(() => ({ toString: () => 'do-id' })), - get: vi.fn(() => ({ - fetch: mockFetch, - queueEmail: vi.fn(async () => {}), - })), - }, - }; - - const ctx = createExecutionContext(); - const req = new Request(`http://localhost${path}`, init); - const res = await app.fetch(req, testEnv, ctx); - await waitOnExecutionContext(ctx); - return res; -} - -describe('Email Routes - POST /api/email/queue', () => { - it('should queue email with valid payload', async () => { - const res = await fetchEmail('/api/email/queue', { - method: 'POST', - headers: { 'content-type': 'application/json' }, - body: JSON.stringify({ - to: 'user@example.com', - subject: 'Test Email', - html: '

Test

', - }), - }); - - expect(res.status).toBe(200); - const body = await json(res); - expect(body.success).toBe(true); - // EmailQueue returns 202, but route wraps it - expect(body.queued).toBeDefined(); - }); - - it('should reject request without to field', async () => { - const res = await fetchEmail('/api/email/queue', { - method: 'POST', - headers: { 'content-type': 'application/json' }, - body: JSON.stringify({ - subject: 'Test Email', - html: '

Test

', - }), - }); - - expect(res.status).toBe(400); - const body = await json(res); - expect(body.code).toBeDefined(); - expect(body.code).toMatch(/VALIDATION_FIELD_REQUIRED/); - expect(body.message || body.error).toMatch(/to|required/i); - }); - - it('should accept email with text content', async () => { - const res = await fetchEmail('/api/email/queue', { - method: 'POST', - headers: { 'content-type': 'application/json' }, - body: JSON.stringify({ - to: 'user@example.com', - subject: 'Test Email', - text: 'Plain text content', - }), - }); - - expect(res.status).toBe(200); - const body = await json(res); - expect(body.success).toBe(true); - }); - - it('should handle DO fetch errors gracefully', async () => { - const testEnv = { - ...env, - EMAIL_QUEUE: { - idFromName: vi.fn(() => ({ toString: () => 'do-id' })), - get: vi.fn(() => ({ - fetch: vi.fn(async _request => { - throw new Error('DO fetch failed'); - }), - queueEmail: vi.fn(async () => { - throw new Error('DO fetch failed'); - }), - })), - }, - }; - - const ctx = createExecutionContext(); - const req = new Request('http://localhost/api/email/queue', { - method: 'POST', - headers: { 'content-type': 'application/json' }, - body: JSON.stringify({ - to: 'user@example.com', - subject: 'Test', - html: '

Test

', - }), - }); - const res = await app.fetch(req, testEnv, ctx); - await waitOnExecutionContext(ctx); - - expect(res.status).toBe(500); - const body = await json(res); - expect(body.code).toBeDefined(); - expect(body.code).toMatch(/SYSTEM_EMAIL_SEND_FAILED/); - expect(body.message || body.error).toBeDefined(); - }); -}); diff --git a/packages/workers/src/routes/__tests__/project-invitations.test.js b/packages/workers/src/routes/__tests__/project-invitations.test.js index 1d472386c..0d2e3c5f9 100644 --- a/packages/workers/src/routes/__tests__/project-invitations.test.js +++ b/packages/workers/src/routes/__tests__/project-invitations.test.js @@ -75,7 +75,6 @@ vi.mock('@/lib/project-sync.js', () => { // For now, we'll let it fail silently (it's in a try-catch) let app; -let mockEmailQueueFetch; let mockUserSessionFetch; let mockSyncMemberToDO; @@ -111,9 +110,6 @@ beforeEach(async () => { }); // Setup default DO mocks - mockEmailQueueFetch = vi.fn( - async () => new Response(JSON.stringify({ ok: true }), { status: 200 }), - ); mockUserSessionFetch = vi.fn( async () => new Response(JSON.stringify({ ok: true }), { status: 200 }), ); @@ -129,11 +125,8 @@ async function fetchInvitations(orgId, projectId, path = '', init = {}) { AUTH_SECRET: 'test-secret', SECRET: 'test-secret', EMAIL_QUEUE: { - idFromName: () => ({ toString: () => 'default-queue' }), - get: () => ({ - fetch: mockEmailQueueFetch, - queueEmail: vi.fn(async () => {}), - }), + send: vi.fn(async () => {}), + sendBatch: vi.fn(async () => {}), }, USER_SESSION: { idFromName: userId => ({ toString: () => `user-session-${userId}` }), diff --git a/packages/workers/src/routes/account-merge.ts b/packages/workers/src/routes/account-merge.ts index 23e7bd4b8..ac0ba9272 100644 --- a/packages/workers/src/routes/account-merge.ts +++ b/packages/workers/src/routes/account-merge.ts @@ -20,8 +20,8 @@ import { user, account, projects, projectMembers, mediaFiles, verification } fro import { eq, sql, like, and } from 'drizzle-orm'; import { requireAuth, getAuth } from '@/middleware/auth.js'; import { rateLimit } from '@/middleware/rateLimit.js'; -import { createEmailService } from '@/auth/email.js'; import { getAccountMergeEmailHtml, getAccountMergeEmailText } from '@/auth/emailTemplates.js'; +import { queueEmail } from '@/lib/email-queue.js'; import { createDomainError, createValidationError, @@ -461,16 +461,15 @@ accountMergeRoutes.openapi(initiateRoute, async c => { updatedAt: new Date(), }); - const emailService = createEmailService(c.env); - const emailResult = await emailService.sendEmail({ - to: targetUser.email, - subject: 'CoRATES Account Merge Verification Code', - html: getAccountMergeEmailHtml({ code: verificationCode }), - text: getAccountMergeEmailText({ code: verificationCode }), - }); - - if (!emailResult.success) { - console.error('[AccountMerge] Failed to send verification email:', emailResult.error); + try { + await queueEmail(c.env, { + to: targetUser.email, + subject: 'CoRATES Account Merge Verification Code', + html: getAccountMergeEmailHtml({ code: verificationCode }), + text: getAccountMergeEmailText({ code: verificationCode }), + }); + } catch (err) { + console.error('[AccountMerge] Failed to queue verification email:', err); await db .delete(verification) @@ -478,7 +477,7 @@ accountMergeRoutes.openapi(initiateRoute, async c => { const error = createDomainError(SYSTEM_ERRORS.EMAIL_SEND_FAILED, { operation: 'send_merge_verification', - originalError: String(emailResult.error ?? 'Unknown email error'), + originalError: String(err instanceof Error ? err.message : 'Unknown email error'), }); return c.json(error, error.statusCode as ContentfulStatusCode); } diff --git a/packages/workers/src/routes/billing/__tests__/invoiceHandlers.test.ts b/packages/workers/src/routes/billing/__tests__/invoiceHandlers.test.ts index 4272fb87b..4795ec5bd 100644 --- a/packages/workers/src/routes/billing/__tests__/invoiceHandlers.test.ts +++ b/packages/workers/src/routes/billing/__tests__/invoiceHandlers.test.ts @@ -230,9 +230,7 @@ describe('Invoice Handlers', () => { }); const mockEmailQueue = { - get: vi.fn().mockReturnValue({ - queueEmail: vi.fn().mockResolvedValue({ success: true }), - }), + send: vi.fn().mockResolvedValue(undefined), }; const invoice = { @@ -266,9 +264,7 @@ describe('Invoice Handlers', () => { }); const mockEmailQueue = { - get: vi.fn().mockReturnValue({ - queueEmail: vi.fn(), - }), + send: vi.fn().mockResolvedValue(undefined), }; const invoice = { diff --git a/packages/workers/src/routes/billing/handlers/dunning.ts b/packages/workers/src/routes/billing/handlers/dunning.ts index 4affd3434..7f6ff7930 100644 --- a/packages/workers/src/routes/billing/handlers/dunning.ts +++ b/packages/workers/src/routes/billing/handlers/dunning.ts @@ -1,7 +1,7 @@ /** * Dunning email handlers * - * Sends payment failure notifications to users via the EmailQueue DO. + * Sends payment failure notifications to users via the email queue. * Uses escalating urgency based on payment attempt count. */ import type { WebhookContext } from './types.js'; @@ -24,7 +24,7 @@ interface EmailTemplate { } /** - * Queue dunning email using existing EmailQueue DO + * Queue dunning email for delivery */ export async function queueDunningEmail( params: DunningParams, @@ -96,11 +96,8 @@ export async function queueDunningEmail( }; try { - // Queue via EmailQueue DO - const queueId = env.EMAIL_QUEUE.idFromName('default'); - const queue = env.EMAIL_QUEUE.get(queueId); - - await queue.queueEmail(emailPayload); + const { queueEmail } = await import('../../../lib/email-queue'); + await queueEmail(env, emailPayload); logger.stripe('dunning_email_queued', { subscriptionId, diff --git a/packages/workers/src/routes/billing/handlers/invoiceHandlers.ts b/packages/workers/src/routes/billing/handlers/invoiceHandlers.ts index 94b7b608e..7405c5238 100644 --- a/packages/workers/src/routes/billing/handlers/invoiceHandlers.ts +++ b/packages/workers/src/routes/billing/handlers/invoiceHandlers.ts @@ -199,7 +199,7 @@ export async function handleInvoicePaymentFailed( .get(); if (billingUser?.email) { - // Queue dunning email via EmailQueue DO + // Queue dunning email await queueDunningEmail( { subscriptionId: existing.id, diff --git a/packages/workers/src/routes/contact.ts b/packages/workers/src/routes/contact.ts index 13419dde2..d492f3cee 100644 --- a/packages/workers/src/routes/contact.ts +++ b/packages/workers/src/routes/contact.ts @@ -5,7 +5,6 @@ import { OpenAPIHono, createRoute, z } from '@hono/zod-openapi'; import type { ContentfulStatusCode } from 'hono/utils/http-status'; -import { Client as PostmarkClient } from 'postmark'; import { contactRateLimit } from '@/middleware/rateLimit'; import { createDomainError, @@ -15,6 +14,7 @@ import { } from '@corates/shared'; import type { ValidationErrorCode } from '@corates/shared'; import { escapeHtml } from '@/lib/escapeHtml'; +import { queueEmail } from '@/lib/email-queue'; import type { Env } from '../types'; const contact = new OpenAPIHono<{ Bindings: Env }>({ @@ -172,27 +172,15 @@ contact.openapi(submitContactRoute, async c => { const env = c.env; const { name, email, subject, message } = c.req.valid('json'); - // Check for Postmark token - if (!env.POSTMARK_SERVER_TOKEN) { - console.error('[Contact] No POSTMARK_SERVER_TOKEN configured'); - const error = createDomainError(SYSTEM_ERRORS.SERVICE_UNAVAILABLE, { - service: 'email', - }); - return c.json(error, error.statusCode as ContentfulStatusCode); - } - - const postmark = new PostmarkClient(env.POSTMARK_SERVER_TOKEN); const contactEmail = (env as unknown as Record).CONTACT_EMAIL ?? 'contact@corates.org'; try { - const response = await postmark.sendEmail({ - From: `CoRATES Contact Form <${env.EMAIL_FROM || 'contact@corates.org'}>`, - To: contactEmail, - ReplyTo: email, - Subject: `[Contact Form] ${subject || 'New Inquiry'}`, - TextBody: `New contact form submission:\n\nName: ${name}\nEmail: ${email}\nSubject: ${subject || 'Not specified'}\n\nMessage:\n${message}`, - HtmlBody: ` + await queueEmail(env, { + to: contactEmail, + subject: `[Contact Form] ${subject || 'New Inquiry'}`, + text: `New contact form submission:\n\nName: ${name}\nEmail: ${email}\nSubject: ${subject || 'Not specified'}\n\nMessage:\n${message}\n\nReply-To: ${email}`, + html: `

New Contact Form Submission

@@ -216,24 +204,14 @@ contact.openapi(submitContactRoute, async c => {

`, - MessageStream: 'outbound', }); - if (response.ErrorCode !== 0) { - console.error('[Contact] Postmark API error:', JSON.stringify(response)); - const error = createDomainError(SYSTEM_ERRORS.EMAIL_SEND_FAILED, { - service: 'postmark', - errorCode: response.ErrorCode, - }); - return c.json(error, error.statusCode as ContentfulStatusCode); - } - - return c.json({ success: true as const, messageId: response.MessageID }); + return c.json({ success: true as const, messageId: crypto.randomUUID() }); } catch (err) { const error = err as Error; - console.error('[Contact] Exception during send:', error.message, error.stack); + console.error('[Contact] Failed to queue email:', error.message); const domainError = createDomainError(SYSTEM_ERRORS.EMAIL_SEND_FAILED, { - service: 'postmark', + service: 'email', originalError: error.message, }); return c.json(domainError, domainError.statusCode as ContentfulStatusCode); diff --git a/packages/workers/src/routes/email.ts b/packages/workers/src/routes/email.ts deleted file mode 100644 index 1bd03ee57..000000000 --- a/packages/workers/src/routes/email.ts +++ /dev/null @@ -1,146 +0,0 @@ -/** - * Email queue routes for Hono - * Handles email queueing via Durable Object - */ - -import { OpenAPIHono, createRoute, z } from '@hono/zod-openapi'; -import type { ContentfulStatusCode } from 'hono/utils/http-status'; -import { emailRateLimit } from '@/middleware/rateLimit'; -import { - createDomainError, - createValidationError, - VALIDATION_ERRORS, - SYSTEM_ERRORS, -} from '@corates/shared'; -import type { ValidationErrorCode } from '@corates/shared'; -import type { Env } from '../types'; - -const emailRoutes = new OpenAPIHono<{ Bindings: Env }>({ - defaultHook: (result, c) => { - if (!result.success) { - const firstIssue = result.error.issues[0]; - const field = firstIssue?.path?.[0] || 'input'; - const fieldName = String(field).charAt(0).toUpperCase() + String(field).slice(1); - - let errorCode: ValidationErrorCode = VALIDATION_ERRORS.INVALID_INPUT.code; - let message = firstIssue?.message || 'Validation failed'; - - const isMissing = - firstIssue?.code === 'invalid_type' || - message.includes('received undefined') || - message.includes('Required'); - - if (isMissing) { - errorCode = VALIDATION_ERRORS.FIELD_REQUIRED.code; - message = `${fieldName} is required`; - } else if (firstIssue?.code === 'too_big') { - errorCode = VALIDATION_ERRORS.FIELD_TOO_LONG.code; - } else if (firstIssue?.code === 'too_small') { - errorCode = VALIDATION_ERRORS.FIELD_TOO_SHORT.code; - } else if (firstIssue?.code === 'invalid_format') { - errorCode = VALIDATION_ERRORS.FIELD_INVALID_FORMAT.code; - } - - const error = createValidationError(String(field), errorCode, null); - error.message = message; - return c.json(error, 400); - } - }, -}); - -// Apply rate limiting to email endpoints -emailRoutes.use('*', emailRateLimit); - -// Request schema -const EmailQueueRequestSchema = z - .object({ - to: z.string().email().openapi({ example: 'user@example.com' }), - subject: z.string().optional().openapi({ example: 'Welcome to CoRATES' }), - body: z.string().optional().openapi({ example: 'Email body content' }), - template: z.string().optional().openapi({ example: 'welcome' }), - data: z.record(z.string(), z.unknown()).optional(), - }) - .openapi('EmailQueueRequest'); - -// Response schemas -const EmailQueueSuccessSchema = z - .object({ - success: z.literal(true), - queued: z.boolean(), - }) - .openapi('EmailQueueSuccess'); - -const ErrorSchema = z - .object({ - code: z.string(), - message: z.string(), - statusCode: z.number(), - field: z.string().optional(), - details: z.record(z.string(), z.unknown()).optional(), - }) - .openapi('EmailError'); - -// Queue email route -const queueEmailRoute = createRoute({ - method: 'post', - path: '/queue', - tags: ['Email'], - summary: 'Queue email', - description: 'Enqueue an email to be sent via the email queue Durable Object', - request: { - body: { - content: { - 'application/json': { - schema: EmailQueueRequestSchema, - }, - }, - required: true, - }, - }, - responses: { - 200: { - content: { - 'application/json': { - schema: EmailQueueSuccessSchema, - }, - }, - description: 'Email queued successfully', - }, - 400: { - content: { 'application/json': { schema: ErrorSchema } }, - description: 'Validation error', - }, - 429: { - content: { 'application/json': { schema: ErrorSchema } }, - description: 'Rate limit exceeded', - }, - 500: { - content: { 'application/json': { schema: ErrorSchema } }, - description: 'Email queue error', - }, - }, -}); - -// @ts-expect-error OpenAPIHono strict return types don't account for error responses -emailRoutes.openapi(queueEmailRoute, async c => { - try { - const payload = c.req.valid('json'); - - const id = c.env.EMAIL_QUEUE.idFromName('default'); - const queue = c.env.EMAIL_QUEUE.get(id); - - await queue.queueEmail(payload as import('../durable-objects/EmailQueue').EmailPayload); - - return c.json({ success: true as const, queued: true }); - } catch (err) { - const error = err as Error; - console.error('Email queue handler error:', error); - const domainError = createDomainError(SYSTEM_ERRORS.EMAIL_SEND_FAILED, { - operation: 'queue_email', - originalError: error.message, - }); - return c.json(domainError, domainError.statusCode as ContentfulStatusCode); - } -}); - -export { emailRoutes }; diff --git a/packages/workers/src/routes/health.ts b/packages/workers/src/routes/health.ts index 9261f5996..0d48198f7 100644 --- a/packages/workers/src/routes/health.ts +++ b/packages/workers/src/routes/health.ts @@ -18,7 +18,6 @@ const ServiceStatusSchema = z .object({ USER_SESSION: z.boolean().optional(), PROJECT_DOC: z.boolean().optional(), - EMAIL_QUEUE: z.boolean().optional(), }) .optional(), }) @@ -122,12 +121,11 @@ health.openapi(healthRoute, async c => { try { checks.services.durableObjects = { status: - c.env.USER_SESSION && c.env.PROJECT_DOC && c.env.EMAIL_QUEUE ? 'healthy' : 'unhealthy', + c.env.USER_SESSION && c.env.PROJECT_DOC ? 'healthy' : 'unhealthy', type: 'Durable Objects', bindings: { USER_SESSION: !!c.env.USER_SESSION, PROJECT_DOC: !!c.env.PROJECT_DOC, - EMAIL_QUEUE: !!c.env.EMAIL_QUEUE, }, }; } catch (error) { diff --git a/packages/workers/src/routes/members.ts b/packages/workers/src/routes/members.ts index b4dffdee7..2f78ca836 100644 --- a/packages/workers/src/routes/members.ts +++ b/packages/workers/src/routes/members.ts @@ -477,119 +477,30 @@ memberRoutes.openapi(addMemberRoute, async c => { .where(eq(user.id, authUser.id)) .get(); - try { - const appUrl = c.env.APP_URL || 'https://corates.org'; - const basepath = (c.env as unknown as Record).BASEPATH ?? ''; - const basepathNormalized = basepath ? basepath.replace(/\/$/, '') : ''; - - const callbackPath = `${basepathNormalized}/complete-profile?invitation=${token}`; - const callbackURL = `${appUrl}${callbackPath}`; - - const authBaseUrl = c.env.AUTH_BASE_URL || c.env.APP_URL || 'https://corates.org'; - let capturedMagicLinkUrl: string | null = null; - - const { betterAuth } = await import('better-auth'); - const { magicLink } = await import('better-auth/plugins'); - const { drizzleAdapter } = await import('better-auth/adapters/drizzle'); - const { drizzle } = await import('drizzle-orm/d1'); - const schema = await import('../db/schema'); - const { MAGIC_LINK_EXPIRY_MINUTES } = await import('../auth/emailTemplates'); - - const authSecret = c.env.AUTH_SECRET; - if (!authSecret) { - throw createDomainError( - SYSTEM_ERRORS.INTERNAL_ERROR, - { key: 'AUTH_SECRET' }, - 'AUTH_SECRET must be configured', - ); - } - - const tempDb = drizzle(c.env.DB, { schema }); - const tempAuth = betterAuth({ - database: drizzleAdapter(tempDb, { - provider: 'sqlite', - schema: { - user: schema.user, - session: schema.session, - account: schema.account, - verification: schema.verification, - twoFactor: schema.twoFactor, - }, - }), - baseURL: authBaseUrl, - secret: authSecret, - plugins: [ - magicLink({ - sendMagicLink: async ({ url }: { url: string }) => { - capturedMagicLinkUrl = url; - }, - expiresIn: 60 * MAGIC_LINK_EXPIRY_MINUTES, - }), - ], - }); - - await tempAuth.api.signInMagicLink({ - body: { - email: email.toLowerCase(), - callbackURL: callbackURL, - newUserCallbackURL: callbackURL, - }, - headers: new Headers(), - }); - - if (!capturedMagicLinkUrl) { - throw createDomainError( - SYSTEM_ERRORS.INTERNAL_ERROR, - { service: 'magic-link' }, - 'Failed to generate magic link URL', - ); - } - - const magicLinkUrl = capturedMagicLinkUrl; - - if (c.env.ENVIRONMENT !== 'production') { - console.log('[Email] Project invitation magic link URL:', magicLinkUrl); - } - - const { getProjectInvitationEmailHtml, getProjectInvitationEmailText } = - await import('../auth/emailTemplates'); - const { escapeHtml } = await import('../lib/escapeHtml'); + const projectName = project?.name || 'Unknown Project'; + const inviterName = inviter?.givenName || inviter?.name || inviter?.email || 'Someone'; - const projectName = project?.name || 'Unknown Project'; - const inviterName = inviter?.givenName || inviter?.name || inviter?.email || 'Someone'; - - const emailHtml = getProjectInvitationEmailHtml({ - projectName, - inviterName, - invitationUrl: magicLinkUrl, - role, - }); - const emailText = getProjectInvitationEmailText({ + let emailQueued = false; + try { + const { sendInvitationEmail } = await import('../lib/send-invitation-email'); + const result = await sendInvitationEmail({ + env: c.env, + email, + token, projectName, inviterName, - invitationUrl: magicLinkUrl, role, }); - - const safeProjectName = escapeHtml(projectName); - - const queueId = c.env.EMAIL_QUEUE.idFromName('default'); - const queue = c.env.EMAIL_QUEUE.get(queueId); - await queue.queueEmail({ - to: email, - subject: `You're Invited to "${safeProjectName}" - CoRATES`, - html: emailHtml, - text: emailText, - }); + emailQueued = result.emailQueued; } catch (err) { - console.error('Failed to queue invitation email:', err); + console.error('[Invitation] Magic link generation failed:', err); } return c.json( { success: true as const, invitation: true as const, - message: 'Invitation sent successfully', + message: emailQueued ? 'Invitation sent successfully' : 'Invitation created but email delivery may be delayed', email, }, 201, diff --git a/packages/workers/src/routes/orgs/invitations.ts b/packages/workers/src/routes/orgs/invitations.ts index 881cfd847..9347b3f40 100644 --- a/packages/workers/src/routes/orgs/invitations.ts +++ b/packages/workers/src/routes/orgs/invitations.ts @@ -545,117 +545,30 @@ orgInvitationRoutes.openapi(createInvitationRoute, async c => { .get(); // Send invitation email - try { - const envRecord = c.env as unknown as Record; - const appUrl = (c.env.APP_URL || 'https://corates.org') as string; - const basepath = (envRecord.BASEPATH as string | undefined) || ''; - const basepathNormalized = basepath ? basepath.replace(/\/$/, '') : ''; - const callbackPath = `${basepathNormalized}/complete-profile?invitation=${token}`; - const callbackURL = `${appUrl}${callbackPath}`; - - const authBaseUrl = (c.env.AUTH_BASE_URL || c.env.APP_URL || 'https://corates.org') as string; - let capturedMagicLinkUrl: string | null = null; - - const { betterAuth } = await import('better-auth'); - const { magicLink } = await import('better-auth/plugins'); - const { drizzleAdapter } = await import('better-auth/adapters/drizzle'); - const { drizzle } = await import('drizzle-orm/d1'); - const schema = await import('@/db/schema.js'); - const { MAGIC_LINK_EXPIRY_MINUTES } = await import('@/auth/emailTemplates.js'); - - const authSecret = c.env.AUTH_SECRET || (envRecord.SECRET as string | undefined); - if (!authSecret) { - throw createDomainError( - SYSTEM_ERRORS.INTERNAL_ERROR, - { key: 'AUTH_SECRET' }, - 'AUTH_SECRET must be configured', - ); - } - - const tempDb = drizzle(c.env.DB, { schema }); - const tempAuth = betterAuth({ - database: drizzleAdapter(tempDb, { - provider: 'sqlite', - schema: { - user: schema.user, - session: schema.session, - account: schema.account, - verification: schema.verification, - twoFactor: schema.twoFactor, - }, - }), - baseURL: authBaseUrl, - secret: authSecret, - plugins: [ - magicLink({ - sendMagicLink: async ({ url }) => { - capturedMagicLinkUrl = url; - }, - expiresIn: 60 * MAGIC_LINK_EXPIRY_MINUTES, - }), - ], - }); - - await tempAuth.api.signInMagicLink({ - body: { - email: email.toLowerCase(), - callbackURL: callbackURL, - newUserCallbackURL: callbackURL, - }, - headers: new Headers(), - }); - - if (!capturedMagicLinkUrl) { - throw createDomainError( - SYSTEM_ERRORS.INTERNAL_ERROR, - { service: 'magic-link' }, - 'Failed to generate magic link URL', - ); - } - - if (c.env.ENVIRONMENT !== 'production') { - console.log('[Email] Project invitation magic link URL:', capturedMagicLinkUrl); - } - - const { getProjectInvitationEmailHtml, getProjectInvitationEmailText } = - await import('@/auth/emailTemplates.js'); - const { escapeHtml } = await import('@/lib/escapeHtml.js'); + const projectName = project?.name || 'Unknown Project'; + const inviterName = inviter?.givenName || inviter?.name || inviter?.email || 'Someone'; - const projectName = project?.name || 'Unknown Project'; - const inviterName = inviter?.givenName || inviter?.name || inviter?.email || 'Someone'; - - const emailHtml = getProjectInvitationEmailHtml({ - projectName, - inviterName, - invitationUrl: capturedMagicLinkUrl, - role, - }); - const emailText = getProjectInvitationEmailText({ + let emailQueued = false; + try { + const { sendInvitationEmail } = await import('@/lib/send-invitation-email.js'); + const result = await sendInvitationEmail({ + env: c.env, + email, + token, projectName, inviterName, - invitationUrl: capturedMagicLinkUrl, role, }); - - const safeProjectName = escapeHtml(projectName); - - const queueId = c.env.EMAIL_QUEUE.idFromName('default'); - const queue = c.env.EMAIL_QUEUE.get(queueId); - await queue.queueEmail({ - to: email, - subject: `You're Invited to "${safeProjectName}" - CoRATES`, - html: emailHtml, - text: emailText, - }); + emailQueued = result.emailQueued; } catch (err) { - console.error('Failed to queue invitation email:', err); + console.error('[Invitation] Magic link generation failed:', err); } return c.json( { success: true, invitationId, - message: 'Invitation sent successfully', + message: emailQueued ? 'Invitation sent successfully' : 'Invitation created but email delivery may be delayed', email, }, 201, diff --git a/packages/workers/src/routes/orgs/members.ts b/packages/workers/src/routes/orgs/members.ts index beaf385bd..27bb328d4 100644 --- a/packages/workers/src/routes/orgs/members.ts +++ b/packages/workers/src/routes/orgs/members.ts @@ -767,117 +767,30 @@ async function handleInvitation( .get(); // Send invitation email - try { - const appUrl = c.env.APP_URL || 'http://localhost:8787'; - const envRecord = c.env as unknown as Record; - const basepath = envRecord.BASEPATH as string | undefined; - const basepathNormalized = basepath ? basepath.replace(/\/$/, '') : ''; - const callbackPath = `${basepathNormalized}/complete-profile?invitation=${token}`; - const callbackURL = `${appUrl}${callbackPath}`; - - const authBaseUrl = c.env.AUTH_BASE_URL || appUrl; - let capturedMagicLinkUrl: string | null = null; - - const { betterAuth } = await import('better-auth'); - const { magicLink } = await import('better-auth/plugins'); - const { drizzleAdapter } = await import('better-auth/adapters/drizzle'); - const { drizzle } = await import('drizzle-orm/d1'); - const schema = await import('@/db/schema.js'); - const { MAGIC_LINK_EXPIRY_MINUTES } = await import('@/auth/emailTemplates.js'); - - const authSecret = c.env.AUTH_SECRET || (envRecord.SECRET as string | undefined); - if (!authSecret) { - throw createDomainError( - SYSTEM_ERRORS.INTERNAL_ERROR, - { key: 'AUTH_SECRET' }, - 'AUTH_SECRET must be configured', - ); - } - - const tempDb = drizzle(c.env.DB, { schema }); - const tempAuth = betterAuth({ - database: drizzleAdapter(tempDb, { - provider: 'sqlite', - schema: { - user: schema.user, - session: schema.session, - account: schema.account, - verification: schema.verification, - twoFactor: schema.twoFactor, - }, - }), - baseURL: authBaseUrl, - secret: authSecret, - plugins: [ - magicLink({ - sendMagicLink: async ({ url }) => { - capturedMagicLinkUrl = url; - }, - expiresIn: 60 * MAGIC_LINK_EXPIRY_MINUTES, - }), - ], - }); - - await tempAuth.api.signInMagicLink({ - body: { - email: email.toLowerCase(), - callbackURL: callbackURL, - newUserCallbackURL: callbackURL, - }, - headers: new Headers(), - }); - - if (!capturedMagicLinkUrl) { - throw createDomainError( - SYSTEM_ERRORS.INTERNAL_ERROR, - { service: 'magic-link' }, - 'Failed to generate magic link URL', - ); - } - - if (c.env.ENVIRONMENT !== 'production') { - console.log('[Email] Project invitation magic link URL:', capturedMagicLinkUrl); - } + const projectName = project?.name || 'Unknown Project'; + const inviterName = inviter?.givenName || inviter?.name || inviter?.email || 'Someone'; - const { getProjectInvitationEmailHtml, getProjectInvitationEmailText } = - await import('@/auth/emailTemplates.js'); - const { escapeHtml } = await import('@/lib/escapeHtml.js'); - - const projectName = project?.name || 'Unknown Project'; - const inviterName = inviter?.givenName || inviter?.name || inviter?.email || 'Someone'; - - const emailHtml = getProjectInvitationEmailHtml({ - projectName, - inviterName, - invitationUrl: capturedMagicLinkUrl, - role, - }); - const emailText = getProjectInvitationEmailText({ + let emailQueued = false; + try { + const { sendInvitationEmail } = await import('@/lib/send-invitation-email.js'); + const result = await sendInvitationEmail({ + env: c.env, + email, + token, projectName, inviterName, - invitationUrl: capturedMagicLinkUrl, role, }); - - const safeProjectName = escapeHtml(projectName); - - const queueId = c.env.EMAIL_QUEUE.idFromName('default'); - const queue = c.env.EMAIL_QUEUE.get(queueId); - await queue.queueEmail({ - to: email, - subject: `You're Invited to "${safeProjectName}" - CoRATES`, - html: emailHtml, - text: emailText, - }); + emailQueued = result.emailQueued; } catch (err) { - console.error('Failed to queue invitation email:', err); + console.error('[Invitation] Magic link generation failed:', err); } return c.json( { success: true, invitation: true, - message: 'Invitation sent successfully', + message: emailQueued ? 'Invitation sent successfully' : 'Invitation created but email delivery may be delayed', email, }, 201, diff --git a/packages/workers/wrangler.jsonc b/packages/workers/wrangler.jsonc index e6793fa5c..bb5d9f1ed 100644 --- a/packages/workers/wrangler.jsonc +++ b/packages/workers/wrangler.jsonc @@ -18,6 +18,10 @@ { "tag": "v2", "new_sqlite_classes": ["EmailQueue"] + }, + { + "tag": "v3", + "deleted_classes": ["EmailQueue"] } ], @@ -31,10 +35,24 @@ { "name": "PROJECT_DOC", "class_name": "ProjectDoc" - }, + } + ] + }, + + // Cloudflare Queues for email delivery + "queues": { + "producers": [ { - "name": "EMAIL_QUEUE", - "class_name": "EmailQueue" + "queue": "corates-emails", + "binding": "EMAIL_QUEUE" + } + ], + "consumers": [ + { + "queue": "corates-emails", + "max_batch_size": 10, + "max_retries": 3, + "dead_letter_queue": "corates-emails-dlq" } ] }, @@ -158,10 +176,6 @@ { "name": "PROJECT_DOC", "class_name": "ProjectDoc" - }, - { - "name": "EMAIL_QUEUE", - "class_name": "EmailQueue" } ] }, @@ -173,8 +187,29 @@ { "tag": "v2", "new_sqlite_classes": ["EmailQueue"] + }, + { + "tag": "v3", + "deleted_classes": ["EmailQueue"] } - ] + ], + // Production email queue + "queues": { + "producers": [ + { + "queue": "corates-emails-prod", + "binding": "EMAIL_QUEUE" + } + ], + "consumers": [ + { + "queue": "corates-emails-prod", + "max_batch_size": 10, + "max_retries": 3, + "dead_letter_queue": "corates-emails-prod-dlq" + } + ] + } } } } From 11ef514665e44a3674d265f299d82b02b2ede88e Mon Sep 17 00:00:00 2001 From: GitHub Actions Date: Thu, 26 Feb 2026 16:51:18 +0000 Subject: [PATCH 2/9] Apply Prettier formatting --- packages/docs/STATUS.md | 16 ++++++------- .../docs/audits/prod-audit-2026-01-19-full.md | 12 +++++----- .../project/overview-tab/OverviewTab.jsx | 23 ++++++++++--------- .../rob2-reconcile/pages/PreliminaryPage.jsx | 6 ++++- .../workers/src/durable-objects/ProjectDoc.ts | 18 +++------------ .../src/durable-objects/UserSession.ts | 3 +-- packages/workers/src/routes/health.ts | 3 +-- packages/workers/src/routes/members.ts | 5 +++- .../workers/src/routes/orgs/invitations.ts | 5 +++- packages/workers/src/routes/orgs/members.ts | 5 +++- 10 files changed, 48 insertions(+), 48 deletions(-) diff --git a/packages/docs/STATUS.md b/packages/docs/STATUS.md index e0e8a5061..555c04ad1 100644 --- a/packages/docs/STATUS.md +++ b/packages/docs/STATUS.md @@ -97,14 +97,14 @@ This document tracks the current implementation status of CoRATES features and s ## Infrastructure -| System | Status | Notes | -| ------------------ | -------- | ----------------------------------- | -| Cloudflare Workers | Complete | Hono with OpenAPI support | -| Cloudflare D1 | Complete | SQLite database with Drizzle ORM | -| Cloudflare R2 | Complete | PDF storage | -| Durable Objects | Complete | ProjectDoc, UserSession | -| Email Queue | Complete | Cloudflare Queue + Postmark | -| GitHub Actions | Partial | Prettier check only | +| System | Status | Notes | +| ------------------ | -------- | -------------------------------- | +| Cloudflare Workers | Complete | Hono with OpenAPI support | +| Cloudflare D1 | Complete | SQLite database with Drizzle ORM | +| Cloudflare R2 | Complete | PDF storage | +| Durable Objects | Complete | ProjectDoc, UserSession | +| Email Queue | Complete | Cloudflare Queue + Postmark | +| GitHub Actions | Partial | Prettier check only | --- diff --git a/packages/docs/audits/prod-audit-2026-01-19-full.md b/packages/docs/audits/prod-audit-2026-01-19-full.md index 4b2112680..30bc64e01 100644 --- a/packages/docs/audits/prod-audit-2026-01-19-full.md +++ b/packages/docs/audits/prod-audit-2026-01-19-full.md @@ -89,12 +89,12 @@ packages/ ### Persistence Layer -| Store | Type | Purpose | -| --------------- | ---------------- | ---------------------------------------------------------- | -| D1 (SQLite) | Primary database | Users, sessions, orgs, projects, subscriptions | -| R2 | Object storage | PDF files, avatars | -| Durable Objects | Stateful workers | ProjectDoc (Y.js), UserSession (notifications) | -| Cloudflare Queue| Email delivery | Async email processing with retries and DLQ | +| Store | Type | Purpose | +| ---------------- | ---------------- | ---------------------------------------------- | +| D1 (SQLite) | Primary database | Users, sessions, orgs, projects, subscriptions | +| R2 | Object storage | PDF files, avatars | +| Durable Objects | Stateful workers | ProjectDoc (Y.js), UserSession (notifications) | +| Cloudflare Queue | Email delivery | Async email processing with retries and DLQ | ### External Services diff --git a/packages/web/src/components/project/overview-tab/OverviewTab.jsx b/packages/web/src/components/project/overview-tab/OverviewTab.jsx index 3006fd0bb..0ecd341fb 100644 --- a/packages/web/src/components/project/overview-tab/OverviewTab.jsx +++ b/packages/web/src/components/project/overview-tab/OverviewTab.jsx @@ -76,8 +76,7 @@ export default function OverviewTab() { const currentUserId = () => user()?.id; // Count non-owner org members (matches backend checkCollaboratorQuota) - const nonOwnerOrgMemberCount = () => - orgMembers().filter(m => m.role !== 'owner').length; + const nonOwnerOrgMemberCount = () => orgMembers().filter(m => m.role !== 'owner').length; // Check if can add more collaborators (quota check) const collaboratorQuotaInfo = createMemo(() => { @@ -301,15 +300,17 @@ export default function OverviewTab() { when={canAddMember()} fallback={ - ( - - - Invite - - )} /> + ( + + + Invite + + )} + /> Collaborator limit reached. Upgrade your plan to add more team members. diff --git a/packages/web/src/components/project/reconcile-tab/rob2-reconcile/pages/PreliminaryPage.jsx b/packages/web/src/components/project/reconcile-tab/rob2-reconcile/pages/PreliminaryPage.jsx index f2d7fd108..6ae465c59 100644 --- a/packages/web/src/components/project/reconcile-tab/rob2-reconcile/pages/PreliminaryPage.jsx +++ b/packages/web/src/components/project/reconcile-tab/rob2-reconcile/pages/PreliminaryPage.jsx @@ -302,7 +302,11 @@ export default function PreliminaryPage(props) { switch (type) { case 'select': return ( - + ); case 'aim': return ; diff --git a/packages/workers/src/durable-objects/ProjectDoc.ts b/packages/workers/src/durable-objects/ProjectDoc.ts index c16abe289..5d0a4b091 100644 --- a/packages/workers/src/durable-objects/ProjectDoc.ts +++ b/packages/workers/src/durable-objects/ProjectDoc.ts @@ -730,11 +730,7 @@ export class ProjectDoc extends DurableObject { await this.initializeDoc(); const attachment = ws.deserializeAttachment() as WebSocketAttachment | null; if (attachment && attachment.awarenessClientId != null && this.awareness) { - awarenessProtocol.removeAwarenessStates( - this.awareness, - [attachment.awarenessClientId], - ws, - ); + awarenessProtocol.removeAwarenessStates(this.awareness, [attachment.awarenessClientId], ws); } // Flush persistence if this was the last connection @@ -751,11 +747,7 @@ export class ProjectDoc extends DurableObject { await this.initializeDoc(); const attachment = ws.deserializeAttachment() as WebSocketAttachment | null; if (attachment && attachment.awarenessClientId != null && this.awareness) { - awarenessProtocol.removeAwarenessStates( - this.awareness, - [attachment.awarenessClientId], - ws, - ); + awarenessProtocol.removeAwarenessStates(this.awareness, [attachment.awarenessClientId], ws); } try { ws.close(1011, 'Internal error'); @@ -793,11 +785,7 @@ export class ProjectDoc extends DurableObject { for (const ws of userSockets) { const attachment = ws.deserializeAttachment() as WebSocketAttachment | null; if (attachment && attachment.awarenessClientId != null && this.awareness) { - awarenessProtocol.removeAwarenessStates( - this.awareness, - [attachment.awarenessClientId], - ws, - ); + awarenessProtocol.removeAwarenessStates(this.awareness, [attachment.awarenessClientId], ws); } if (ws.readyState === WebSocket.OPEN) { ws.close(closeCode, reason); diff --git a/packages/workers/src/durable-objects/UserSession.ts b/packages/workers/src/durable-objects/UserSession.ts index 946d767cd..d3f65a6c6 100644 --- a/packages/workers/src/durable-objects/UserSession.ts +++ b/packages/workers/src/durable-objects/UserSession.ts @@ -100,8 +100,7 @@ export class UserSession extends DurableObject { } if (!delivered) { - const pending = - (await this.ctx.storage.get('pendingNotifications')) || []; + const pending = (await this.ctx.storage.get('pendingNotifications')) || []; pending.push(notification); if (pending.length > 50) { pending.shift(); diff --git a/packages/workers/src/routes/health.ts b/packages/workers/src/routes/health.ts index 0d48198f7..a5e123e3e 100644 --- a/packages/workers/src/routes/health.ts +++ b/packages/workers/src/routes/health.ts @@ -120,8 +120,7 @@ health.openapi(healthRoute, async c => { // Check Durable Objects are available try { checks.services.durableObjects = { - status: - c.env.USER_SESSION && c.env.PROJECT_DOC ? 'healthy' : 'unhealthy', + status: c.env.USER_SESSION && c.env.PROJECT_DOC ? 'healthy' : 'unhealthy', type: 'Durable Objects', bindings: { USER_SESSION: !!c.env.USER_SESSION, diff --git a/packages/workers/src/routes/members.ts b/packages/workers/src/routes/members.ts index 2f78ca836..0bcf3e6e3 100644 --- a/packages/workers/src/routes/members.ts +++ b/packages/workers/src/routes/members.ts @@ -500,7 +500,10 @@ memberRoutes.openapi(addMemberRoute, async c => { { success: true as const, invitation: true as const, - message: emailQueued ? 'Invitation sent successfully' : 'Invitation created but email delivery may be delayed', + message: + emailQueued ? + 'Invitation sent successfully' + : 'Invitation created but email delivery may be delayed', email, }, 201, diff --git a/packages/workers/src/routes/orgs/invitations.ts b/packages/workers/src/routes/orgs/invitations.ts index 9347b3f40..685b528fc 100644 --- a/packages/workers/src/routes/orgs/invitations.ts +++ b/packages/workers/src/routes/orgs/invitations.ts @@ -568,7 +568,10 @@ orgInvitationRoutes.openapi(createInvitationRoute, async c => { { success: true, invitationId, - message: emailQueued ? 'Invitation sent successfully' : 'Invitation created but email delivery may be delayed', + message: + emailQueued ? + 'Invitation sent successfully' + : 'Invitation created but email delivery may be delayed', email, }, 201, diff --git a/packages/workers/src/routes/orgs/members.ts b/packages/workers/src/routes/orgs/members.ts index 27bb328d4..26083bf80 100644 --- a/packages/workers/src/routes/orgs/members.ts +++ b/packages/workers/src/routes/orgs/members.ts @@ -790,7 +790,10 @@ async function handleInvitation( { success: true, invitation: true, - message: emailQueued ? 'Invitation sent successfully' : 'Invitation created but email delivery may be delayed', + message: + emailQueued ? + 'Invitation sent successfully' + : 'Invitation created but email delivery may be delayed', email, }, 201, From a6c7c611b975797f9175ad6c6fc89cceb2c146f5 Mon Sep 17 00:00:00 2001 From: Jacob Maynard Date: Thu, 26 Feb 2026 11:02:19 -0600 Subject: [PATCH 3/9] update deps, fix sentry typing --- package.json | 4 +- packages/landing/package.json | 2 +- packages/mcp-memory/package.json | 4 +- packages/mcp/package.json | 4 +- packages/web/package.json | 58 +- packages/workers/package.json | 10 +- packages/workers/src/index.ts | 7 +- packages/workers/wrangler.jsonc | 1 - pnpm-lock.yaml | 1650 +++++++++++++++--------------- 9 files changed, 874 insertions(+), 866 deletions(-) diff --git a/package.json b/package.json index eb20a70cc..fbc253735 100644 --- a/package.json +++ b/package.json @@ -57,8 +57,8 @@ "eslint-plugin-unicorn": "^62.0.0", "prettier": "^3.8.1", "prettier-plugin-tailwindcss": "^0.7.2", - "turbo": "^2.8.10", - "wrangler": "^4.67.1" + "turbo": "^2.8.11", + "wrangler": "^4.69.0" }, "engines": { "node": ">=24.0.0", diff --git a/packages/landing/package.json b/packages/landing/package.json index b12e7f6f2..4e8258b58 100644 --- a/packages/landing/package.json +++ b/packages/landing/package.json @@ -17,7 +17,7 @@ "@corates/shared": "workspace:*", "@solidjs/meta": "^0.29.4", "@solidjs/router": "^0.15.4", - "@solidjs/start": "^1.3.0", + "@solidjs/start": "^1.3.2", "countup.js": "^2.9.0", "solid-icons": "^1.2.0", "solid-js": "^1.9.11", diff --git a/packages/mcp-memory/package.json b/packages/mcp-memory/package.json index 7c435ea8c..fd7f257f3 100644 --- a/packages/mcp-memory/package.json +++ b/packages/mcp-memory/package.json @@ -19,14 +19,14 @@ "test:watch": "vitest" }, "dependencies": { - "@modelcontextprotocol/sdk": "^1.26.0", + "@modelcontextprotocol/sdk": "^1.27.1", "@xenova/transformers": "^2.17.2", "better-sqlite3": "^11.10.0", "zod": "^4.3.6" }, "devDependencies": { "@types/better-sqlite3": "^7.6.13", - "@types/node": "^25.3.0", + "@types/node": "^25.3.1", "tsx": "^4.21.0", "typescript": "^5.9.3", "vitest": "^4.0.18" diff --git a/packages/mcp/package.json b/packages/mcp/package.json index def40a3bc..b5bf4c191 100644 --- a/packages/mcp/package.json +++ b/packages/mcp/package.json @@ -20,11 +20,11 @@ "test:watch": "vitest" }, "dependencies": { - "@modelcontextprotocol/sdk": "^1.26.0", + "@modelcontextprotocol/sdk": "^1.27.1", "zod": "^4.3.6" }, "devDependencies": { - "@types/node": "^25.3.0", + "@types/node": "^25.3.1", "tsx": "^4.21.0", "typescript": "^5.9.3", "vitest": "^4.0.18" diff --git a/packages/web/package.json b/packages/web/package.json index db357945f..491c23936 100644 --- a/packages/web/package.json +++ b/packages/web/package.json @@ -19,35 +19,35 @@ "dependencies": { "@ark-ui/solid": "^5.32.0", "@corates/shared": "workspace:*", - "@embedpdf/core": "^2.6.2", - "@embedpdf/engines": "^2.6.2", - "@embedpdf/models": "^2.6.2", - "@embedpdf/pdfium": "^2.6.2", - "@embedpdf/plugin-annotation": "^2.6.2", - "@embedpdf/plugin-capture": "^2.6.2", - "@embedpdf/plugin-commands": "^2.6.2", - "@embedpdf/plugin-document-manager": "^2.6.2", - "@embedpdf/plugin-export": "^2.6.2", - "@embedpdf/plugin-fullscreen": "^2.6.2", - "@embedpdf/plugin-history": "^2.6.2", - "@embedpdf/plugin-i18n": "^2.6.2", - "@embedpdf/plugin-interaction-manager": "^2.6.2", - "@embedpdf/plugin-pan": "^2.6.2", - "@embedpdf/plugin-print": "^2.6.2", - "@embedpdf/plugin-redaction": "^2.6.2", - "@embedpdf/plugin-render": "^2.6.2", - "@embedpdf/plugin-rotate": "^2.6.2", - "@embedpdf/plugin-scroll": "^2.6.2", - "@embedpdf/plugin-search": "^2.6.2", - "@embedpdf/plugin-selection": "^2.6.2", - "@embedpdf/plugin-spread": "^2.6.2", - "@embedpdf/plugin-thumbnail": "^2.6.2", - "@embedpdf/plugin-tiling": "^2.6.2", - "@embedpdf/plugin-ui": "^2.6.2", - "@embedpdf/plugin-view-manager": "^2.6.2", - "@embedpdf/plugin-viewport": "^2.6.2", - "@embedpdf/plugin-zoom": "^2.6.2", - "@sentry/solid": "^10.39.0", + "@embedpdf/core": "^2.7.0", + "@embedpdf/engines": "^2.7.0", + "@embedpdf/models": "^2.7.0", + "@embedpdf/pdfium": "^2.7.0", + "@embedpdf/plugin-annotation": "^2.7.0", + "@embedpdf/plugin-capture": "^2.7.0", + "@embedpdf/plugin-commands": "^2.7.0", + "@embedpdf/plugin-document-manager": "^2.7.0", + "@embedpdf/plugin-export": "^2.7.0", + "@embedpdf/plugin-fullscreen": "^2.7.0", + "@embedpdf/plugin-history": "^2.7.0", + "@embedpdf/plugin-i18n": "^2.7.0", + "@embedpdf/plugin-interaction-manager": "^2.7.0", + "@embedpdf/plugin-pan": "^2.7.0", + "@embedpdf/plugin-print": "^2.7.0", + "@embedpdf/plugin-redaction": "^2.7.0", + "@embedpdf/plugin-render": "^2.7.0", + "@embedpdf/plugin-rotate": "^2.7.0", + "@embedpdf/plugin-scroll": "^2.7.0", + "@embedpdf/plugin-search": "^2.7.0", + "@embedpdf/plugin-selection": "^2.7.0", + "@embedpdf/plugin-spread": "^2.7.0", + "@embedpdf/plugin-thumbnail": "^2.7.0", + "@embedpdf/plugin-tiling": "^2.7.0", + "@embedpdf/plugin-ui": "^2.7.0", + "@embedpdf/plugin-view-manager": "^2.7.0", + "@embedpdf/plugin-viewport": "^2.7.0", + "@embedpdf/plugin-zoom": "^2.7.0", + "@sentry/solid": "^10.40.0", "@solid-primitives/scheduled": "^1.5.3", "@solidjs/router": "^0.15.4", "@tanstack/solid-query": "^5.90.23", diff --git a/packages/workers/package.json b/packages/workers/package.json index d69215af8..341f6b629 100644 --- a/packages/workers/package.json +++ b/packages/workers/package.json @@ -31,16 +31,16 @@ }, "dependencies": { "@better-auth/stripe": "^1.4.19", - "@cloudflare/workers-types": "^4.20260302.0", + "@cloudflare/workers-types": "^4.20260305.0", "@corates/shared": "workspace:*", "@hono/zod-openapi": "^1.2.2", - "@sentry/cloudflare": "^10.39.0", + "@sentry/cloudflare": "^10.40.0", "better-auth": "^1.4.19", "drizzle-orm": "^0.45.1", - "hono": "^4.12.2", + "hono": "^4.12.3", "lib0": "^0.2.117", "postmark": "^4.0.7", - "stripe": "^20.3.1", + "stripe": "^20.4.0", "y-protocols": "^1.0.7", "yjs": "^13.6.29", "zod": "^4.3.6" @@ -53,6 +53,6 @@ "localflare": "^0.3.1", "typescript": "^5.9.3", "vitest": "3.2.0", - "wrangler": "^4.67.1" + "wrangler": "^4.69.0" } } diff --git a/packages/workers/src/index.ts b/packages/workers/src/index.ts index 4b447dcb5..e78e92315 100644 --- a/packages/workers/src/index.ts +++ b/packages/workers/src/index.ts @@ -381,11 +381,12 @@ export default Sentry.withSentry( { fetch: app.fetch, - // eslint-disable-next-line no-undef - async queue(batch: MessageBatch, env: Env): Promise { + async queue(batch, env: Env): Promise { const emailService = createEmailService(env); + // eslint-disable-next-line no-undef -- Cloudflare Workers global type + const messages = batch.messages as Message[]; - for (const msg of batch.messages) { + for (const msg of messages) { try { const result = await emailService.sendEmail( msg.body as Parameters[0], diff --git a/packages/workers/wrangler.jsonc b/packages/workers/wrangler.jsonc index bb5d9f1ed..40cd17422 100644 --- a/packages/workers/wrangler.jsonc +++ b/packages/workers/wrangler.jsonc @@ -25,7 +25,6 @@ } ], - // Durable Objects "durable_objects": { "bindings": [ { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e67f49b40..09dcdf562 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -45,11 +45,11 @@ importers: specifier: ^0.7.2 version: 0.7.2(prettier@3.8.1) turbo: - specifier: ^2.8.10 - version: 2.8.10 + specifier: ^2.8.11 + version: 2.8.11 wrangler: - specifier: ^4.67.1 - version: 4.67.1(@cloudflare/workers-types@4.20260302.0) + specifier: ^4.69.0 + version: 4.69.0(@cloudflare/workers-types@4.20260305.0) packages/docs: devDependencies: @@ -58,10 +58,10 @@ importers: version: 11.12.3 vitepress: specifier: ^1.6.4 - version: 1.6.4(@algolia/client-search@5.49.0)(@types/node@25.3.0)(axios@1.13.5)(change-case@5.4.4)(lightningcss@1.31.1)(postcss@8.5.6)(search-insights@2.17.3)(terser@5.46.0)(typescript@5.9.3) + version: 1.6.4(@algolia/client-search@5.49.1)(@types/node@25.3.1)(axios@1.13.5)(change-case@5.4.4)(lightningcss@1.31.1)(postcss@8.5.6)(search-insights@2.17.3)(terser@5.46.0)(typescript@5.9.3) vitepress-plugin-mermaid: specifier: ^2.0.17 - version: 2.0.17(mermaid@11.12.3)(vitepress@1.6.4(@algolia/client-search@5.49.0)(@types/node@25.3.0)(axios@1.13.5)(change-case@5.4.4)(lightningcss@1.31.1)(postcss@8.5.6)(search-insights@2.17.3)(terser@5.46.0)(typescript@5.9.3)) + version: 2.0.17(mermaid@11.12.3)(vitepress@1.6.4(@algolia/client-search@5.49.1)(@types/node@25.3.1)(axios@1.13.5)(change-case@5.4.4)(lightningcss@1.31.1)(postcss@8.5.6)(search-insights@2.17.3)(terser@5.46.0)(typescript@5.9.3)) packages/landing: dependencies: @@ -75,8 +75,8 @@ importers: specifier: ^0.15.4 version: 0.15.4(solid-js@1.9.11) '@solidjs/start': - specifier: ^1.3.0 - version: 1.3.0(@testing-library/jest-dom@6.9.1)(solid-js@1.9.11)(vinxi@0.5.11(@types/node@25.3.0)(better-sqlite3@12.6.2)(db0@0.3.4(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260302.0)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.6.2)(gel@2.2.0)(kysely@0.28.11)))(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260302.0)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.6.2)(gel@2.2.0)(kysely@0.28.11))(ioredis@5.9.3)(jiti@2.6.1)(lightningcss@1.31.1)(rolldown@1.0.0-beta.51)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)) + specifier: ^1.3.2 + version: 1.3.2(@testing-library/jest-dom@6.9.1)(solid-js@1.9.11)(vinxi@0.5.11(@types/node@25.3.1)(better-sqlite3@12.6.2)(db0@0.3.4(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260305.0)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.6.2)(gel@2.2.0)(kysely@0.28.11)))(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260305.0)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.6.2)(gel@2.2.0)(kysely@0.28.11))(ioredis@5.9.3)(jiti@2.6.1)(lightningcss@1.31.1)(rolldown@1.0.0-beta.51)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))(vite@7.3.1(@types/node@25.3.1)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)) countup.js: specifier: ^2.9.0 version: 2.9.0 @@ -88,11 +88,11 @@ importers: version: 1.9.11 vinxi: specifier: ^0.5.11 - version: 0.5.11(@types/node@25.3.0)(better-sqlite3@12.6.2)(db0@0.3.4(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260302.0)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.6.2)(gel@2.2.0)(kysely@0.28.11)))(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260302.0)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.6.2)(gel@2.2.0)(kysely@0.28.11))(ioredis@5.9.3)(jiti@2.6.1)(lightningcss@1.31.1)(rolldown@1.0.0-beta.51)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + version: 0.5.11(@types/node@25.3.1)(better-sqlite3@12.6.2)(db0@0.3.4(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260305.0)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.6.2)(gel@2.2.0)(kysely@0.28.11)))(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260305.0)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.6.2)(gel@2.2.0)(kysely@0.28.11))(ioredis@5.9.3)(jiti@2.6.1)(lightningcss@1.31.1)(rolldown@1.0.0-beta.51)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) devDependencies: '@tailwindcss/vite': specifier: ^4.2.1 - version: 4.2.1(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)) + version: 4.2.1(vite@7.3.1(@types/node@25.3.1)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)) tailwindcss: specifier: ^4.2.1 version: 4.2.1 @@ -100,15 +100,15 @@ importers: packages/mcp: dependencies: '@modelcontextprotocol/sdk': - specifier: ^1.26.0 - version: 1.26.0(zod@4.3.6) + specifier: ^1.27.1 + version: 1.27.1(zod@4.3.6) zod: specifier: ^4.3.6 version: 4.3.6 devDependencies: '@types/node': - specifier: ^25.3.0 - version: 25.3.0 + specifier: ^25.3.1 + version: 25.3.1 tsx: specifier: ^4.21.0 version: 4.21.0 @@ -117,13 +117,13 @@ importers: version: 5.9.3 vitest: specifier: ^4.0.18 - version: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.3.0)(@vitest/ui@4.0.18)(jiti@2.6.1)(jsdom@27.4.0(@noble/hashes@2.0.1))(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + version: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.3.1)(@vitest/ui@4.0.18)(jiti@2.6.1)(jsdom@27.4.0(@noble/hashes@2.0.1))(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) packages/mcp-memory: dependencies: '@modelcontextprotocol/sdk': - specifier: ^1.26.0 - version: 1.26.0(zod@4.3.6) + specifier: ^1.27.1 + version: 1.27.1(zod@4.3.6) '@xenova/transformers': specifier: ^2.17.2 version: 2.17.2 @@ -138,8 +138,8 @@ importers: specifier: ^7.6.13 version: 7.6.13 '@types/node': - specifier: ^25.3.0 - version: 25.3.0 + specifier: ^25.3.1 + version: 25.3.1 tsx: specifier: ^4.21.0 version: 4.21.0 @@ -148,7 +148,7 @@ importers: version: 5.9.3 vitest: specifier: ^4.0.18 - version: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.3.0)(@vitest/ui@4.0.18)(jiti@2.6.1)(jsdom@27.4.0(@noble/hashes@2.0.1))(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + version: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.3.1)(@vitest/ui@4.0.18)(jiti@2.6.1)(jsdom@27.4.0(@noble/hashes@2.0.1))(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) packages/shared: devDependencies: @@ -157,7 +157,7 @@ importers: version: 5.9.3 vitest: specifier: ^4.0.18 - version: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.3.0)(@vitest/ui@4.0.18)(jiti@2.6.1)(jsdom@27.4.0(@noble/hashes@2.0.1))(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + version: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.3.1)(@vitest/ui@4.0.18)(jiti@2.6.1)(jsdom@27.4.0(@noble/hashes@2.0.1))(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) packages/stripe-dev: devDependencies: @@ -174,92 +174,92 @@ importers: specifier: workspace:* version: link:../shared '@embedpdf/core': - specifier: ^2.6.2 - version: 2.6.2(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3)) + specifier: ^2.7.0 + version: 2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) '@embedpdf/engines': - specifier: ^2.6.2 - version: 2.6.2(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3)) + specifier: ^2.7.0 + version: 2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) '@embedpdf/models': - specifier: ^2.6.2 - version: 2.6.2 + specifier: ^2.7.0 + version: 2.7.0 '@embedpdf/pdfium': - specifier: ^2.6.2 - version: 2.6.2 + specifier: ^2.7.0 + version: 2.7.0 '@embedpdf/plugin-annotation': - specifier: ^2.6.2 - version: 2.6.2(ad1f116069e2875cbd7302042aaf58d3) + specifier: ^2.7.0 + version: 2.7.0(f91e72ac9819744cb003db79e9d0556d) '@embedpdf/plugin-capture': - specifier: ^2.6.2 - version: 2.6.2(@embedpdf/core@2.6.2(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3)))(@embedpdf/plugin-interaction-manager@2.6.2(@embedpdf/core@2.6.2(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3)))(@embedpdf/plugin-render@2.6.2(@embedpdf/core@2.6.2(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3)) + specifier: ^2.7.0 + version: 2.7.0(@embedpdf/core@2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(@embedpdf/plugin-interaction-manager@2.7.0(@embedpdf/core@2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(@embedpdf/plugin-render@2.7.0(@embedpdf/core@2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) '@embedpdf/plugin-commands': - specifier: ^2.6.2 - version: 2.6.2(@embedpdf/core@2.6.2(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3)) + specifier: ^2.7.0 + version: 2.7.0(@embedpdf/core@2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) '@embedpdf/plugin-document-manager': - specifier: ^2.6.2 - version: 2.6.2(@embedpdf/core@2.6.2(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3)) + specifier: ^2.7.0 + version: 2.7.0(@embedpdf/core@2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) '@embedpdf/plugin-export': - specifier: ^2.6.2 - version: 2.6.2(@embedpdf/core@2.6.2(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3)) + specifier: ^2.7.0 + version: 2.7.0(@embedpdf/core@2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) '@embedpdf/plugin-fullscreen': - specifier: ^2.6.2 - version: 2.6.2(@embedpdf/core@2.6.2(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3)) + specifier: ^2.7.0 + version: 2.7.0(@embedpdf/core@2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) '@embedpdf/plugin-history': - specifier: ^2.6.2 - version: 2.6.2(@embedpdf/core@2.6.2(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3)) + specifier: ^2.7.0 + version: 2.7.0(@embedpdf/core@2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) '@embedpdf/plugin-i18n': - specifier: ^2.6.2 - version: 2.6.2(@embedpdf/core@2.6.2(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3)) + specifier: ^2.7.0 + version: 2.7.0(@embedpdf/core@2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) '@embedpdf/plugin-interaction-manager': - specifier: ^2.6.2 - version: 2.6.2(@embedpdf/core@2.6.2(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3)) + specifier: ^2.7.0 + version: 2.7.0(@embedpdf/core@2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) '@embedpdf/plugin-pan': - specifier: ^2.6.2 - version: 2.6.2(@embedpdf/core@2.6.2(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3)))(@embedpdf/plugin-interaction-manager@2.6.2(@embedpdf/core@2.6.2(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3)))(@embedpdf/plugin-viewport@2.6.2(@embedpdf/core@2.6.2(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3)) + specifier: ^2.7.0 + version: 2.7.0(@embedpdf/core@2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(@embedpdf/plugin-interaction-manager@2.7.0(@embedpdf/core@2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(@embedpdf/plugin-viewport@2.7.0(@embedpdf/core@2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) '@embedpdf/plugin-print': - specifier: ^2.6.2 - version: 2.6.2(@embedpdf/core@2.6.2(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3)) + specifier: ^2.7.0 + version: 2.7.0(@embedpdf/core@2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) '@embedpdf/plugin-redaction': - specifier: ^2.6.2 - version: 2.6.2(d911e0a70829346636f03fe48bccf2b8) + specifier: ^2.7.0 + version: 2.7.0(5f456a3f53bec2768d3935038fafaf9c) '@embedpdf/plugin-render': - specifier: ^2.6.2 - version: 2.6.2(@embedpdf/core@2.6.2(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3)) + specifier: ^2.7.0 + version: 2.7.0(@embedpdf/core@2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) '@embedpdf/plugin-rotate': - specifier: ^2.6.2 - version: 2.6.2(@embedpdf/core@2.6.2(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3)) + specifier: ^2.7.0 + version: 2.7.0(@embedpdf/core@2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) '@embedpdf/plugin-scroll': - specifier: ^2.6.2 - version: 2.6.2(@embedpdf/core@2.6.2(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3)))(@embedpdf/plugin-viewport@2.6.2(@embedpdf/core@2.6.2(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3)) + specifier: ^2.7.0 + version: 2.7.0(@embedpdf/core@2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(@embedpdf/plugin-viewport@2.7.0(@embedpdf/core@2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) '@embedpdf/plugin-search': - specifier: ^2.6.2 - version: 2.6.2(@embedpdf/core@2.6.2(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3)) + specifier: ^2.7.0 + version: 2.7.0(@embedpdf/core@2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) '@embedpdf/plugin-selection': - specifier: ^2.6.2 - version: 2.6.2(@embedpdf/core@2.6.2(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3)))(@embedpdf/plugin-interaction-manager@2.6.2(@embedpdf/core@2.6.2(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3)) + specifier: ^2.7.0 + version: 2.7.0(@embedpdf/core@2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(@embedpdf/plugin-interaction-manager@2.7.0(@embedpdf/core@2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) '@embedpdf/plugin-spread': - specifier: ^2.6.2 - version: 2.6.2(@embedpdf/core@2.6.2(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3)) + specifier: ^2.7.0 + version: 2.7.0(@embedpdf/core@2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) '@embedpdf/plugin-thumbnail': - specifier: ^2.6.2 - version: 2.6.2(@embedpdf/core@2.6.2(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3)))(@embedpdf/plugin-render@2.6.2(@embedpdf/core@2.6.2(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3)) + specifier: ^2.7.0 + version: 2.7.0(@embedpdf/core@2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(@embedpdf/plugin-render@2.7.0(@embedpdf/core@2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) '@embedpdf/plugin-tiling': - specifier: ^2.6.2 - version: 2.6.2(60e3722d1129fa8e515c6cab2323c1cf) + specifier: ^2.7.0 + version: 2.7.0(5a96f8242ae086e623dd61223674fb9c) '@embedpdf/plugin-ui': - specifier: ^2.6.2 - version: 2.6.2(60e3722d1129fa8e515c6cab2323c1cf) + specifier: ^2.7.0 + version: 2.7.0(5a96f8242ae086e623dd61223674fb9c) '@embedpdf/plugin-view-manager': - specifier: ^2.6.2 - version: 2.6.2(@embedpdf/core@2.6.2(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3)) + specifier: ^2.7.0 + version: 2.7.0(@embedpdf/core@2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) '@embedpdf/plugin-viewport': - specifier: ^2.6.2 - version: 2.6.2(@embedpdf/core@2.6.2(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3)) + specifier: ^2.7.0 + version: 2.7.0(@embedpdf/core@2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) '@embedpdf/plugin-zoom': - specifier: ^2.6.2 - version: 2.6.2(b3109c7b9dc2ece1b638dcaeb87738a9) + specifier: ^2.7.0 + version: 2.7.0(68cdd6270a43970eb3cc490f0b97d81a) '@sentry/solid': - specifier: ^10.39.0 - version: 10.39.0(@solidjs/router@0.15.4(solid-js@1.9.11))(solid-js@1.9.11) + specifier: ^10.40.0 + version: 10.40.0(@solidjs/router@0.15.4(solid-js@1.9.11))(solid-js@1.9.11) '@solid-primitives/scheduled': specifier: ^1.5.3 version: 1.5.3(solid-js@1.9.11) @@ -274,7 +274,7 @@ importers: version: 8.21.3(solid-js@1.9.11) better-auth: specifier: ^1.4.19 - version: 1.4.19(better-sqlite3@12.6.2)(drizzle-kit@0.31.9)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260302.0)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.6.2)(gel@2.2.0)(kysely@0.28.11))(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(solid-js@1.9.11)(svelte@5.46.1)(vitest@4.0.18)(vue@3.5.28(typescript@5.9.3)) + version: 1.4.19(better-sqlite3@12.6.2)(drizzle-kit@0.31.9)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260305.0)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.6.2)(gel@2.2.0)(kysely@0.28.11))(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(solid-js@1.9.11)(svelte@5.46.1)(vitest@4.0.18)(vue@3.5.29(typescript@5.9.3)) chart.js: specifier: ^4.5.1 version: 4.5.1 @@ -320,13 +320,13 @@ importers: devDependencies: '@preact/preset-vite': specifier: ^2.10.3 - version: 2.10.3(@babel/core@7.29.0)(preact@10.28.4)(rollup@4.59.0)(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)) + version: 2.10.3(@babel/core@7.29.0)(preact@10.28.4)(rollup@4.59.0)(vite@7.3.1(@types/node@25.3.1)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)) '@solidjs/testing-library': specifier: ^0.8.10 version: 0.8.10(@solidjs/router@0.15.4(solid-js@1.9.11))(solid-js@1.9.11) '@tailwindcss/vite': specifier: ^4.2.1 - version: 4.2.1(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)) + version: 4.2.1(vite@7.3.1(@types/node@25.3.1)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)) '@tanstack/solid-query-devtools': specifier: ^5.91.3 version: 5.91.3(@tanstack/solid-query@5.90.23(solid-js@1.9.11))(solid-js@1.9.11) @@ -365,40 +365,40 @@ importers: version: 5.9.3 vite: specifier: ^7.3.1 - version: 7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + version: 7.3.1(@types/node@25.3.1)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) vite-plugin-solid: specifier: ^2.11.10 - version: 2.11.10(@testing-library/jest-dom@6.9.1)(solid-js@1.9.11)(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)) + version: 2.11.10(@testing-library/jest-dom@6.9.1)(solid-js@1.9.11)(vite@7.3.1(@types/node@25.3.1)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)) vitest: specifier: ^4.0.18 - version: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.3.0)(@vitest/ui@4.0.18)(jiti@2.6.1)(jsdom@27.4.0(@noble/hashes@2.0.1))(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + version: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.3.1)(@vitest/ui@4.0.18)(jiti@2.6.1)(jsdom@27.4.0(@noble/hashes@2.0.1))(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) packages/workers: dependencies: '@better-auth/stripe': specifier: ^1.4.19 - version: 1.4.19(@better-auth/core@1.4.19(@better-auth/utils@0.3.0)(@better-fetch/fetch@1.1.21)(better-call@1.1.8(zod@4.3.6))(jose@6.1.3)(kysely@0.28.11)(nanostores@1.1.0))(better-auth@1.4.19(better-sqlite3@12.6.2)(drizzle-kit@0.31.9)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260302.0)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.6.2)(gel@2.2.0)(kysely@0.28.11))(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(solid-js@1.9.11)(svelte@5.46.1)(vitest@3.2.0(@types/node@25.3.0)(jiti@2.6.1)(jsdom@27.4.0(@noble/hashes@2.0.1))(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))(vue@3.5.28(typescript@5.9.3)))(better-call@1.1.8(zod@4.3.6))(stripe@20.3.1(@types/node@25.3.0)) + version: 1.4.19(@better-auth/core@1.4.19(@better-auth/utils@0.3.0)(@better-fetch/fetch@1.1.21)(better-call@1.1.8(zod@4.3.6))(jose@6.1.3)(kysely@0.28.11)(nanostores@1.1.1))(better-auth@1.4.19(better-sqlite3@12.6.2)(drizzle-kit@0.31.9)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260305.0)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.6.2)(gel@2.2.0)(kysely@0.28.11))(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(solid-js@1.9.11)(svelte@5.46.1)(vitest@3.2.0(@types/node@25.3.1)(jiti@2.6.1)(jsdom@27.4.0(@noble/hashes@2.0.1))(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))(vue@3.5.29(typescript@5.9.3)))(better-call@1.1.8(zod@4.3.6))(stripe@20.4.0(@types/node@25.3.1)) '@cloudflare/workers-types': - specifier: ^4.20260302.0 - version: 4.20260302.0 + specifier: ^4.20260305.0 + version: 4.20260305.0 '@corates/shared': specifier: workspace:* version: link:../shared '@hono/zod-openapi': specifier: ^1.2.2 - version: 1.2.2(hono@4.12.2)(zod@4.3.6) + version: 1.2.2(hono@4.12.3)(zod@4.3.6) '@sentry/cloudflare': - specifier: ^10.39.0 - version: 10.39.0(@cloudflare/workers-types@4.20260302.0) + specifier: ^10.40.0 + version: 10.40.0(@cloudflare/workers-types@4.20260305.0) better-auth: specifier: ^1.4.19 - version: 1.4.19(better-sqlite3@12.6.2)(drizzle-kit@0.31.9)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260302.0)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.6.2)(gel@2.2.0)(kysely@0.28.11))(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(solid-js@1.9.11)(svelte@5.46.1)(vitest@3.2.0(@types/node@25.3.0)(jiti@2.6.1)(jsdom@27.4.0(@noble/hashes@2.0.1))(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))(vue@3.5.28(typescript@5.9.3)) + version: 1.4.19(better-sqlite3@12.6.2)(drizzle-kit@0.31.9)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260305.0)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.6.2)(gel@2.2.0)(kysely@0.28.11))(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(solid-js@1.9.11)(svelte@5.46.1)(vitest@3.2.0(@types/node@25.3.1)(jiti@2.6.1)(jsdom@27.4.0(@noble/hashes@2.0.1))(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))(vue@3.5.29(typescript@5.9.3)) drizzle-orm: specifier: ^0.45.1 - version: 0.45.1(@cloudflare/workers-types@4.20260302.0)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.6.2)(gel@2.2.0)(kysely@0.28.11) + version: 0.45.1(@cloudflare/workers-types@4.20260305.0)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.6.2)(gel@2.2.0)(kysely@0.28.11) hono: - specifier: ^4.12.2 - version: 4.12.2 + specifier: ^4.12.3 + version: 4.12.3 lib0: specifier: ^0.2.117 version: 0.2.117 @@ -406,8 +406,8 @@ importers: specifier: ^4.0.7 version: 4.0.7 stripe: - specifier: ^20.3.1 - version: 20.3.1(@types/node@25.3.0) + specifier: ^20.4.0 + version: 20.4.0(@types/node@25.3.1) y-protocols: specifier: ^1.0.7 version: 1.0.7(yjs@13.6.29) @@ -420,7 +420,7 @@ importers: devDependencies: '@cloudflare/vitest-pool-workers': specifier: ^0.11.1 - version: 0.11.1(@cloudflare/workers-types@4.20260302.0)(@vitest/runner@4.0.18)(@vitest/snapshot@4.0.18)(vitest@3.2.0(@types/node@25.3.0)(jiti@2.6.1)(jsdom@27.4.0(@noble/hashes@2.0.1))(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)) + version: 0.11.1(@cloudflare/workers-types@4.20260305.0)(@vitest/runner@4.0.18)(@vitest/snapshot@4.0.18)(vitest@3.2.0(@types/node@25.3.1)(jiti@2.6.1)(jsdom@27.4.0(@noble/hashes@2.0.1))(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)) better-sqlite3: specifier: ^12.6.2 version: 12.6.2 @@ -438,10 +438,10 @@ importers: version: 5.9.3 vitest: specifier: 3.2.0 - version: 3.2.0(@types/node@25.3.0)(jiti@2.6.1)(jsdom@27.4.0(@noble/hashes@2.0.1))(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + version: 3.2.0(@types/node@25.3.1)(jiti@2.6.1)(jsdom@27.4.0(@noble/hashes@2.0.1))(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) wrangler: - specifier: ^4.67.1 - version: 4.67.1(@cloudflare/workers-types@4.20260302.0) + specifier: ^4.69.0 + version: 4.69.0(@cloudflare/workers-types@4.20260305.0) packages: @@ -455,8 +455,8 @@ packages: resolution: {integrity: sha512-3NX/MpTdroi0aKz134A6RC2Gb2iXVECN4QaAXnvCIxxIm3C3AVB1mkUe8NaaiyvOpDfsrqWhYtj+Q6a62RrTsw==} engines: {node: '>=18'} - '@algolia/abtesting@1.15.0': - resolution: {integrity: sha512-D1QZ8dQx5zC9yrxNao9ER9bojmmzUdL1i2P9waIRiwnZ5fI26YswcCd6VHR/Q4W3PASfVf2My4YQ2FhGGDewTQ==} + '@algolia/abtesting@1.15.1': + resolution: {integrity: sha512-2yuIC48rUuHGhU1U5qJ9kJHaxYpJ0jpDHJVI5ekOxSMYXlH4+HP+pA31G820lsAznfmu2nzDV7n5RO44zIY1zw==} engines: {node: '>= 14.0.0'} '@algolia/autocomplete-core@1.17.7': @@ -479,56 +479,56 @@ packages: '@algolia/client-search': '>= 4.9.1 < 6' algoliasearch: '>= 4.9.1 < 6' - '@algolia/client-abtesting@5.49.0': - resolution: {integrity: sha512-Q1MSRhh4Du9WeLIl1S9O+BDUMaL01uuQtmzCyEzOBtu1xBDr3wvqrTJtfEceEkA5/Nw1BdGSHa6sDT3xTAF90A==} + '@algolia/client-abtesting@5.49.1': + resolution: {integrity: sha512-h6M7HzPin+45/l09q0r2dYmocSSt2MMGOOk5c4O5K/bBBlEwf1BKfN6z+iX4b8WXcQQhf7rgQwC52kBZJt/ZZw==} engines: {node: '>= 14.0.0'} - '@algolia/client-analytics@5.49.0': - resolution: {integrity: sha512-v50elhC80oyQw+8o8BwM+VvPuOo36+3W8VCfR4hsHoafQtGbMtP63U5eNcUydbVsM0py3JLoBaL1yKBK4L01sg==} + '@algolia/client-analytics@5.49.1': + resolution: {integrity: sha512-048T9/Z8OeLmTk8h76QUqaNFp7Rq2VgS2Zm6Y2tNMYGQ1uNuzePY/udB5l5krlXll7ZGflyCjFvRiOtlPZpE9g==} engines: {node: '>= 14.0.0'} - '@algolia/client-common@5.49.0': - resolution: {integrity: sha512-BDmVDtpDvymfLE5YQ2cPnfWJUVTDJqwpJa03Fsb7yJFJmbeKsUOGsnRkYsTbdzf0FfcvyvBB5zdcbrAIL249bg==} + '@algolia/client-common@5.49.1': + resolution: {integrity: sha512-vp5/a9ikqvf3mn9QvHN8PRekn8hW34aV9eX+O0J5mKPZXeA6Pd5OQEh2ZWf7gJY6yyfTlLp5LMFzQUAU+Fpqpg==} engines: {node: '>= 14.0.0'} - '@algolia/client-insights@5.49.0': - resolution: {integrity: sha512-lDCXsnZDx7zQ5GzSi1EL3l07EbksjrdpMgixFRCdi2QqeBe42HIQJfPPqdWtwrAXjORRopsPx2z+gGYJP/79Uw==} + '@algolia/client-insights@5.49.1': + resolution: {integrity: sha512-B6N7PgkvYrul3bntTz/l6uXnhQ2bvP+M7NqTcayh681tSqPaA5cJCUBp/vrP7vpPRpej4Eeyx2qz5p0tE/2N2g==} engines: {node: '>= 14.0.0'} - '@algolia/client-personalization@5.49.0': - resolution: {integrity: sha512-5k/KB+DsnesNKvMUEwTKSzExOf5zYbiPg7DVO7g1Y/+bhMb3wmxp9RFwfqwPfmoRTjptqvwhR6a0593tWVkmAw==} + '@algolia/client-personalization@5.49.1': + resolution: {integrity: sha512-v+4DN+lkYfBd01Hbnb9ZrCHe7l+mvihyx218INRX/kaCXROIWUDIT1cs3urQxfE7kXBFnLsqYeOflQALv/gA5w==} engines: {node: '>= 14.0.0'} - '@algolia/client-query-suggestions@5.49.0': - resolution: {integrity: sha512-pjHNcrdjn7p3RQ5Ql1Baiwfdn9bkS+z4gqONJJP8kuZFqYP8Olthy4G7fl5bCB29UjdUj5EWlaElQKCtPluCtQ==} + '@algolia/client-query-suggestions@5.49.1': + resolution: {integrity: sha512-Un11cab6ZCv0W+Jiak8UktGIqoa4+gSNgEZNfG8m8eTsXGqwIEr370H3Rqwj87zeNSlFpH2BslMXJ/cLNS1qtg==} engines: {node: '>= 14.0.0'} - '@algolia/client-search@5.49.0': - resolution: {integrity: sha512-uGv2P3lcviuaZy8ZOAyN60cZdhOVyjXwaDC27a1qdp3Pb5Azn+lLSJwkHU4TNRpphHmIei9HZuUxwQroujdPjw==} + '@algolia/client-search@5.49.1': + resolution: {integrity: sha512-Nt9hri7nbOo0RipAsGjIssHkpLMHHN/P7QqENywAq5TLsoYDzUyJGny8FEiD/9KJUxtGH8blGpMedilI6kK3rA==} engines: {node: '>= 14.0.0'} - '@algolia/ingestion@1.49.0': - resolution: {integrity: sha512-sH10mftYlmvfGbvAgTtHYbCIstmNUdiAkX//0NAyBcJRB6NnZmNsdLxdFGbE8ZqlGXzoe0zcUIau+DxKpXtqCw==} + '@algolia/ingestion@1.49.1': + resolution: {integrity: sha512-b5hUXwDqje0Y4CpU6VL481DXgPgxpTD5sYMnfQTHKgUispGnaCLCm2/T9WbJo1YNUbX3iHtYDArp804eD6CmRQ==} engines: {node: '>= 14.0.0'} - '@algolia/monitoring@1.49.0': - resolution: {integrity: sha512-RqhGcVVxLpK+lA0GZKywlQIXsI704flc12nv/hOdrwiuk/Uyhxs46KLM4ngip7wutU+7t0PYZWiVayrqBPN/ZQ==} + '@algolia/monitoring@1.49.1': + resolution: {integrity: sha512-bvrXwZ0WsL3rN6Q4m4QqxsXFCo6WAew7sAdrpMQMK4Efn4/W920r9ptOuckejOSSvyLr9pAWgC5rsHhR2FYuYw==} engines: {node: '>= 14.0.0'} - '@algolia/recommend@5.49.0': - resolution: {integrity: sha512-kg8omGRvmIPhhqtUqSIpS3regFKWuoWh3WqyUhGk27N4T7q8I++8TsDYsV8vK7oBEzw706m2vUBtN5fw2fDjmw==} + '@algolia/recommend@5.49.1': + resolution: {integrity: sha512-h2yz3AGeGkQwNgbLmoe3bxYs8fac4An1CprKTypYyTU/k3Q+9FbIvJ8aS1DoBKaTjSRZVoyQS7SZQio6GaHbZw==} engines: {node: '>= 14.0.0'} - '@algolia/requester-browser-xhr@5.49.0': - resolution: {integrity: sha512-BaZ6NTI9VdSbDcsMucdKhTuFFxv6B+3dAZZBozX12fKopYsELh7dBLfZwm8evDCIicmNjIjobi4VNnNshrCSuw==} + '@algolia/requester-browser-xhr@5.49.1': + resolution: {integrity: sha512-2UPyRuUR/qpqSqH8mxFV5uBZWEpxhGPHLlx9Xf6OVxr79XO2ctzZQAhsmTZ6X22x+N8MBWpB9UEky7YU2HGFgA==} engines: {node: '>= 14.0.0'} - '@algolia/requester-fetch@5.49.0': - resolution: {integrity: sha512-2nxISxS5xO5DLAj6QzMImgJv6CqpZhJVkhcTFULESR/k4IpbkJTEHmViVTxw9MlrU8B5GfwHevFd7vKL3a7MXQ==} + '@algolia/requester-fetch@5.49.1': + resolution: {integrity: sha512-N+xlE4lN+wpuT+4vhNEwPVlrfN+DWAZmSX9SYhbz986Oq8AMsqdntOqUyiOXVxYsQtfLwmiej24vbvJGYv1Qtw==} engines: {node: '>= 14.0.0'} - '@algolia/requester-node-http@5.49.0': - resolution: {integrity: sha512-S/B94C6piEUXGpN3y5ysmNKMEqdfNVAXYY+FxivEAV5IGJjbEuLZfT8zPPZUWGw9vh6lgP80Hye2G5aVBNIa8Q==} + '@algolia/requester-node-http@5.49.1': + resolution: {integrity: sha512-zA5bkUOB5PPtTr182DJmajCiizHp0rCJQ0Chf96zNFvkdESKYlDeYA3tQ7r2oyHbu/8DiohAQ5PZ85edctzbXA==} engines: {node: '>= 14.0.0'} '@antfu/install-pkg@1.1.0': @@ -753,8 +753,8 @@ packages: cpu: [x64] os: [darwin] - '@cloudflare/workerd-darwin-64@1.20260302.0': - resolution: {integrity: sha512-cGtxPByeVrgoqxbmd8qs631wuGwf8yTm/FY44dEW4HdoXrb5jhlE4oWYHFafedkQCvGjY1Vbs3puAiKnuMxTXQ==} + '@cloudflare/workerd-darwin-64@1.20260305.0': + resolution: {integrity: sha512-chhKOpymo0Eh9J3nymrauMqKGboCc4uz/j0gA1G4gioMnKsN2ZDKJ+qjRZDnCoVGy8u2C4pxlmyIfsXCAfIzhQ==} engines: {node: '>=16'} cpu: [x64] os: [darwin] @@ -765,8 +765,8 @@ packages: cpu: [arm64] os: [darwin] - '@cloudflare/workerd-darwin-arm64@1.20260302.0': - resolution: {integrity: sha512-WRGqV6RNXM3xoQblJJw1EHKwx9exyhB18cdnToSCUFPObFhk3fzMLoQh7S+nUHUpto6aUrXPVj6R/4G3UPjCxw==} + '@cloudflare/workerd-darwin-arm64@1.20260305.0': + resolution: {integrity: sha512-K9aG2OQk5bBfOP+fyGPqLcqZ9OR3ra6uwnxJ8f2mveq2A2LsCI7ZeGxQiAj75Ti80ytH/gJffZIx4Np2JtU3aQ==} engines: {node: '>=16'} cpu: [arm64] os: [darwin] @@ -777,8 +777,8 @@ packages: cpu: [x64] os: [linux] - '@cloudflare/workerd-linux-64@1.20260302.0': - resolution: {integrity: sha512-gG423mtUjrmlQT+W2+KisLc6qcGcBLR+QcK5x1gje3bu/dF3oNiYuqY7o58A+sQk6IB849UC4UyNclo1RhP2xw==} + '@cloudflare/workerd-linux-64@1.20260305.0': + resolution: {integrity: sha512-tt7XUoIw/cYFeGbkPkcZ6XX1aZm26Aju/4ih+DXxOosbBeGshFSrNJDBfAKKOvkjsAZymJ+WWVDBU+hmNaGfwA==} engines: {node: '>=16'} cpu: [x64] os: [linux] @@ -789,8 +789,8 @@ packages: cpu: [arm64] os: [linux] - '@cloudflare/workerd-linux-arm64@1.20260302.0': - resolution: {integrity: sha512-7M25noGI4WlSBOhrIaY8xZrnn87OQKtJg9YWAO2EFqGjF1Su5QXGaLlQVF4fAKbqTywbHnI8BAuIsIlUSNkhCg==} + '@cloudflare/workerd-linux-arm64@1.20260305.0': + resolution: {integrity: sha512-72QTkY5EzylmvCZ8ZTrnJ9DctmQsfSof1OKyOWqu/pv/B2yACfuPMikq8RpPxvVu7hhS0ztGP6ZvXz72Htq4Zg==} engines: {node: '>=16'} cpu: [arm64] os: [linux] @@ -801,14 +801,14 @@ packages: cpu: [x64] os: [win32] - '@cloudflare/workerd-windows-64@1.20260302.0': - resolution: {integrity: sha512-jK1L3ADkiWxFzlqZTq2iHW1Bd2Nzu1fmMWCGZw4sMZ2W1B2WCm2wHwO2SX/py4BgylyEN3wuF+5zagbkNKht9A==} + '@cloudflare/workerd-windows-64@1.20260305.0': + resolution: {integrity: sha512-BA0uaQPOaI2F6mJtBDqplGnQQhpXCzwEMI33p/TnDxtSk9u8CGIfBFuI6uqo8mJ6ijIaPjeBLGOn2CiRMET4qg==} engines: {node: '>=16'} cpu: [x64] os: [win32] - '@cloudflare/workers-types@4.20260302.0': - resolution: {integrity: sha512-mbFRnlu1lNCScMpXZk/X/uBPufYx5OSbq+euGonGRcY+DgOwm2kczGdK401rUh52NB0fFMEcOy/zqwxv7CdDNA==} + '@cloudflare/workers-types@4.20260305.0': + resolution: {integrity: sha512-sCgPFnQ03SVpC2OVW8wysONLZW/A8hlp9Mq2ckG/h1oId4kr9NawA6vUiOmOjCWRn2hIohejBYVQ+Vu20rCdKA==} '@cspotcode/source-map-support@0.8.1': resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} @@ -877,8 +877,8 @@ packages: '@drizzle-team/brocli@0.10.2': resolution: {integrity: sha512-z33Il7l5dKjUgGULTqBsQBQwckHh5AbIuxhdsIxDDiZAzBOrZO6q9ogcWC65kU382AfynTfgNumVcNIjuIua6w==} - '@embedpdf/core@2.6.2': - resolution: {integrity: sha512-HTy2B7Q5hlNqtYo6lIudwycekG4x/iTESq05uYqENkvTclcZkzebnNirPPPPRcf3oT/u6Qvfj4mkx3z7wTSNUA==} + '@embedpdf/core@2.7.0': + resolution: {integrity: sha512-dJ9pCWXVJxh6uSJP4sKuJP4v67+6Vlmw4WqJcv+CKJSUPdX9LhOSTIgTjwKLZ5zXo0c3DihNvrUupovb/DrhgQ==} peerDependencies: preact: ^10.26.4 react: '>=16.8.0' @@ -886,8 +886,8 @@ packages: svelte: '>=5 <6' vue: '>=3.2.0' - '@embedpdf/engines@2.6.2': - resolution: {integrity: sha512-ZyyMVqZ8bnTNmgAziLhNywKhafVFbtLuC5AGcQqlAOQfyZqOWd240FdDGViQXAq4sfSp/NopirvIUtAKHoIrtg==} + '@embedpdf/engines@2.7.0': + resolution: {integrity: sha512-9BW/0f1EhMtklOXzpq+TtAELpXrvWcgCioFX9tSvPXBwWw/xva9c3UFx8NKehfrAkmcLGNz2c2Kqe8hDlKp9Rw==} peerDependencies: preact: ^10.26.4 react: '>=16.8.0' @@ -916,276 +916,276 @@ packages: '@embedpdf/fonts-tc@1.0.0': resolution: {integrity: sha512-rGZJbVD6DYS5BbXdpEMnWkpVF0Knar+bsiyb2o3+YRx7O8eyFubEBQUSUInirQk69HA6fc3GhYCg7TyC/oD76Q==} - '@embedpdf/models@2.6.2': - resolution: {integrity: sha512-4mr1PIS5qR+HLKroUn9iU8qj+s/vptj82non94Ei0P6/yGG6GHv/E1lfALvd8rZ3FfHuF6V7Pa4SxS2WFDecYg==} + '@embedpdf/models@2.7.0': + resolution: {integrity: sha512-SRtDqYUn6Qw677ECIyipg0qqZR0+iLUU1mGI/X70ad4/qhw+TAOF5/aWddoFdPAw5XviEYVw5zR0oTz+MLBUbw==} - '@embedpdf/pdfium@2.6.2': - resolution: {integrity: sha512-LXqS+fSCQT1226X+XdrT6p0V2WR2cTDO3JzUix2v+9kl8IvlVfTWjkT5LVrOyS1poCsuySzd2GHz8jEweETgoQ==} + '@embedpdf/pdfium@2.7.0': + resolution: {integrity: sha512-PW6JnbBERvRKVrBzeCH/iGorQ8OTTRwr8rciyv2Kstqf3IdIFHjjNWvl6exK1/3K5wbbxYnHSNpRotl0OcsFJA==} - '@embedpdf/plugin-annotation@2.6.2': - resolution: {integrity: sha512-3rOqty+jTzJu3fUvNPsaM2SmeV6K2J/DkzdgBZNVV3neahEl9v1DTJEkAxCgLI/fj6wBXEkJrKmmtDGoDlvVAg==} + '@embedpdf/plugin-annotation@2.7.0': + resolution: {integrity: sha512-bkn9+91XfcFoKgwZ0kiJLbnvWNyrorhcbX5grsvUw2gJ8mL0RtwHSnCjZVT3WOPleQVwnNkBZUHefJhNT+LEKw==} peerDependencies: - '@embedpdf/core': 2.6.2 - '@embedpdf/plugin-history': 2.6.2 - '@embedpdf/plugin-interaction-manager': 2.6.2 - '@embedpdf/plugin-selection': 2.6.2 + '@embedpdf/core': 2.7.0 + '@embedpdf/plugin-history': 2.7.0 + '@embedpdf/plugin-interaction-manager': 2.7.0 + '@embedpdf/plugin-selection': 2.7.0 preact: ^10.26.4 react: '>=16.8.0' react-dom: '>=16.8.0' svelte: '>=5 <6' vue: '>=3.2.0' - '@embedpdf/plugin-capture@2.6.2': - resolution: {integrity: sha512-gnm6ZCO4tAsCtqeqVRdXEUlnVcK6FksYaYlkHhA861ECOMf9s9iQxNueQqyTIK+wF28KlGR12wkO0oibc2WN2A==} + '@embedpdf/plugin-capture@2.7.0': + resolution: {integrity: sha512-QTxry0aKt/DEWkqSde2gay9EqVJ2XPY9tYMkbI0bkRGVNcM/P+Z7id2S0z883Sx/D440QR5htOIIsnBXKKolTw==} peerDependencies: - '@embedpdf/core': 2.6.2 - '@embedpdf/plugin-interaction-manager': 2.6.2 - '@embedpdf/plugin-render': 2.6.2 + '@embedpdf/core': 2.7.0 + '@embedpdf/plugin-interaction-manager': 2.7.0 + '@embedpdf/plugin-render': 2.7.0 preact: ^10.26.4 react: '>=16.8.0' react-dom: '>=16.8.0' svelte: '>=5 <6' vue: '>=3.2.0' - '@embedpdf/plugin-commands@2.6.2': - resolution: {integrity: sha512-dcDh86GuhN6Wm0K/2NFJs7oDVxg659zgKR3HY0VqzozvUFlRJc0yj6FaK0ASRUqsxaWhoNvc/DeuWClhBOcT9Q==} + '@embedpdf/plugin-commands@2.7.0': + resolution: {integrity: sha512-Vx+yx0wWLa74KeSRsfymEclXyt8XmcBuSOVDnnOl9UoUGaksggOngB3Nt8kAePZE0Na6NggYRZ2jYS7U0XoLqA==} peerDependencies: - '@embedpdf/core': 2.6.2 + '@embedpdf/core': 2.7.0 preact: ^10.26.4 react: '>=16.8.0' react-dom: '>=16.8.0' svelte: '>=5 <6' vue: '>=3.2.0' - '@embedpdf/plugin-document-manager@2.6.2': - resolution: {integrity: sha512-5oEDv4qXelyvCy9vOtNUZkMlS/sh5RtrSTG968T+km2/UijQ37AZO/h/Py5X5S0JOqZVkRhX5tXeXVn2K5NiHg==} + '@embedpdf/plugin-document-manager@2.7.0': + resolution: {integrity: sha512-eKM0MEUCPZmNkOkz5n6QWBcKN7m1c3RBZlfXB7faHBaScPyO3f+xgfipAht86UvfYwxT9BWk9ozbAtm2UPBHcQ==} peerDependencies: - '@embedpdf/core': 2.6.2 + '@embedpdf/core': 2.7.0 preact: ^10.26.4 react: '>=16.8.0' react-dom: '>=16.8.0' svelte: '>=5 <6' vue: '>=3.2.0' - '@embedpdf/plugin-export@2.6.2': - resolution: {integrity: sha512-lgbVVkHgSMwsUCn+1hpu1Ic6KQvfQlEwdHovAXzyrjvk2oqbQytRJbXL3bQsZWFFg6nqsIUb/4jwJwn/+n/yig==} + '@embedpdf/plugin-export@2.7.0': + resolution: {integrity: sha512-wlP/ZdWPLCnJpsQWNCyZAlicvNiapbo7Dc95HMWHg2YgmkCjDe26z4C1QoubUanNSerGWJCK0qKXxJ/PVkJSnw==} peerDependencies: - '@embedpdf/core': 2.6.2 + '@embedpdf/core': 2.7.0 preact: ^10.26.4 react: '>=16.8.0' react-dom: '>=16.8.0' svelte: '>=5 <6' vue: '>=3.2.0' - '@embedpdf/plugin-fullscreen@2.6.2': - resolution: {integrity: sha512-Le4U/d/AsDjRtEZKMJOf+dQJOYVyZBMYcHFbt/yMzqq5b32iSIi5bYuPrlBbfFBseV+Qj3s1I4/Cnb8PBQUhBQ==} + '@embedpdf/plugin-fullscreen@2.7.0': + resolution: {integrity: sha512-KtsRybA6GAuxkggyW22f/PfA6jLWYeuSLLe/SPS8oYDElEszYZoprbpE3Fz30Wuu111VD0h4sS27kOXrAQjI1Q==} peerDependencies: - '@embedpdf/core': 2.6.2 + '@embedpdf/core': 2.7.0 preact: ^10.26.4 react: '>=16.8.0' react-dom: '>=16.8.0' svelte: '>=5 <6' vue: '>=3.2.0' - '@embedpdf/plugin-history@2.6.2': - resolution: {integrity: sha512-MpTrxtNXjpdjUlmV+HnmPe9Abb/DX3k42JfFLwPhCXlF0BBuJnu300lb0qtZ02WXj8380/uL17Wb7ebSoVqIjA==} + '@embedpdf/plugin-history@2.7.0': + resolution: {integrity: sha512-k2c5M2Nwey+j6EtZyf5Sw+cuyNT4MTWdqPQGR9NbmZUiNnkSrg/TmPWZCyaXZKGRjLmoJocc0qRdyaZnaaTpqw==} peerDependencies: - '@embedpdf/core': 2.6.2 + '@embedpdf/core': 2.7.0 preact: ^10.26.4 react: '>=16.8.0' react-dom: '>=16.8.0' svelte: '>=5 <6' vue: '>=3.2.0' - '@embedpdf/plugin-i18n@2.6.2': - resolution: {integrity: sha512-xww5MNgTG/9i/XRMuPTMEUe3e5keFBOTe2U3jNBjJGnV+KplOmuTWIn7WxpnuL5RffB9NHnvT8Gexw1CH/hc0Q==} + '@embedpdf/plugin-i18n@2.7.0': + resolution: {integrity: sha512-LExw6+JSR7q3Cp7WxaVBhjmiYXmf7F9bes2Nm1Uje5WqmqAFVabY7Bl1+gA9vfX/vMeir1LL4NGOjo61DMMaYQ==} peerDependencies: - '@embedpdf/core': 2.6.2 + '@embedpdf/core': 2.7.0 preact: ^10.26.4 react: '>=16.8.0' react-dom: '>=16.8.0' svelte: '>=5 <6' vue: '>=3.2.0' - '@embedpdf/plugin-interaction-manager@2.6.2': - resolution: {integrity: sha512-7LP7rMDDRWqojQb4E9/S1tWPp+fRfqTvHbb4kgMo14umTK26XWw/xazwf1UxchAruOTC5qjhraH4Bug0MoVyyQ==} + '@embedpdf/plugin-interaction-manager@2.7.0': + resolution: {integrity: sha512-IfJiugr2k9VD8/gryMb22wC5yk4EQwSS3/Co0EdOhzkmkGSgUHA/KcG83WBu8wPEtj5Gwy473xe41fYKsGMlsA==} peerDependencies: - '@embedpdf/core': 2.6.2 + '@embedpdf/core': 2.7.0 preact: ^10.26.4 react: '>=16.8.0' react-dom: '>=16.8.0' svelte: '>=5 <6' vue: '>=3.2.0' - '@embedpdf/plugin-pan@2.6.2': - resolution: {integrity: sha512-bqzGdr7fSuN0SPDKeaTr2MX24tB2rtoNyrGWZ2kOjuMUMQnNwcrBjK8XbWRjL7tcPLObGOR8vXwzt+hbSfZ3ig==} + '@embedpdf/plugin-pan@2.7.0': + resolution: {integrity: sha512-/jUyM4K42gd7eoVsKFDSfN4t8CHIf6ZX7kU4BHBBFvOcNB7bToOvibPiznC4oPrHmOuzcs4e+VOfu+yHKn6DrA==} peerDependencies: - '@embedpdf/core': 2.6.2 - '@embedpdf/plugin-interaction-manager': 2.6.2 - '@embedpdf/plugin-viewport': 2.6.2 + '@embedpdf/core': 2.7.0 + '@embedpdf/plugin-interaction-manager': 2.7.0 + '@embedpdf/plugin-viewport': 2.7.0 preact: ^10.26.4 react: '>=16.8.0' react-dom: '>=16.8.0' svelte: '>=5 <6' vue: '>=3.2.0' - '@embedpdf/plugin-print@2.6.2': - resolution: {integrity: sha512-PaHl3h2eqMfzo6eviLvZuEGhAaZH877iF1RDTq1HAxpFgWeNKaJV3YcODDkSZwDzJW44jczTVstcEdN5Hk1b/w==} + '@embedpdf/plugin-print@2.7.0': + resolution: {integrity: sha512-sQqRSCN+r59EjKibQ3yMt1lKyHMxO1UqhZ6iI+w5hUBm9yTIHvkQRTVbawbkCfty8QNldjMQEwN3iYkf8LNHsg==} peerDependencies: - '@embedpdf/core': 2.6.2 + '@embedpdf/core': 2.7.0 preact: ^10.26.4 react: '>=18.0.0' react-dom: '>=18.0.0' svelte: '>=5 <6' vue: '>=3.2.0' - '@embedpdf/plugin-redaction@2.6.2': - resolution: {integrity: sha512-ASQdGAlAbpUY8kSvmSIRXpBRasjBEZXnPGhMsjHtYJgrLGeWeGfd18StH54TVaykYScu8gwI8XdzZJEnfM89GQ==} + '@embedpdf/plugin-redaction@2.7.0': + resolution: {integrity: sha512-N6LD9k35ZCkpHPDW5I6pW6g/YTDXGuNp/kWTHU4bcRGfTwinu6i0PaFJQKus1t1pkVprhmjJgCXbkM2xmIKXAg==} peerDependencies: - '@embedpdf/core': 2.6.2 - '@embedpdf/plugin-annotation': 2.6.2 - '@embedpdf/plugin-history': 2.6.2 - '@embedpdf/plugin-interaction-manager': 2.6.2 - '@embedpdf/plugin-selection': 2.6.2 + '@embedpdf/core': 2.7.0 + '@embedpdf/plugin-annotation': 2.7.0 + '@embedpdf/plugin-history': 2.7.0 + '@embedpdf/plugin-interaction-manager': 2.7.0 + '@embedpdf/plugin-selection': 2.7.0 preact: ^10.26.4 react: '>=16.8.0' react-dom: '>=16.8.0' svelte: '>=5 <6' vue: '>=3.2.0' - '@embedpdf/plugin-render@2.6.2': - resolution: {integrity: sha512-6WK8kCNBxTHrjRPbLHQaou9ZrpaFW2f56Uu+zKbqXCD+tV7d8T9WAVQuqDJrWxjrUXUjWy1RC+KEBMGCftIHWA==} + '@embedpdf/plugin-render@2.7.0': + resolution: {integrity: sha512-qJcBxl2Kgqbw/Yb4qiX3qNsBKmzI8ijAKix3PoYL+nlhX6iFbcCkUbJgF0rPCBbhIy59Bpp7eJL+RyY5DhQvUg==} peerDependencies: - '@embedpdf/core': 2.6.2 + '@embedpdf/core': 2.7.0 preact: ^10.26.4 react: '>=16.8.0' react-dom: '>=16.8.0' svelte: '>=5 <6' vue: '>=3.2.0' - '@embedpdf/plugin-rotate@2.6.2': - resolution: {integrity: sha512-g9JUMbIEm91igKIVe8tmccHDI0jBtcYzaaHupyL2bQBByU+Zyz12k2FKbVn+sx0ppk8tYAbyAxeNkB/jNpQh2w==} + '@embedpdf/plugin-rotate@2.7.0': + resolution: {integrity: sha512-ggqhQzpJB7ydfx9fDcuUrlGS9wxfsLG+rQwf1MMmUMMdEK1NPsHw5abSuQBerAm1vrpZ3Dyz0v2TxPVejvIhjA==} peerDependencies: - '@embedpdf/core': 2.6.2 + '@embedpdf/core': 2.7.0 preact: ^10.26.4 react: '>=16.8.0' react-dom: '>=16.8.0' svelte: '>=5 <6' vue: '>=3.2.0' - '@embedpdf/plugin-scroll@2.6.2': - resolution: {integrity: sha512-jshTwq69zvotGWMTDdxY+EYR/FBxPfu15fVo6YgYTSjUFm6IJL2z4XIvCB5pdHHHwXV1gTpi8W4FV3/2LXCjnA==} + '@embedpdf/plugin-scroll@2.7.0': + resolution: {integrity: sha512-uEs5XdHZ3XqH3OWnM8E2eHen+7+MxK9SrlBnfM8ZcPkzHR9n7hT/Aqy05BiLKxKem585HvtbRgFzNQZqmNIGHw==} peerDependencies: - '@embedpdf/core': 2.6.2 - '@embedpdf/plugin-viewport': 2.6.2 + '@embedpdf/core': 2.7.0 + '@embedpdf/plugin-viewport': 2.7.0 preact: ^10.26.4 react: '>=16.8.0' react-dom: '>=16.8.0' svelte: '>=5 <6' vue: '>=3.2.0' - '@embedpdf/plugin-search@2.6.2': - resolution: {integrity: sha512-o4vYsqjGctDjiwP6+wrRndQoU728wW7Xyxr7mvAIQXlg0/AFBewKXbrX64bhGvVPOTPLpwPFcGBVK073OnaVCQ==} + '@embedpdf/plugin-search@2.7.0': + resolution: {integrity: sha512-TeUMvlp6j4NXkkbPURSkg7fd6l/X8wUnN+ImFiM01VM+YBLQWTPXcP7AAyFzoI5iAh2m5+ZZEB/uGb5qm3Vamg==} peerDependencies: - '@embedpdf/core': 2.6.2 + '@embedpdf/core': 2.7.0 preact: ^10.26.4 react: '>=16.8.0' react-dom: '>=16.8.0' svelte: '>=5 <6' vue: '>=3.2.0' - '@embedpdf/plugin-selection@2.6.2': - resolution: {integrity: sha512-btTRcaq+smbkqvcYmBa7+hK50eGoDOaepUma6Og2KCEIS90ZOEAChKY+KJq6axKHDg153/9kUwB1HJ6jTUUz4w==} + '@embedpdf/plugin-selection@2.7.0': + resolution: {integrity: sha512-MhTUHZ5jBh1jQU66xrtkx2jEtcreCfHy4zpmMY7iCoZtWUxrML+zf4jYNrR/ZP93O4i5HNBSnJNTG+RmRJ5KPw==} peerDependencies: - '@embedpdf/core': 2.6.2 - '@embedpdf/plugin-interaction-manager': 2.6.2 + '@embedpdf/core': 2.7.0 + '@embedpdf/plugin-interaction-manager': 2.7.0 preact: ^10.26.4 react: '>=16.8.0' react-dom: '>=16.8.0' svelte: '>=5 <6' vue: '>=3.2.0' - '@embedpdf/plugin-spread@2.6.2': - resolution: {integrity: sha512-JmMhUsHrZ7zeVbpk6xQQlD7BEpvkGWMZG1CC50Il4l7hFTlG+5InqhOpdr5aa2dQRKWv9w0UB7G/wqyB8UciuA==} + '@embedpdf/plugin-spread@2.7.0': + resolution: {integrity: sha512-FMW6nXlyZhjQKrj8l4gduu0+IWI/H8Sda9iiKKYOGLrDWcIsSo3Gt3mSJgUsjUxA2YS+l0m48VeuSESa7Ab8oA==} peerDependencies: - '@embedpdf/core': 2.6.2 + '@embedpdf/core': 2.7.0 preact: ^10.26.4 react: '>=16.8.0' react-dom: '>=16.8.0' svelte: '>=5 <6' vue: '>=3.2.0' - '@embedpdf/plugin-thumbnail@2.6.2': - resolution: {integrity: sha512-V5Ae9EBnVvhuNzQZzAUcoQGpA2G6nKe1gdAxzVUYhSYzpvW+Ld2dKG2ktEMBE4gZ5sXKV/tlHfON/HiP3hDm1g==} + '@embedpdf/plugin-thumbnail@2.7.0': + resolution: {integrity: sha512-ZnXt9ebtExFQUMUbWApUK8yC1eXYjDMEzS9631QpbLm0BhW9jYu9cs6U37Sww+zhYi7IFih4zb38lgAsbDgOcA==} peerDependencies: - '@embedpdf/core': 2.6.2 - '@embedpdf/plugin-render': 2.6.2 + '@embedpdf/core': 2.7.0 + '@embedpdf/plugin-render': 2.7.0 preact: ^10.26.4 react: '>=16.8.0' react-dom: '>=16.8.0' svelte: '>=5 <6' vue: '>=3.2.0' - '@embedpdf/plugin-tiling@2.6.2': - resolution: {integrity: sha512-F0sqBp7noczTFpy7yCOiAoJf0ndW7cfyfXXyYXuMLL9916QFzobZi1AsXfqRamSYReJTNCF/Yor57j8jvm90MA==} + '@embedpdf/plugin-tiling@2.7.0': + resolution: {integrity: sha512-/Cd7dR0kA5/Y1gykYLYS3gecStycc4m5Jjm+a0mFzO/7yQ6BLb0g4zkM95YloBAsFoP5GPXKKhBw3pi32pTObw==} peerDependencies: - '@embedpdf/core': 2.6.2 - '@embedpdf/plugin-render': 2.6.2 - '@embedpdf/plugin-scroll': 2.6.2 - '@embedpdf/plugin-viewport': 2.6.2 + '@embedpdf/core': 2.7.0 + '@embedpdf/plugin-render': 2.7.0 + '@embedpdf/plugin-scroll': 2.7.0 + '@embedpdf/plugin-viewport': 2.7.0 preact: ^10.26.4 react: '>=16.8.0' react-dom: '>=16.8.0' svelte: '>=5 <6' vue: '>=3.2.0' - '@embedpdf/plugin-ui@2.6.2': - resolution: {integrity: sha512-oyXCkV27nZIVJ6buSp7LeWhDDqjzMJd3EYICpEsYT1lRsVScoGi1mjht1ZfflTvHka6dC4JG+jXOq4nC/pFEpA==} + '@embedpdf/plugin-ui@2.7.0': + resolution: {integrity: sha512-G145mFCTp5ct8bR5C8WdKFForaS2yA8N7N8MTBra5yNPWgEUD52Yx16PB+HuuBXPoTmLftd45XIDOqmF5vEvQQ==} peerDependencies: - '@embedpdf/core': 2.6.2 - '@embedpdf/plugin-render': 2.6.2 - '@embedpdf/plugin-scroll': 2.6.2 - '@embedpdf/plugin-viewport': 2.6.2 + '@embedpdf/core': 2.7.0 + '@embedpdf/plugin-render': 2.7.0 + '@embedpdf/plugin-scroll': 2.7.0 + '@embedpdf/plugin-viewport': 2.7.0 preact: ^10.26.4 react: '>=16.8.0' react-dom: '>=16.8.0' svelte: '>=5 <6' vue: '>=3.2.0' - '@embedpdf/plugin-view-manager@2.6.2': - resolution: {integrity: sha512-n64h6X/eF6mqko904nA+2CsHNEGzXOAGmseQ15pJcabYmZOV9ORrnSOFc3Hgj7zjjfnAq+v8xrUm2uCXydbi9w==} + '@embedpdf/plugin-view-manager@2.7.0': + resolution: {integrity: sha512-zC9nKvoCa5qStr4dIapSlrR1/j6zv5MnkLo3CUFI1je37J0tSCofnGbDFI6gViPtoQjW4G+vIW62/GqHgynt+A==} peerDependencies: - '@embedpdf/core': 2.6.2 + '@embedpdf/core': 2.7.0 preact: ^10.26.4 react: '>=16.8.0' react-dom: '>=16.8.0' svelte: '>=5 <6' vue: '>=3.2.0' - '@embedpdf/plugin-viewport@2.6.2': - resolution: {integrity: sha512-uHLeKQqyKpUAJcbpsJ8P/c2qU6dTKYAC9l/xviURSABqKLw0IC3DLw6aTPZtzCFEsKiIVFZDwjz/LUt+DZaNHQ==} + '@embedpdf/plugin-viewport@2.7.0': + resolution: {integrity: sha512-nVDoU86CgHme7f2r7OFhziqHz1Yg8vdE2K+bXzRCmtZaubH+qVo5C+77at9brYCSinA67znQn1yy6zbfxs4FwA==} peerDependencies: - '@embedpdf/core': 2.6.2 + '@embedpdf/core': 2.7.0 preact: ^10.26.4 react: '>=16.8.0' react-dom: '>=16.8.0' svelte: '>=5 <6' vue: '>=3.2.0' - '@embedpdf/plugin-zoom@2.6.2': - resolution: {integrity: sha512-lw4JG+gDLeIJYyFzsmsNZcN1kwm+5qAvOPMWQ+CA6zMaNDKV5BwE3c4JRDGwqWF+syK0yvuDh9sjT50h+LSwwg==} + '@embedpdf/plugin-zoom@2.7.0': + resolution: {integrity: sha512-5u2cQcahHkbOfa5Ug5hxXwtIOz4TzrQSgvmXvO7+jV0jXKOp1vFVB9tU26SKwwwW9OL6e4L/P6roKJRPbOnWyw==} peerDependencies: - '@embedpdf/core': 2.6.2 - '@embedpdf/plugin-scroll': 2.6.2 - '@embedpdf/plugin-viewport': 2.6.2 + '@embedpdf/core': 2.7.0 + '@embedpdf/plugin-scroll': 2.7.0 + '@embedpdf/plugin-viewport': 2.7.0 preact: ^10.26.4 react: '>=16.8.0' react-dom: '>=16.8.0' svelte: '>=5 <6' vue: '>=3.2.0' - '@embedpdf/utils@2.6.2': - resolution: {integrity: sha512-+sY221n1rb1Q3JzFe8tZ+TISvjVzOt5kdnZbd6vEWFaUpS577x65T1Uk9ngb3GZt7o9DmC7Of5XdMqZiray2ow==} + '@embedpdf/utils@2.7.0': + resolution: {integrity: sha512-QtHOChToxkemBbJSwBTbgUqQbUO+obRj5HBaA/8KGv1ESCjtrdwjfAHMCBYdRuyvMVvrQGe1bHuSbKpb2JVS5w==} peerDependencies: preact: ^10.26.4 react: '>=16.8.0' @@ -1970,8 +1970,8 @@ packages: resolution: {integrity: sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/eslintrc@3.3.3': - resolution: {integrity: sha512-Kr+LPIUVKz2qkx1HAMH8q1q6azbqBAsXJUxBl/ODDuVPX45Z9DfwB8tPjTi6nNZ8BuM3nbJxC5zCAg5elnBUTQ==} + '@eslint/eslintrc@3.3.4': + resolution: {integrity: sha512-4h4MVF8pmBsncB60r0wSJiIeUKTSD4m7FmTFThG8RHlsg9ajqckLm9OraguFGZE4vVdpiI1Q4+hFnisopmG6gQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@eslint/js@9.39.3': @@ -2355,8 +2355,8 @@ packages: '@mermaid-js/parser@1.0.0': resolution: {integrity: sha512-vvK0Hi/VWndxoh03Mmz6wa1KDriSPjS2XMZL/1l19HFwygiObEEoEwSDxOqyLzzAI6J2PU3261JjTMTO7x+BPw==} - '@modelcontextprotocol/sdk@1.26.0': - resolution: {integrity: sha512-Y5RmPncpiDtTXDbLKswIJzTqu2hyBKxTNsgKqKclDbhIgg1wgtf1fRuvxgTnRfcnxtvvgbIEcqUOzZrJ6iSReg==} + '@modelcontextprotocol/sdk@1.27.1': + resolution: {integrity: sha512-sr6GbP+4edBwFndLbM60gf07z0FQ79gaExpnsjMGePXqFcSSb7t6iscpjk9DhFhwd+mTEQrzNafGP8/iGGFYaA==} engines: {node: '>=18'} peerDependencies: '@cfworker/json-schema': ^4.1.1 @@ -2505,6 +2505,9 @@ packages: '@poppinss/dumper@0.6.5': resolution: {integrity: sha512-NBdYIb90J7LfOI32dOewKI1r7wnkiH6m920puQ3qHUeZkxNkQiFnXVWoE6YtFSv6QOiPPf7ys6i+HWWecDz7sw==} + '@poppinss/dumper@0.7.0': + resolution: {integrity: sha512-0UTYalzk2t6S4rA2uHOz5bSSW2CHdv4vggJI6Alg90yvl0UgXs6XSXpH96OH+bRkX4J/06djv29pqXJ0lq5Kag==} + '@poppinss/exception@1.2.3': resolution: {integrity: sha512-dCED+QRChTVatE9ibtoaxc+WkdzOSjYTKi/+uacHWIsfodVfpsueo3+DKpgU5Px8qXjgmXkSvhXvSCz3fnP9lw==} @@ -2853,28 +2856,28 @@ packages: cpu: [x64] os: [win32] - '@sentry-internal/browser-utils@10.39.0': - resolution: {integrity: sha512-W6WODonMGiI13Az5P7jd/m2lj/JpIyuVKg7wE4X+YdlMehLspAv6I7gRE4OBSumS14ZjdaYDpD/lwtnBwKAzcA==} + '@sentry-internal/browser-utils@10.40.0': + resolution: {integrity: sha512-3CDeVNBXYOIvBVdT0SOdMZx5LzYDLuhGK/z7A14sYZz4Cd2+f4mSeFDaEOoH/g2SaY2CKR5KGkAADy8IyjZ21w==} engines: {node: '>=18'} - '@sentry-internal/feedback@10.39.0': - resolution: {integrity: sha512-cRXmmDeOr5FzVsBNRLU4WDEuC3fhuD0XV362EWl4DI3XBGao8ukaueKcLIKic5WZx6uXimjWw/UJmDLgxeCqkg==} + '@sentry-internal/feedback@10.40.0': + resolution: {integrity: sha512-V/ixkcdCNMo04KgsCEeNEu966xUUTD6czKT2LOAO5siZACqFjT/Rp9VR1n7QQrVo3sL7P3QNiTHtX0jaeWbwzg==} engines: {node: '>=18'} - '@sentry-internal/replay-canvas@10.39.0': - resolution: {integrity: sha512-TTiX0XWCcqTqFGJjEZYObk93j/sJmXcqPzcu0cN2mIkKnnaHDY3w74SHZCshKqIr0AOQdt1HDNa36s3TCdt0Jw==} + '@sentry-internal/replay-canvas@10.40.0': + resolution: {integrity: sha512-wzQwilFHO2baeCt0dTMf0eW+rgK8O+mkisf9sQzPXzG3Krr/iVtFg1T5T1Th3YsCsEdn6yQ3hcBPLEXjMSvccg==} engines: {node: '>=18'} - '@sentry-internal/replay@10.39.0': - resolution: {integrity: sha512-obZoYOrUfxIYBHkmtPpItRdE38VuzF1VIxSgZ8Mbtq/9UvCWh+eOaVWU2stN/cVu1KYuYX0nQwBvdN28L6y/JA==} + '@sentry-internal/replay@10.40.0': + resolution: {integrity: sha512-vsH2Ut0KIIQIHNdS3zzEGLJ2C9btbpvJIWAVk7l7oft66JzlUNC89qNaQ5SAypjLQx4Ln2V/ZTqfEoNzXOAsoQ==} engines: {node: '>=18'} - '@sentry/browser@10.39.0': - resolution: {integrity: sha512-I50W/1PDJWyqgNrGufGhBYCmmO3Bb159nx2Ut2bKoVveTfgH/hLEtDyW0kHo8Fu454mW+ukyXfU4L4s+kB9aaw==} + '@sentry/browser@10.40.0': + resolution: {integrity: sha512-nCt3FKUMFad0C6xl5wCK0Jz+qT4Vev4fv6HJRn0YoNRRDQCfsUVxAz7pNyyiPNGM/WCDp9wJpGJsRvbBRd2anw==} engines: {node: '>=18'} - '@sentry/cloudflare@10.39.0': - resolution: {integrity: sha512-x0DDNJJ1sDuHosFKURcn6I7eMQfJKNF317NclARgE6a+sg0Ty5OpaNMaQF9VlPVDB7JGXohADJ+88I1x0mB87g==} + '@sentry/cloudflare@10.40.0': + resolution: {integrity: sha512-Tr8iDSUUlmwEBvXHic/zujEZZjs6XZ6mWJ3wOyb7gtjcd9umaRQtvALLHBaGg1uQoZkLjLpDas3q1p/dS4B6rw==} engines: {node: '>=18'} peerDependencies: '@cloudflare/workers-types': ^4.x @@ -2882,12 +2885,12 @@ packages: '@cloudflare/workers-types': optional: true - '@sentry/core@10.39.0': - resolution: {integrity: sha512-xCLip2mBwCdRrvXHtVEULX0NffUTYZZBhEUGht0WFL+GNdNQ7gmBOGOczhZlrf2hgFFtDO0fs1xiP9bqq5orEQ==} + '@sentry/core@10.40.0': + resolution: {integrity: sha512-/wrcHPp9Avmgl6WBimPjS4gj810a1wU5oX9fF1bzJfeIIbF3jTsAbv0oMbgDp0cSDnkwv2+NvcPnn3+c5J6pBA==} engines: {node: '>=18'} - '@sentry/solid@10.39.0': - resolution: {integrity: sha512-zvU5u/XkpVOzA1wlOAppozfxt537EMlghZ2WIHN4fFx0xLZTyPW+/CkDRGmQntcFhMvBgRMYbrfL0GY0GPX49A==} + '@sentry/solid@10.40.0': + resolution: {integrity: sha512-ZMnojd51pWQLrC32QDoUnRJcBBc6ftpyklSlCawjQeA0JfNyOOZAVfng1kBjk0+mhw5IKIltgCs1tpp3Vqrcuw==} engines: {node: '>=18'} peerDependencies: '@solidjs/router': ^0.13.4 || ^0.14.0 || ^0.15.0 @@ -2969,8 +2972,8 @@ packages: peerDependencies: solid-js: ^1.8.6 - '@solidjs/start@1.3.0': - resolution: {integrity: sha512-FMqc0ZaAUIFBVOEUV87Y1W6LuCN5OveOigXvjZ9CarB/TQSC3QqDBSX+EyWkvreGIU7zsEIi0mka6NGJgJ5oOQ==} + '@solidjs/start@1.3.2': + resolution: {integrity: sha512-tasDl3utVbtP0rr4InB3ntBIFV2upvEiFrOOCkRrAA3yBfjx9elpxnc94sJQXo65PNYdAAAkPIC6h93vLrtwHg==} peerDependencies: vinxi: ^0.5.7 @@ -3293,8 +3296,8 @@ packages: '@types/micromatch@4.0.10': resolution: {integrity: sha512-5jOhFDElqr4DKTrTEbnW8DZ4Hz5LRUEmyrGpCMrD/NphYv3nUnaF08xmSLx1rGGnyEs/kFnhiw6dCgcDqMr5PQ==} - '@types/node@25.3.0': - resolution: {integrity: sha512-4K3bqJpXpqfg2XKGK9bpDTc6xO/xoUP/RBWS7AtRMug6zZFaRekiLzjVtAoZMquxoAbzBvy5nxQ7veS5eYzf8A==} + '@types/node@25.3.1': + resolution: {integrity: sha512-hj9YIJimBCipHVfHKRMnvmHg+wfhKc0o4mTtXh9pKBjC8TLJzz0nzGmLi5UJsYAUgSvXFHgb0V2oY10DUFtImw==} '@types/resolve@1.20.2': resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==} @@ -3450,17 +3453,17 @@ packages: '@vitest/utils@4.0.18': resolution: {integrity: sha512-msMRKLMVLWygpK3u2Hybgi4MNjcYJvwTb0Ru09+fOyCXIgT5raYP041DRRdiJiI3k/2U6SEbAETB3YtBrUkCFA==} - '@vue/compiler-core@3.5.28': - resolution: {integrity: sha512-kviccYxTgoE8n6OCw96BNdYlBg2GOWfBuOW4Vqwrt7mSKWKwFVvI8egdTltqRgITGPsTFYtKYfxIG8ptX2PJHQ==} + '@vue/compiler-core@3.5.29': + resolution: {integrity: sha512-cuzPhD8fwRHk8IGfmYaR4eEe4cAyJEL66Ove/WZL7yWNL134nqLddSLwNRIsFlnnW1kK+p8Ck3viFnC0chXCXw==} - '@vue/compiler-dom@3.5.28': - resolution: {integrity: sha512-/1ZepxAb159jKR1btkefDP+J2xuWL5V3WtleRmxaT+K2Aqiek/Ab/+Ebrw2pPj0sdHO8ViAyyJWfhXXOP/+LQA==} + '@vue/compiler-dom@3.5.29': + resolution: {integrity: sha512-n0G5o7R3uBVmVxjTIYcz7ovr8sy7QObFG8OQJ3xGCDNhbG60biP/P5KnyY8NLd81OuT1WJflG7N4KWYHaeeaIg==} - '@vue/compiler-sfc@3.5.28': - resolution: {integrity: sha512-6TnKMiNkd6u6VeVDhZn/07KhEZuBSn43Wd2No5zaP5s3xm8IqFTHBj84HJah4UepSUJTro5SoqqlOY22FKY96g==} + '@vue/compiler-sfc@3.5.29': + resolution: {integrity: sha512-oJZhN5XJs35Gzr50E82jg2cYdZQ78wEwvRO6Y63TvLVTc+6xICzJHP1UIecdSPPYIbkautNBanDiWYa64QSFIA==} - '@vue/compiler-ssr@3.5.28': - resolution: {integrity: sha512-JCq//9w1qmC6UGLWJX7RXzrGpKkroubey/ZFqTpvEIDJEKGgntuDMqkuWiZvzTzTA5h2qZvFBFHY7fAAa9475g==} + '@vue/compiler-ssr@3.5.29': + resolution: {integrity: sha512-Y/ARJZE6fpjzL5GH/phJmsFwx3g6t2KmHKHx5q+MLl2kencADKIrhH5MLF6HHpRMmlRAYBRSvv347Mepf1zVNw==} '@vue/devtools-api@7.7.9': resolution: {integrity: sha512-kIE8wvwlcZ6TJTbNeU2HQNtaxLx3a84aotTITUuL/4bzfPxzajGBOoqjMhwZJ8L9qFYDU/lAYMEEm11dnZOD6g==} @@ -3471,22 +3474,22 @@ packages: '@vue/devtools-shared@7.7.9': resolution: {integrity: sha512-iWAb0v2WYf0QWmxCGy0seZNDPdO3Sp5+u78ORnyeonS6MT4PC7VPrryX2BpMJrwlDeaZ6BD4vP4XKjK0SZqaeA==} - '@vue/reactivity@3.5.28': - resolution: {integrity: sha512-gr5hEsxvn+RNyu9/9o1WtdYdwDjg5FgjUSBEkZWqgTKlo/fvwZ2+8W6AfKsc9YN2k/+iHYdS9vZYAhpi10kNaw==} + '@vue/reactivity@3.5.29': + resolution: {integrity: sha512-zcrANcrRdcLtmGZETBxWqIkoQei8HaFpZWx/GHKxx79JZsiZ8j1du0VUJtu4eJjgFvU/iKL5lRXFXksVmI+5DA==} - '@vue/runtime-core@3.5.28': - resolution: {integrity: sha512-POVHTdbgnrBBIpnbYU4y7pOMNlPn2QVxVzkvEA2pEgvzbelQq4ZOUxbp2oiyo+BOtiYlm8Q44wShHJoBvDPAjQ==} + '@vue/runtime-core@3.5.29': + resolution: {integrity: sha512-8DpW2QfdwIWOLqtsNcds4s+QgwSaHSJY/SUe04LptianUQ/0xi6KVsu/pYVh+HO3NTVvVJjIPL2t6GdeKbS4Lg==} - '@vue/runtime-dom@3.5.28': - resolution: {integrity: sha512-4SXxSF8SXYMuhAIkT+eBRqOkWEfPu6nhccrzrkioA6l0boiq7sp18HCOov9qWJA5HML61kW8p/cB4MmBiG9dSA==} + '@vue/runtime-dom@3.5.29': + resolution: {integrity: sha512-AHvvJEtcY9tw/uk+s/YRLSlxxQnqnAkjqvK25ZiM4CllCZWzElRAoQnCM42m9AHRLNJ6oe2kC5DCgD4AUdlvXg==} - '@vue/server-renderer@3.5.28': - resolution: {integrity: sha512-pf+5ECKGj8fX95bNincbzJ6yp6nyzuLDhYZCeFxUNp8EBrQpPpQaLX3nNCp49+UbgbPun3CeVE+5CXVV1Xydfg==} + '@vue/server-renderer@3.5.29': + resolution: {integrity: sha512-G/1k6WK5MusLlbxSE2YTcqAAezS+VuwHhOvLx2KnQU7G2zCH6KIb+5Wyt6UjMq7a3qPzNEjJXs1hvAxDclQH+g==} peerDependencies: - vue: 3.5.28 + vue: 3.5.29 - '@vue/shared@3.5.28': - resolution: {integrity: sha512-cfWa1fCGBxrvaHRhvV3Is0MgmrbSCxYTXCSCau2I0a1Xw1N1pHAvkWCiXPRAqjvToILvguNyEwjevUqAuBQWvQ==} + '@vue/shared@3.5.29': + resolution: {integrity: sha512-w7SR0A5zyRByL9XUkCfdLs7t9XOHUyJ67qPGQjOou3p6GvBeBW+AVjUUmlxtZ4PIYaRvE+1LmK44O4uajlZwcg==} '@vueuse/core@12.8.2': resolution: {integrity: sha512-HbvCmZdzAu3VGi/pWYm5Ut+Kd9mn1ZHnn4L5G8kOQTPs/IwIAmJoBrmYk2ckLArgMXZj0AW3n5CAejLUO+PhdQ==} @@ -3836,8 +3839,8 @@ packages: ajv@8.18.0: resolution: {integrity: sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==} - algoliasearch@5.49.0: - resolution: {integrity: sha512-Tse7vx7WOvbU+kpq/L3BrBhSWTPbtMa59zIEhMn+Z2NoxZlpcCRUDCRxQ7kDFs1T3CHxDgvb+mDuILiBBpBaAA==} + algoliasearch@5.49.1: + resolution: {integrity: sha512-X3Pp2aRQhg4xUC6PQtkubn5NpRKuUPQ9FPDQlx36SmpFwwH2N0/tw4c+NXV3nw3PsgeUs+BuWGP0gjz3TvENLQ==} engines: {node: '>= 14.0.0'} ansi-align@3.0.1: @@ -3974,8 +3977,8 @@ packages: bare-abort-controller: optional: true - bare-fs@4.5.4: - resolution: {integrity: sha512-POK4oplfA7P7gqvetNmCs4CNtm9fNsx+IAh7jH7GgU0OJdge2rso0R20TNWVq6VoWcCvsTdlNDaleLHGaKx8CA==} + bare-fs@4.5.5: + resolution: {integrity: sha512-XvwYM6VZqKoqDll8BmSww5luA5eflDzY0uEFfBJtFKe4PAAtxBjU3YIxzIBzhyaEQBy1VXEQBto4cpN5RZJw+w==} engines: {bare: '>=1.16.0'} peerDependencies: bare-buffer: '*' @@ -3983,8 +3986,8 @@ packages: bare-buffer: optional: true - bare-os@3.6.2: - resolution: {integrity: sha512-T+V1+1srU2qYNBmJCXZkUY5vQ0B4FSlL3QDROnKQYOqeiQR8UbjNHlPa+TIbM4cuidiN9GaTaOZgSEgsvPbh5A==} + bare-os@3.7.0: + resolution: {integrity: sha512-64Rcwj8qlnTZU8Ps6JJEdSmxBEUGgI7g8l+lMtsJLl4IsfTcHMTfJ188u2iGV6P6YPRZrtv72B2kjn+hp+Yv3g==} engines: {bare: '>=1.14.0'} bare-path@3.0.0: @@ -5284,9 +5287,8 @@ packages: file-uri-to-path@1.0.0: resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==} - filelist@1.0.5: - resolution: {integrity: sha512-ct/ckWBV/9Dg3MlvCXsLcSUyoWwv9mCKqlhLNB2DAuXR/NZolSXlQqP5dyy6guWlPXBhodZyZ5lGPQcbQDxrEQ==} - engines: {node: 20 || >=22} + filelist@1.0.6: + resolution: {integrity: sha512-5giy2PkLYY1cP39p17Ech+2xlpTRL9HLspOfEgm0L6CwBXBTgsK5ou0JtzYuepxkaQ/tvhCFIJ5uXo0OrM2DxA==} fill-range@7.1.1: resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} @@ -5502,8 +5504,8 @@ packages: resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} hasBin: true - hono@4.12.2: - resolution: {integrity: sha512-gJnaDHXKDayjt8ue0n8Gs0A007yKXj4Xzb8+cNjZeYsSzzwKc0Lr+OZgYwVfB0pHfUs17EPoLvrOsEaJ9mj+Tg==} + hono@4.12.3: + resolution: {integrity: sha512-SFsVSjp8sj5UumXOOFlkZOG6XS9SJDKw0TbwFeV+AJ8xlST8kxK5Z/5EYa111UY8732lK2S/xB653ceuaoGwpg==} engines: {node: '>=16.9.0'} hookable@5.5.3: @@ -5835,8 +5837,8 @@ packages: resolution: {integrity: sha512-eQQBjBnsVtGacsG9uJNB8qOr3yA8rga4wAaGG1qRcBzSIvfhERLrWxMAM1hp5fcS6Abo8M4+bUBTekYR0qTPQw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - katex@0.16.32: - resolution: {integrity: sha512-ac0FzkRJlpw4WyH3Zu/OgU9LmPKqjHr6O2BxfSrBt8uJ1BhvH2YK3oJ4ut/K+O+6qQt2MGpdbn0MrffVEnnUDQ==} + katex@0.16.33: + resolution: {integrity: sha512-q3N5u+1sY9Bu7T4nlXoiRBXWfwSefNGoKeOwekV+gw0cAXQlz2Ww6BLcmBxVDeXBMUDQv6fK5bcNaJLxob3ZQA==} hasBin: true kebab-case@1.0.2: @@ -6149,8 +6151,8 @@ packages: engines: {node: '>=18.0.0'} hasBin: true - miniflare@4.20260302.0: - resolution: {integrity: sha512-joGFywlo7HdfHXXGOkc6tDCVkwjEncM0mwEsMOLWcl+vDVJPj9HRV7JtEa0+lCpNOLdYw7mZNHYe12xz9KtJOw==} + miniflare@4.20260305.0: + resolution: {integrity: sha512-jVhtKJtiwaZa3rI+WgoLvSJmEazDsoUmAPYRUmEe2VO6VSbvkhbnDRm+dsPbYRatgNIExwrpqG1rv96jHiSb0w==} engines: {node: '>=18.0.0'} hasBin: true @@ -6158,19 +6160,19 @@ packages: resolution: {integrity: sha512-fu656aJ0n2kcXwsnwnv9g24tkU5uSmOlTjd6WyyaKm2Z+h1qmY6bAjrcaIxF/BslFqbZ8UBtbJi7KgQOZD2PTw==} engines: {node: 20 || >=22} - minimatch@10.2.2: - resolution: {integrity: sha512-+G4CpNBxa5MprY+04MbgOw1v7So6n5JY166pFi9KfYwT78fxScCeSNQSNzp6dpPSW2rONOps6Ocam1wFhCgoVw==} + minimatch@10.2.4: + resolution: {integrity: sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg==} engines: {node: 18 || 20 || >=22} - minimatch@3.1.3: - resolution: {integrity: sha512-M2GCs7Vk83NxkUyQV1bkABc4yxgz9kILhHImZiBPAZ9ybuvCb0/H7lEl5XvIg3g+9d4eNotkZA5IWwYl0tibaA==} + minimatch@3.1.5: + resolution: {integrity: sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==} - minimatch@5.1.7: - resolution: {integrity: sha512-FjiwU9HaHW6YB3H4a1sFudnv93lvydNjz2lmyUXR6IwKhGI+bgL3SOZrBGn6kvvX2pJvhEkGSGjyTHN47O4rqA==} + minimatch@5.1.9: + resolution: {integrity: sha512-7o1wEA2RyMP7Iu7GNba9vc0RWWGACJOCZBJX2GJWip0ikV+wcOsgVuY9uE8CPiyQhkGFSlhuSkZPavN7u1c2Fw==} engines: {node: '>=10'} - minimatch@9.0.6: - resolution: {integrity: sha512-kQAVowdR33euIqeA0+VZTDqU+qo1IeVY+hrKYtZMio3Pg0P0vuh/kwRylLUddJhB6pf3q/botcOvRtx4IN1wqQ==} + minimatch@9.0.8: + resolution: {integrity: sha512-reYkDYtj/b19TeqbNZCV4q9t+Yxylf/rYBsLb42SXJatTv4/ylq5lEiAmhA/IToxO7NI2UzNMghHoHuaqDkAjw==} engines: {node: '>=16 || 14 >=14.17'} minimist@1.2.8: @@ -6215,8 +6217,8 @@ packages: engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true - nanostores@1.1.0: - resolution: {integrity: sha512-yJBmDJr18xy47dbNVlHcgdPrulSn1nhSE6Ns9vTG+Nx9VPT6iV1MD6aQFp/t52zpf82FhLLTXAXr30NuCnxvwA==} + nanostores@1.1.1: + resolution: {integrity: sha512-EYJqS25r2iBeTtGQCHidXl1VfZ1jXM7Q04zXJOrMlxVVmD0ptxJaNux92n1mJ7c5lN3zTq12MhH/8x59nP+qmg==} engines: {node: ^20.0.0 || >=22.0.0} napi-build-utils@2.0.0: @@ -7151,8 +7153,8 @@ packages: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} engines: {node: '>=8'} - strip-ansi@7.1.2: - resolution: {integrity: sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==} + strip-ansi@7.2.0: + resolution: {integrity: sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==} engines: {node: '>=12'} strip-final-newline@3.0.0: @@ -7178,8 +7180,8 @@ packages: strip-literal@3.1.0: resolution: {integrity: sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg==} - stripe@20.3.1: - resolution: {integrity: sha512-k990yOT5G5rhX3XluRPw5Y8RLdJDW4dzQ29wWT66piHrbnM2KyamJ1dKgPsw4HzGHRWjDiSSdcI2WdxQUPV3aQ==} + stripe@20.4.0: + resolution: {integrity: sha512-F/aN1IQ9vHmlyLNi3DkiIbyzQb6gyBG0uYFd/VrEVQSc9BLtlgknPUx0EvzZdBMRLFuRaPFIFd7Mxwtg7Pbwzw==} engines: {node: '>=16'} peerDependencies: '@types/node': '>=16' @@ -7380,38 +7382,38 @@ packages: tunnel-agent@0.6.0: resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==} - turbo-darwin-64@2.8.10: - resolution: {integrity: sha512-A03fXh+B7S8mL3PbdhTd+0UsaGrhfyPkODvzBDpKRY7bbeac4MDFpJ7I+Slf2oSkCEeSvHKR7Z4U71uKRUfX7g==} + turbo-darwin-64@2.8.11: + resolution: {integrity: sha512-XKaCWaz4OCt77oYYvGCIRpvYD4c/aNaKjRkUpv+e8rN3RZb+5Xsyew4yRO+gaHdMIUhQznXNXfHlhs+/p7lIhA==} cpu: [x64] os: [darwin] - turbo-darwin-arm64@2.8.10: - resolution: {integrity: sha512-sidzowgWL3s5xCHLeqwC9M3s9M0i16W1nuQF3Mc7fPHpZ+YPohvcbVFBB2uoRRHYZg6yBnwD4gyUHKTeXfwtXA==} + turbo-darwin-arm64@2.8.11: + resolution: {integrity: sha512-VvynLHGUNvQ9k7GZjRPSsRcK4VkioTfFb7O7liAk4nHKjEcMdls7GqxzjVWgJiKz3hWmQGaP9hRa9UUnhVWCxA==} cpu: [arm64] os: [darwin] - turbo-linux-64@2.8.10: - resolution: {integrity: sha512-YK9vcpL3TVtqonB021XwgaQhY9hJJbKKUhLv16osxV0HkcQASQWUqR56yMge7puh6nxU67rQlTq1b7ksR1T3KA==} + turbo-linux-64@2.8.11: + resolution: {integrity: sha512-cbSn37dcm+EmkQ7DD0euy7xV7o2el4GAOr1XujvkAyKjjNvQ+6QIUeDgQcwAx3D17zPpDvfDMJY2dLQadWnkmQ==} cpu: [x64] os: [linux] - turbo-linux-arm64@2.8.10: - resolution: {integrity: sha512-3+j2tL0sG95iBJTm+6J8/45JsETQABPqtFyYjVjBbi6eVGdtNTiBmHNKrbvXRlQ3ZbUG75bKLaSSDHSEEN+btQ==} + turbo-linux-arm64@2.8.11: + resolution: {integrity: sha512-+trymp2s2aBrhS04l6qFxcExzZ8ffndevuUB9c5RCeqsVpZeiWuGQlWNm5XjOmzoMayxRARZ5ma7yiWbGMiLqQ==} cpu: [arm64] os: [linux] - turbo-windows-64@2.8.10: - resolution: {integrity: sha512-hdeF5qmVY/NFgiucf8FW0CWJWtyT2QPm5mIsX0W1DXAVzqKVXGq+Zf+dg4EUngAFKjDzoBeN6ec2Fhajwfztkw==} + turbo-windows-64@2.8.11: + resolution: {integrity: sha512-3kJjFSM4yw1n9Uzmi+XkAUgCae19l/bH6RJ442xo7mnZm0tpOjo33F+FYHoSVpIWVMd0HG0LDccyafPSdylQbA==} cpu: [x64] os: [win32] - turbo-windows-arm64@2.8.10: - resolution: {integrity: sha512-QGdr/Q8LWmj+ITMkSvfiz2glf0d7JG0oXVzGL3jxkGqiBI1zXFj20oqVY0qWi+112LO9SVrYdpHS0E/oGFrMbQ==} + turbo-windows-arm64@2.8.11: + resolution: {integrity: sha512-JOM4uF2vuLsJUvibdR6X9QqdZr6BhC6Nhlrw4LKFPsXZZI/9HHLoqAiYRpE4MuzIwldCH/jVySnWXrI1SKto0g==} cpu: [arm64] os: [win32] - turbo@2.8.10: - resolution: {integrity: sha512-OxbzDES66+x7nnKGg2MwBA1ypVsZoDTLHpeaP4giyiHSixbsiTaMyeJqbEyvBdp5Cm28fc+8GG6RdQtic0ijwQ==} + turbo@2.8.11: + resolution: {integrity: sha512-H+rwSHHPLoyPOSoHdmI1zY0zy0GGj1Dmr7SeJW+nZiWLz2nex8EJ+fkdVabxXFMNEux+aywI4Sae8EqhmnOv4A==} hasBin: true type-check@0.4.0: @@ -7430,8 +7432,8 @@ packages: resolution: {integrity: sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==} engines: {node: '>= 0.6'} - typed-query-selector@2.12.0: - resolution: {integrity: sha512-SbklCd1F0EiZOyPiW192rrHZzZ5sBijB6xM+cpmrwDqObvdtunOHHIk9fCGsoK5JVIYXoyEp4iEdE3upFH3PAg==} + typed-query-selector@2.12.1: + resolution: {integrity: sha512-uzR+FzI8qrUEIu96oaeBJmd9E7CFEiQ3goA5qCVgc4s5llSubcfGHq9yUstZx/k4s9dXHVKsE35YWoFyvEqEHA==} typescript@5.9.3: resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==} @@ -7850,8 +7852,8 @@ packages: vscode-uri@3.1.0: resolution: {integrity: sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ==} - vue@3.5.28: - resolution: {integrity: sha512-BRdrNfeoccSoIZeIhyPBfvWSLFP4q8J3u8Ju8Ug5vu3LdD+yTM13Sg4sKtljxozbnuMu1NB1X5HBHRYUzFocKg==} + vue@3.5.29: + resolution: {integrity: sha512-BZqN4Ze6mDQVNAni0IHeMJ5mwr8VAJ3MQC9FmprRhcBYENw+wOAAjRj8jfmN6FLl0j96OXbR+CjWhmAmM+QGnA==} peerDependencies: typescript: '*' peerDependenciesMeta: @@ -7922,8 +7924,8 @@ packages: engines: {node: '>=16'} hasBin: true - workerd@1.20260302.0: - resolution: {integrity: sha512-FhNdC8cenMDllI6bTktFgxP5Bn5ZEnGtofgKipY6pW9jtq708D1DeGI6vGad78KQLBGaDwFy1eThjCoLYgFfog==} + workerd@1.20260305.0: + resolution: {integrity: sha512-JkhfCLU+w+KbQmZ9k49IcDYc78GBo7eG8Mir8E2+KVjR7otQAmpcLlsous09YLh8WQ3Bt3Mi6/WMStvMAPukeA==} engines: {node: '>=16'} hasBin: true @@ -7938,12 +7940,12 @@ packages: '@cloudflare/workers-types': optional: true - wrangler@4.67.1: - resolution: {integrity: sha512-5GXz8cQNN/2KCMQ/22oe9Vf9xwVNillOowhKq6W2+ZuveU4/IrTm61K4iIUOsBYmrhYGopSfk0GmyCTuNh2rsA==} + wrangler@4.69.0: + resolution: {integrity: sha512-EmVfIM65I5b4ITHe3Y9R7zQyf4NUBQ1leStakMlWiVR9n6VlDwuEltyQI2l3i0JciDnWyR3uqe+T6C08ivniTQ==} engines: {node: '>=20.0.0'} hasBin: true peerDependencies: - '@cloudflare/workers-types': ^4.20260302.0 + '@cloudflare/workers-types': ^4.20260305.0 peerDependenciesMeta: '@cloudflare/workers-types': optional: true @@ -8066,12 +8068,12 @@ packages: youch-core@0.3.3: resolution: {integrity: sha512-ho7XuGjLaJ2hWHoK8yFnsUGy2Y5uDpqSTq1FkHLK4/oqKtyUU1AFbOOxY4IpC9f0fTLjwYbslUz0Po5BpD1wrA==} + youch@4.1.0: + resolution: {integrity: sha512-cYekNh2tUoU+voS11X0D0UQntVCSO6LQ1h10VriQGmfbpf0mnGTruwZICts23UUNiZCXm8H8hQBtRrdsbhuNNg==} + youch@4.1.0-beta.10: resolution: {integrity: sha512-rLfVLB4FgQneDr0dv1oddCVZmKjcJ6yX6mS4pU82Mq/Dt9a3cLZQ62pDBL4AUO+uVrCvtWz3ZFUL2HFAFJ/BXQ==} - youch@4.1.0-beta.14: - resolution: {integrity: sha512-VqcHA/HqOxaBMjBQCYz1h8jYdAAeLm6cVLmefijJjMY4aovOfKkqMry7amNX3JiN4hXArb7ZVYBNpjEVkV3r/A==} - zimmerframe@1.1.4: resolution: {integrity: sha512-B58NGBEoc8Y9MWWCQGl/gq9xBCe4IiKM0a2x7GZdQKOW5Exr8S1W24J6OgM1njK8xCRGvAJIL/MxXHf6SkmQKQ==} @@ -8107,117 +8109,117 @@ snapshots: ansi-styles: 6.2.3 is-fullwidth-code-point: 5.1.0 - '@algolia/abtesting@1.15.0': + '@algolia/abtesting@1.15.1': dependencies: - '@algolia/client-common': 5.49.0 - '@algolia/requester-browser-xhr': 5.49.0 - '@algolia/requester-fetch': 5.49.0 - '@algolia/requester-node-http': 5.49.0 + '@algolia/client-common': 5.49.1 + '@algolia/requester-browser-xhr': 5.49.1 + '@algolia/requester-fetch': 5.49.1 + '@algolia/requester-node-http': 5.49.1 - '@algolia/autocomplete-core@1.17.7(@algolia/client-search@5.49.0)(algoliasearch@5.49.0)(search-insights@2.17.3)': + '@algolia/autocomplete-core@1.17.7(@algolia/client-search@5.49.1)(algoliasearch@5.49.1)(search-insights@2.17.3)': dependencies: - '@algolia/autocomplete-plugin-algolia-insights': 1.17.7(@algolia/client-search@5.49.0)(algoliasearch@5.49.0)(search-insights@2.17.3) - '@algolia/autocomplete-shared': 1.17.7(@algolia/client-search@5.49.0)(algoliasearch@5.49.0) + '@algolia/autocomplete-plugin-algolia-insights': 1.17.7(@algolia/client-search@5.49.1)(algoliasearch@5.49.1)(search-insights@2.17.3) + '@algolia/autocomplete-shared': 1.17.7(@algolia/client-search@5.49.1)(algoliasearch@5.49.1) transitivePeerDependencies: - '@algolia/client-search' - algoliasearch - search-insights - '@algolia/autocomplete-plugin-algolia-insights@1.17.7(@algolia/client-search@5.49.0)(algoliasearch@5.49.0)(search-insights@2.17.3)': + '@algolia/autocomplete-plugin-algolia-insights@1.17.7(@algolia/client-search@5.49.1)(algoliasearch@5.49.1)(search-insights@2.17.3)': dependencies: - '@algolia/autocomplete-shared': 1.17.7(@algolia/client-search@5.49.0)(algoliasearch@5.49.0) + '@algolia/autocomplete-shared': 1.17.7(@algolia/client-search@5.49.1)(algoliasearch@5.49.1) search-insights: 2.17.3 transitivePeerDependencies: - '@algolia/client-search' - algoliasearch - '@algolia/autocomplete-preset-algolia@1.17.7(@algolia/client-search@5.49.0)(algoliasearch@5.49.0)': + '@algolia/autocomplete-preset-algolia@1.17.7(@algolia/client-search@5.49.1)(algoliasearch@5.49.1)': dependencies: - '@algolia/autocomplete-shared': 1.17.7(@algolia/client-search@5.49.0)(algoliasearch@5.49.0) - '@algolia/client-search': 5.49.0 - algoliasearch: 5.49.0 + '@algolia/autocomplete-shared': 1.17.7(@algolia/client-search@5.49.1)(algoliasearch@5.49.1) + '@algolia/client-search': 5.49.1 + algoliasearch: 5.49.1 - '@algolia/autocomplete-shared@1.17.7(@algolia/client-search@5.49.0)(algoliasearch@5.49.0)': + '@algolia/autocomplete-shared@1.17.7(@algolia/client-search@5.49.1)(algoliasearch@5.49.1)': dependencies: - '@algolia/client-search': 5.49.0 - algoliasearch: 5.49.0 + '@algolia/client-search': 5.49.1 + algoliasearch: 5.49.1 - '@algolia/client-abtesting@5.49.0': + '@algolia/client-abtesting@5.49.1': dependencies: - '@algolia/client-common': 5.49.0 - '@algolia/requester-browser-xhr': 5.49.0 - '@algolia/requester-fetch': 5.49.0 - '@algolia/requester-node-http': 5.49.0 + '@algolia/client-common': 5.49.1 + '@algolia/requester-browser-xhr': 5.49.1 + '@algolia/requester-fetch': 5.49.1 + '@algolia/requester-node-http': 5.49.1 - '@algolia/client-analytics@5.49.0': + '@algolia/client-analytics@5.49.1': dependencies: - '@algolia/client-common': 5.49.0 - '@algolia/requester-browser-xhr': 5.49.0 - '@algolia/requester-fetch': 5.49.0 - '@algolia/requester-node-http': 5.49.0 + '@algolia/client-common': 5.49.1 + '@algolia/requester-browser-xhr': 5.49.1 + '@algolia/requester-fetch': 5.49.1 + '@algolia/requester-node-http': 5.49.1 - '@algolia/client-common@5.49.0': {} + '@algolia/client-common@5.49.1': {} - '@algolia/client-insights@5.49.0': + '@algolia/client-insights@5.49.1': dependencies: - '@algolia/client-common': 5.49.0 - '@algolia/requester-browser-xhr': 5.49.0 - '@algolia/requester-fetch': 5.49.0 - '@algolia/requester-node-http': 5.49.0 + '@algolia/client-common': 5.49.1 + '@algolia/requester-browser-xhr': 5.49.1 + '@algolia/requester-fetch': 5.49.1 + '@algolia/requester-node-http': 5.49.1 - '@algolia/client-personalization@5.49.0': + '@algolia/client-personalization@5.49.1': dependencies: - '@algolia/client-common': 5.49.0 - '@algolia/requester-browser-xhr': 5.49.0 - '@algolia/requester-fetch': 5.49.0 - '@algolia/requester-node-http': 5.49.0 + '@algolia/client-common': 5.49.1 + '@algolia/requester-browser-xhr': 5.49.1 + '@algolia/requester-fetch': 5.49.1 + '@algolia/requester-node-http': 5.49.1 - '@algolia/client-query-suggestions@5.49.0': + '@algolia/client-query-suggestions@5.49.1': dependencies: - '@algolia/client-common': 5.49.0 - '@algolia/requester-browser-xhr': 5.49.0 - '@algolia/requester-fetch': 5.49.0 - '@algolia/requester-node-http': 5.49.0 + '@algolia/client-common': 5.49.1 + '@algolia/requester-browser-xhr': 5.49.1 + '@algolia/requester-fetch': 5.49.1 + '@algolia/requester-node-http': 5.49.1 - '@algolia/client-search@5.49.0': + '@algolia/client-search@5.49.1': dependencies: - '@algolia/client-common': 5.49.0 - '@algolia/requester-browser-xhr': 5.49.0 - '@algolia/requester-fetch': 5.49.0 - '@algolia/requester-node-http': 5.49.0 + '@algolia/client-common': 5.49.1 + '@algolia/requester-browser-xhr': 5.49.1 + '@algolia/requester-fetch': 5.49.1 + '@algolia/requester-node-http': 5.49.1 - '@algolia/ingestion@1.49.0': + '@algolia/ingestion@1.49.1': dependencies: - '@algolia/client-common': 5.49.0 - '@algolia/requester-browser-xhr': 5.49.0 - '@algolia/requester-fetch': 5.49.0 - '@algolia/requester-node-http': 5.49.0 + '@algolia/client-common': 5.49.1 + '@algolia/requester-browser-xhr': 5.49.1 + '@algolia/requester-fetch': 5.49.1 + '@algolia/requester-node-http': 5.49.1 - '@algolia/monitoring@1.49.0': + '@algolia/monitoring@1.49.1': dependencies: - '@algolia/client-common': 5.49.0 - '@algolia/requester-browser-xhr': 5.49.0 - '@algolia/requester-fetch': 5.49.0 - '@algolia/requester-node-http': 5.49.0 + '@algolia/client-common': 5.49.1 + '@algolia/requester-browser-xhr': 5.49.1 + '@algolia/requester-fetch': 5.49.1 + '@algolia/requester-node-http': 5.49.1 - '@algolia/recommend@5.49.0': + '@algolia/recommend@5.49.1': dependencies: - '@algolia/client-common': 5.49.0 - '@algolia/requester-browser-xhr': 5.49.0 - '@algolia/requester-fetch': 5.49.0 - '@algolia/requester-node-http': 5.49.0 + '@algolia/client-common': 5.49.1 + '@algolia/requester-browser-xhr': 5.49.1 + '@algolia/requester-fetch': 5.49.1 + '@algolia/requester-node-http': 5.49.1 - '@algolia/requester-browser-xhr@5.49.0': + '@algolia/requester-browser-xhr@5.49.1': dependencies: - '@algolia/client-common': 5.49.0 + '@algolia/client-common': 5.49.1 - '@algolia/requester-fetch@5.49.0': + '@algolia/requester-fetch@5.49.1': dependencies: - '@algolia/client-common': 5.49.0 + '@algolia/client-common': 5.49.1 - '@algolia/requester-node-http@5.49.0': + '@algolia/requester-node-http@5.49.1': dependencies: - '@algolia/client-common': 5.49.0 + '@algolia/client-common': 5.49.1 '@antfu/install-pkg@1.1.0': dependencies: @@ -8462,7 +8464,7 @@ snapshots: '@babel/helper-string-parser': 7.27.1 '@babel/helper-validator-identifier': 7.28.5 - '@better-auth/core@1.4.19(@better-auth/utils@0.3.0)(@better-fetch/fetch@1.1.21)(better-call@1.1.8(zod@4.3.6))(jose@6.1.3)(kysely@0.28.11)(nanostores@1.1.0)': + '@better-auth/core@1.4.19(@better-auth/utils@0.3.0)(@better-fetch/fetch@1.1.21)(better-call@1.1.8(zod@4.3.6))(jose@6.1.3)(kysely@0.28.11)(nanostores@1.1.1)': dependencies: '@better-auth/utils': 0.3.0 '@better-fetch/fetch': 1.1.21 @@ -8470,21 +8472,21 @@ snapshots: better-call: 1.1.8(zod@4.3.6) jose: 6.1.3 kysely: 0.28.11 - nanostores: 1.1.0 + nanostores: 1.1.1 zod: 4.3.6 - '@better-auth/stripe@1.4.19(@better-auth/core@1.4.19(@better-auth/utils@0.3.0)(@better-fetch/fetch@1.1.21)(better-call@1.1.8(zod@4.3.6))(jose@6.1.3)(kysely@0.28.11)(nanostores@1.1.0))(better-auth@1.4.19(better-sqlite3@12.6.2)(drizzle-kit@0.31.9)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260302.0)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.6.2)(gel@2.2.0)(kysely@0.28.11))(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(solid-js@1.9.11)(svelte@5.46.1)(vitest@3.2.0(@types/node@25.3.0)(jiti@2.6.1)(jsdom@27.4.0(@noble/hashes@2.0.1))(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))(vue@3.5.28(typescript@5.9.3)))(better-call@1.1.8(zod@4.3.6))(stripe@20.3.1(@types/node@25.3.0))': + '@better-auth/stripe@1.4.19(@better-auth/core@1.4.19(@better-auth/utils@0.3.0)(@better-fetch/fetch@1.1.21)(better-call@1.1.8(zod@4.3.6))(jose@6.1.3)(kysely@0.28.11)(nanostores@1.1.1))(better-auth@1.4.19(better-sqlite3@12.6.2)(drizzle-kit@0.31.9)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260305.0)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.6.2)(gel@2.2.0)(kysely@0.28.11))(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(solid-js@1.9.11)(svelte@5.46.1)(vitest@3.2.0(@types/node@25.3.1)(jiti@2.6.1)(jsdom@27.4.0(@noble/hashes@2.0.1))(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))(vue@3.5.29(typescript@5.9.3)))(better-call@1.1.8(zod@4.3.6))(stripe@20.4.0(@types/node@25.3.1))': dependencies: - '@better-auth/core': 1.4.19(@better-auth/utils@0.3.0)(@better-fetch/fetch@1.1.21)(better-call@1.1.8(zod@4.3.6))(jose@6.1.3)(kysely@0.28.11)(nanostores@1.1.0) - better-auth: 1.4.19(better-sqlite3@12.6.2)(drizzle-kit@0.31.9)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260302.0)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.6.2)(gel@2.2.0)(kysely@0.28.11))(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(solid-js@1.9.11)(svelte@5.46.1)(vitest@3.2.0(@types/node@25.3.0)(jiti@2.6.1)(jsdom@27.4.0(@noble/hashes@2.0.1))(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))(vue@3.5.28(typescript@5.9.3)) + '@better-auth/core': 1.4.19(@better-auth/utils@0.3.0)(@better-fetch/fetch@1.1.21)(better-call@1.1.8(zod@4.3.6))(jose@6.1.3)(kysely@0.28.11)(nanostores@1.1.1) + better-auth: 1.4.19(better-sqlite3@12.6.2)(drizzle-kit@0.31.9)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260305.0)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.6.2)(gel@2.2.0)(kysely@0.28.11))(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(solid-js@1.9.11)(svelte@5.46.1)(vitest@3.2.0(@types/node@25.3.1)(jiti@2.6.1)(jsdom@27.4.0(@noble/hashes@2.0.1))(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))(vue@3.5.29(typescript@5.9.3)) better-call: 1.1.8(zod@4.3.6) defu: 6.1.4 - stripe: 20.3.1(@types/node@25.3.0) + stripe: 20.4.0(@types/node@25.3.1) zod: 4.3.6 - '@better-auth/telemetry@1.4.19(@better-auth/core@1.4.19(@better-auth/utils@0.3.0)(@better-fetch/fetch@1.1.21)(better-call@1.1.8(zod@4.3.6))(jose@6.1.3)(kysely@0.28.11)(nanostores@1.1.0))': + '@better-auth/telemetry@1.4.19(@better-auth/core@1.4.19(@better-auth/utils@0.3.0)(@better-fetch/fetch@1.1.21)(better-call@1.1.8(zod@4.3.6))(jose@6.1.3)(kysely@0.28.11)(nanostores@1.1.1))': dependencies: - '@better-auth/core': 1.4.19(@better-auth/utils@0.3.0)(@better-fetch/fetch@1.1.21)(better-call@1.1.8(zod@4.3.6))(jose@6.1.3)(kysely@0.28.11)(nanostores@1.1.0) + '@better-auth/core': 1.4.19(@better-auth/utils@0.3.0)(@better-fetch/fetch@1.1.21)(better-call@1.1.8(zod@4.3.6))(jose@6.1.3)(kysely@0.28.11)(nanostores@1.1.1) '@better-auth/utils': 0.3.0 '@better-fetch/fetch': 1.1.21 @@ -8520,11 +8522,11 @@ snapshots: '@cloudflare/kv-asset-handler@0.4.2': {} - '@cloudflare/unenv-preset@2.14.0(unenv@2.0.0-rc.24)(workerd@1.20260302.0)': + '@cloudflare/unenv-preset@2.14.0(unenv@2.0.0-rc.24)(workerd@1.20260305.0)': dependencies: unenv: 2.0.0-rc.24 optionalDependencies: - workerd: 1.20260302.0 + workerd: 1.20260305.0 '@cloudflare/unenv-preset@2.7.13(unenv@2.0.0-rc.24)(workerd@1.20251217.0)': dependencies: @@ -8532,7 +8534,7 @@ snapshots: optionalDependencies: workerd: 1.20251217.0 - '@cloudflare/vitest-pool-workers@0.11.1(@cloudflare/workers-types@4.20260302.0)(@vitest/runner@4.0.18)(@vitest/snapshot@4.0.18)(vitest@3.2.0(@types/node@25.3.0)(jiti@2.6.1)(jsdom@27.4.0(@noble/hashes@2.0.1))(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))': + '@cloudflare/vitest-pool-workers@0.11.1(@cloudflare/workers-types@4.20260305.0)(@vitest/runner@4.0.18)(@vitest/snapshot@4.0.18)(vitest@3.2.0(@types/node@25.3.1)(jiti@2.6.1)(jsdom@27.4.0(@noble/hashes@2.0.1))(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))': dependencies: '@vitest/runner': 4.0.18 '@vitest/snapshot': 4.0.18 @@ -8542,8 +8544,8 @@ snapshots: esbuild: 0.27.0 miniflare: 4.20251217.0 semver: 7.7.4 - vitest: 3.2.0(@types/node@25.3.0)(jiti@2.6.1)(jsdom@27.4.0(@noble/hashes@2.0.1))(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) - wrangler: 4.56.0(@cloudflare/workers-types@4.20260302.0) + vitest: 3.2.0(@types/node@25.3.1)(jiti@2.6.1)(jsdom@27.4.0(@noble/hashes@2.0.1))(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + wrangler: 4.56.0(@cloudflare/workers-types@4.20260305.0) zod: 3.25.76 transitivePeerDependencies: - '@cloudflare/workers-types' @@ -8553,34 +8555,34 @@ snapshots: '@cloudflare/workerd-darwin-64@1.20251217.0': optional: true - '@cloudflare/workerd-darwin-64@1.20260302.0': + '@cloudflare/workerd-darwin-64@1.20260305.0': optional: true '@cloudflare/workerd-darwin-arm64@1.20251217.0': optional: true - '@cloudflare/workerd-darwin-arm64@1.20260302.0': + '@cloudflare/workerd-darwin-arm64@1.20260305.0': optional: true '@cloudflare/workerd-linux-64@1.20251217.0': optional: true - '@cloudflare/workerd-linux-64@1.20260302.0': + '@cloudflare/workerd-linux-64@1.20260305.0': optional: true '@cloudflare/workerd-linux-arm64@1.20251217.0': optional: true - '@cloudflare/workerd-linux-arm64@1.20260302.0': + '@cloudflare/workerd-linux-arm64@1.20260305.0': optional: true '@cloudflare/workerd-windows-64@1.20251217.0': optional: true - '@cloudflare/workerd-windows-64@1.20260302.0': + '@cloudflare/workerd-windows-64@1.20260305.0': optional: true - '@cloudflare/workers-types@4.20260302.0': {} + '@cloudflare/workers-types@4.20260305.0': {} '@cspotcode/source-map-support@0.8.1': dependencies: @@ -8617,9 +8619,9 @@ snapshots: '@docsearch/css@3.8.2': {} - '@docsearch/js@3.8.2(@algolia/client-search@5.49.0)(search-insights@2.17.3)': + '@docsearch/js@3.8.2(@algolia/client-search@5.49.1)(search-insights@2.17.3)': dependencies: - '@docsearch/react': 3.8.2(@algolia/client-search@5.49.0)(search-insights@2.17.3) + '@docsearch/react': 3.8.2(@algolia/client-search@5.49.1)(search-insights@2.17.3) preact: 10.28.4 transitivePeerDependencies: - '@algolia/client-search' @@ -8628,12 +8630,12 @@ snapshots: - react-dom - search-insights - '@docsearch/react@3.8.2(@algolia/client-search@5.49.0)(search-insights@2.17.3)': + '@docsearch/react@3.8.2(@algolia/client-search@5.49.1)(search-insights@2.17.3)': dependencies: - '@algolia/autocomplete-core': 1.17.7(@algolia/client-search@5.49.0)(algoliasearch@5.49.0)(search-insights@2.17.3) - '@algolia/autocomplete-preset-algolia': 1.17.7(@algolia/client-search@5.49.0)(algoliasearch@5.49.0) + '@algolia/autocomplete-core': 1.17.7(@algolia/client-search@5.49.1)(algoliasearch@5.49.1)(search-insights@2.17.3) + '@algolia/autocomplete-preset-algolia': 1.17.7(@algolia/client-search@5.49.1)(algoliasearch@5.49.1) '@docsearch/css': 3.8.2 - algoliasearch: 5.49.0 + algoliasearch: 5.49.1 optionalDependencies: search-insights: 2.17.3 transitivePeerDependencies: @@ -8641,17 +8643,17 @@ snapshots: '@drizzle-team/brocli@0.10.2': {} - '@embedpdf/core@2.6.2(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3))': + '@embedpdf/core@2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3))': dependencies: - '@embedpdf/engines': 2.6.2(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3)) - '@embedpdf/models': 2.6.2 + '@embedpdf/engines': 2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) + '@embedpdf/models': 2.7.0 preact: 10.28.4 react: 19.2.4 react-dom: 19.2.3(react@19.2.4) svelte: 5.46.1 - vue: 3.5.28(typescript@5.9.3) + vue: 3.5.29(typescript@5.9.3) - '@embedpdf/engines@2.6.2(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3))': + '@embedpdf/engines@2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3))': dependencies: '@embedpdf/fonts-arabic': 1.0.0 '@embedpdf/fonts-hebrew': 1.0.0 @@ -8660,13 +8662,13 @@ snapshots: '@embedpdf/fonts-latin': 1.0.0 '@embedpdf/fonts-sc': 1.0.0 '@embedpdf/fonts-tc': 1.0.0 - '@embedpdf/models': 2.6.2 - '@embedpdf/pdfium': 2.6.2 + '@embedpdf/models': 2.7.0 + '@embedpdf/pdfium': 2.7.0 preact: 10.28.4 react: 19.2.4 react-dom: 19.2.3(react@19.2.4) svelte: 5.46.1 - vue: 3.5.28(typescript@5.9.3) + vue: 3.5.29(typescript@5.9.3) '@embedpdf/fonts-arabic@1.0.0': {} @@ -8682,282 +8684,282 @@ snapshots: '@embedpdf/fonts-tc@1.0.0': {} - '@embedpdf/models@2.6.2': {} + '@embedpdf/models@2.7.0': {} - '@embedpdf/pdfium@2.6.2': {} + '@embedpdf/pdfium@2.7.0': {} - '@embedpdf/plugin-annotation@2.6.2(ad1f116069e2875cbd7302042aaf58d3)': + '@embedpdf/plugin-annotation@2.7.0(f91e72ac9819744cb003db79e9d0556d)': dependencies: - '@embedpdf/core': 2.6.2(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3)) - '@embedpdf/models': 2.6.2 - '@embedpdf/plugin-history': 2.6.2(@embedpdf/core@2.6.2(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3)) - '@embedpdf/plugin-interaction-manager': 2.6.2(@embedpdf/core@2.6.2(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3)) - '@embedpdf/plugin-selection': 2.6.2(@embedpdf/core@2.6.2(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3)))(@embedpdf/plugin-interaction-manager@2.6.2(@embedpdf/core@2.6.2(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3)) - '@embedpdf/utils': 2.6.2(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3)) + '@embedpdf/core': 2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) + '@embedpdf/models': 2.7.0 + '@embedpdf/plugin-history': 2.7.0(@embedpdf/core@2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) + '@embedpdf/plugin-interaction-manager': 2.7.0(@embedpdf/core@2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) + '@embedpdf/plugin-selection': 2.7.0(@embedpdf/core@2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(@embedpdf/plugin-interaction-manager@2.7.0(@embedpdf/core@2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) + '@embedpdf/utils': 2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) preact: 10.28.4 react: 19.2.4 react-dom: 19.2.3(react@19.2.4) svelte: 5.46.1 - vue: 3.5.28(typescript@5.9.3) + vue: 3.5.29(typescript@5.9.3) - '@embedpdf/plugin-capture@2.6.2(@embedpdf/core@2.6.2(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3)))(@embedpdf/plugin-interaction-manager@2.6.2(@embedpdf/core@2.6.2(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3)))(@embedpdf/plugin-render@2.6.2(@embedpdf/core@2.6.2(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3))': + '@embedpdf/plugin-capture@2.7.0(@embedpdf/core@2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(@embedpdf/plugin-interaction-manager@2.7.0(@embedpdf/core@2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(@embedpdf/plugin-render@2.7.0(@embedpdf/core@2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3))': dependencies: - '@embedpdf/core': 2.6.2(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3)) - '@embedpdf/models': 2.6.2 - '@embedpdf/plugin-interaction-manager': 2.6.2(@embedpdf/core@2.6.2(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3)) - '@embedpdf/plugin-render': 2.6.2(@embedpdf/core@2.6.2(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3)) + '@embedpdf/core': 2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) + '@embedpdf/models': 2.7.0 + '@embedpdf/plugin-interaction-manager': 2.7.0(@embedpdf/core@2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) + '@embedpdf/plugin-render': 2.7.0(@embedpdf/core@2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) preact: 10.28.4 react: 19.2.4 react-dom: 19.2.3(react@19.2.4) svelte: 5.46.1 - vue: 3.5.28(typescript@5.9.3) + vue: 3.5.29(typescript@5.9.3) - '@embedpdf/plugin-commands@2.6.2(@embedpdf/core@2.6.2(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3))': + '@embedpdf/plugin-commands@2.7.0(@embedpdf/core@2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3))': dependencies: - '@embedpdf/core': 2.6.2(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3)) - '@embedpdf/models': 2.6.2 + '@embedpdf/core': 2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) + '@embedpdf/models': 2.7.0 preact: 10.28.4 react: 19.2.4 react-dom: 19.2.3(react@19.2.4) svelte: 5.46.1 - vue: 3.5.28(typescript@5.9.3) + vue: 3.5.29(typescript@5.9.3) - '@embedpdf/plugin-document-manager@2.6.2(@embedpdf/core@2.6.2(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3))': + '@embedpdf/plugin-document-manager@2.7.0(@embedpdf/core@2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3))': dependencies: - '@embedpdf/core': 2.6.2(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3)) - '@embedpdf/models': 2.6.2 + '@embedpdf/core': 2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) + '@embedpdf/models': 2.7.0 preact: 10.28.4 react: 19.2.4 react-dom: 19.2.3(react@19.2.4) svelte: 5.46.1 - vue: 3.5.28(typescript@5.9.3) + vue: 3.5.29(typescript@5.9.3) - '@embedpdf/plugin-export@2.6.2(@embedpdf/core@2.6.2(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3))': + '@embedpdf/plugin-export@2.7.0(@embedpdf/core@2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3))': dependencies: - '@embedpdf/core': 2.6.2(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3)) - '@embedpdf/models': 2.6.2 + '@embedpdf/core': 2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) + '@embedpdf/models': 2.7.0 preact: 10.28.4 react: 19.2.4 react-dom: 19.2.3(react@19.2.4) svelte: 5.46.1 - vue: 3.5.28(typescript@5.9.3) + vue: 3.5.29(typescript@5.9.3) - '@embedpdf/plugin-fullscreen@2.6.2(@embedpdf/core@2.6.2(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3))': + '@embedpdf/plugin-fullscreen@2.7.0(@embedpdf/core@2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3))': dependencies: - '@embedpdf/core': 2.6.2(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3)) - '@embedpdf/models': 2.6.2 + '@embedpdf/core': 2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) + '@embedpdf/models': 2.7.0 preact: 10.28.4 react: 19.2.4 react-dom: 19.2.3(react@19.2.4) svelte: 5.46.1 - vue: 3.5.28(typescript@5.9.3) + vue: 3.5.29(typescript@5.9.3) - '@embedpdf/plugin-history@2.6.2(@embedpdf/core@2.6.2(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3))': + '@embedpdf/plugin-history@2.7.0(@embedpdf/core@2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3))': dependencies: - '@embedpdf/core': 2.6.2(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3)) - '@embedpdf/models': 2.6.2 + '@embedpdf/core': 2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) + '@embedpdf/models': 2.7.0 preact: 10.28.4 react: 19.2.4 react-dom: 19.2.3(react@19.2.4) svelte: 5.46.1 - vue: 3.5.28(typescript@5.9.3) + vue: 3.5.29(typescript@5.9.3) - '@embedpdf/plugin-i18n@2.6.2(@embedpdf/core@2.6.2(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3))': + '@embedpdf/plugin-i18n@2.7.0(@embedpdf/core@2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3))': dependencies: - '@embedpdf/core': 2.6.2(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3)) - '@embedpdf/models': 2.6.2 + '@embedpdf/core': 2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) + '@embedpdf/models': 2.7.0 preact: 10.28.4 react: 19.2.4 react-dom: 19.2.3(react@19.2.4) svelte: 5.46.1 - vue: 3.5.28(typescript@5.9.3) + vue: 3.5.29(typescript@5.9.3) - '@embedpdf/plugin-interaction-manager@2.6.2(@embedpdf/core@2.6.2(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3))': + '@embedpdf/plugin-interaction-manager@2.7.0(@embedpdf/core@2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3))': dependencies: - '@embedpdf/core': 2.6.2(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3)) - '@embedpdf/models': 2.6.2 + '@embedpdf/core': 2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) + '@embedpdf/models': 2.7.0 preact: 10.28.4 react: 19.2.4 react-dom: 19.2.3(react@19.2.4) svelte: 5.46.1 - vue: 3.5.28(typescript@5.9.3) + vue: 3.5.29(typescript@5.9.3) - '@embedpdf/plugin-pan@2.6.2(@embedpdf/core@2.6.2(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3)))(@embedpdf/plugin-interaction-manager@2.6.2(@embedpdf/core@2.6.2(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3)))(@embedpdf/plugin-viewport@2.6.2(@embedpdf/core@2.6.2(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3))': + '@embedpdf/plugin-pan@2.7.0(@embedpdf/core@2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(@embedpdf/plugin-interaction-manager@2.7.0(@embedpdf/core@2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(@embedpdf/plugin-viewport@2.7.0(@embedpdf/core@2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3))': dependencies: - '@embedpdf/core': 2.6.2(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3)) - '@embedpdf/models': 2.6.2 - '@embedpdf/plugin-interaction-manager': 2.6.2(@embedpdf/core@2.6.2(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3)) - '@embedpdf/plugin-viewport': 2.6.2(@embedpdf/core@2.6.2(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3)) + '@embedpdf/core': 2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) + '@embedpdf/models': 2.7.0 + '@embedpdf/plugin-interaction-manager': 2.7.0(@embedpdf/core@2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) + '@embedpdf/plugin-viewport': 2.7.0(@embedpdf/core@2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) preact: 10.28.4 react: 19.2.4 react-dom: 19.2.3(react@19.2.4) svelte: 5.46.1 - vue: 3.5.28(typescript@5.9.3) + vue: 3.5.29(typescript@5.9.3) - '@embedpdf/plugin-print@2.6.2(@embedpdf/core@2.6.2(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3))': + '@embedpdf/plugin-print@2.7.0(@embedpdf/core@2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3))': dependencies: - '@embedpdf/core': 2.6.2(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3)) - '@embedpdf/models': 2.6.2 + '@embedpdf/core': 2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) + '@embedpdf/models': 2.7.0 preact: 10.28.4 react: 19.2.4 react-dom: 19.2.3(react@19.2.4) svelte: 5.46.1 - vue: 3.5.28(typescript@5.9.3) + vue: 3.5.29(typescript@5.9.3) - '@embedpdf/plugin-redaction@2.6.2(d911e0a70829346636f03fe48bccf2b8)': + '@embedpdf/plugin-redaction@2.7.0(5f456a3f53bec2768d3935038fafaf9c)': dependencies: - '@embedpdf/core': 2.6.2(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3)) - '@embedpdf/models': 2.6.2 - '@embedpdf/plugin-annotation': 2.6.2(ad1f116069e2875cbd7302042aaf58d3) - '@embedpdf/plugin-history': 2.6.2(@embedpdf/core@2.6.2(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3)) - '@embedpdf/plugin-interaction-manager': 2.6.2(@embedpdf/core@2.6.2(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3)) - '@embedpdf/plugin-selection': 2.6.2(@embedpdf/core@2.6.2(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3)))(@embedpdf/plugin-interaction-manager@2.6.2(@embedpdf/core@2.6.2(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3)) - '@embedpdf/utils': 2.6.2(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3)) + '@embedpdf/core': 2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) + '@embedpdf/models': 2.7.0 + '@embedpdf/plugin-annotation': 2.7.0(f91e72ac9819744cb003db79e9d0556d) + '@embedpdf/plugin-history': 2.7.0(@embedpdf/core@2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) + '@embedpdf/plugin-interaction-manager': 2.7.0(@embedpdf/core@2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) + '@embedpdf/plugin-selection': 2.7.0(@embedpdf/core@2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(@embedpdf/plugin-interaction-manager@2.7.0(@embedpdf/core@2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) + '@embedpdf/utils': 2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) preact: 10.28.4 react: 19.2.4 react-dom: 19.2.3(react@19.2.4) svelte: 5.46.1 - vue: 3.5.28(typescript@5.9.3) + vue: 3.5.29(typescript@5.9.3) - '@embedpdf/plugin-render@2.6.2(@embedpdf/core@2.6.2(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3))': + '@embedpdf/plugin-render@2.7.0(@embedpdf/core@2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3))': dependencies: - '@embedpdf/core': 2.6.2(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3)) - '@embedpdf/models': 2.6.2 + '@embedpdf/core': 2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) + '@embedpdf/models': 2.7.0 preact: 10.28.4 react: 19.2.4 react-dom: 19.2.3(react@19.2.4) svelte: 5.46.1 - vue: 3.5.28(typescript@5.9.3) + vue: 3.5.29(typescript@5.9.3) - '@embedpdf/plugin-rotate@2.6.2(@embedpdf/core@2.6.2(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3))': + '@embedpdf/plugin-rotate@2.7.0(@embedpdf/core@2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3))': dependencies: - '@embedpdf/core': 2.6.2(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3)) - '@embedpdf/models': 2.6.2 + '@embedpdf/core': 2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) + '@embedpdf/models': 2.7.0 preact: 10.28.4 react: 19.2.4 react-dom: 19.2.3(react@19.2.4) svelte: 5.46.1 - vue: 3.5.28(typescript@5.9.3) + vue: 3.5.29(typescript@5.9.3) - '@embedpdf/plugin-scroll@2.6.2(@embedpdf/core@2.6.2(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3)))(@embedpdf/plugin-viewport@2.6.2(@embedpdf/core@2.6.2(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3))': + '@embedpdf/plugin-scroll@2.7.0(@embedpdf/core@2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(@embedpdf/plugin-viewport@2.7.0(@embedpdf/core@2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3))': dependencies: - '@embedpdf/core': 2.6.2(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3)) - '@embedpdf/models': 2.6.2 - '@embedpdf/plugin-viewport': 2.6.2(@embedpdf/core@2.6.2(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3)) + '@embedpdf/core': 2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) + '@embedpdf/models': 2.7.0 + '@embedpdf/plugin-viewport': 2.7.0(@embedpdf/core@2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) preact: 10.28.4 react: 19.2.4 react-dom: 19.2.3(react@19.2.4) svelte: 5.46.1 - vue: 3.5.28(typescript@5.9.3) + vue: 3.5.29(typescript@5.9.3) - '@embedpdf/plugin-search@2.6.2(@embedpdf/core@2.6.2(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3))': + '@embedpdf/plugin-search@2.7.0(@embedpdf/core@2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3))': dependencies: - '@embedpdf/core': 2.6.2(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3)) - '@embedpdf/models': 2.6.2 + '@embedpdf/core': 2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) + '@embedpdf/models': 2.7.0 preact: 10.28.4 react: 19.2.4 react-dom: 19.2.3(react@19.2.4) svelte: 5.46.1 - vue: 3.5.28(typescript@5.9.3) + vue: 3.5.29(typescript@5.9.3) - '@embedpdf/plugin-selection@2.6.2(@embedpdf/core@2.6.2(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3)))(@embedpdf/plugin-interaction-manager@2.6.2(@embedpdf/core@2.6.2(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3))': + '@embedpdf/plugin-selection@2.7.0(@embedpdf/core@2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(@embedpdf/plugin-interaction-manager@2.7.0(@embedpdf/core@2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3))': dependencies: - '@embedpdf/core': 2.6.2(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3)) - '@embedpdf/models': 2.6.2 - '@embedpdf/plugin-interaction-manager': 2.6.2(@embedpdf/core@2.6.2(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3)) - '@embedpdf/utils': 2.6.2(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3)) + '@embedpdf/core': 2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) + '@embedpdf/models': 2.7.0 + '@embedpdf/plugin-interaction-manager': 2.7.0(@embedpdf/core@2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) + '@embedpdf/utils': 2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) preact: 10.28.4 react: 19.2.4 react-dom: 19.2.3(react@19.2.4) svelte: 5.46.1 - vue: 3.5.28(typescript@5.9.3) + vue: 3.5.29(typescript@5.9.3) - '@embedpdf/plugin-spread@2.6.2(@embedpdf/core@2.6.2(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3))': + '@embedpdf/plugin-spread@2.7.0(@embedpdf/core@2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3))': dependencies: - '@embedpdf/core': 2.6.2(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3)) - '@embedpdf/models': 2.6.2 + '@embedpdf/core': 2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) + '@embedpdf/models': 2.7.0 preact: 10.28.4 react: 19.2.4 react-dom: 19.2.3(react@19.2.4) svelte: 5.46.1 - vue: 3.5.28(typescript@5.9.3) + vue: 3.5.29(typescript@5.9.3) - '@embedpdf/plugin-thumbnail@2.6.2(@embedpdf/core@2.6.2(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3)))(@embedpdf/plugin-render@2.6.2(@embedpdf/core@2.6.2(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3))': + '@embedpdf/plugin-thumbnail@2.7.0(@embedpdf/core@2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(@embedpdf/plugin-render@2.7.0(@embedpdf/core@2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3))': dependencies: - '@embedpdf/core': 2.6.2(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3)) - '@embedpdf/models': 2.6.2 - '@embedpdf/plugin-render': 2.6.2(@embedpdf/core@2.6.2(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3)) + '@embedpdf/core': 2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) + '@embedpdf/models': 2.7.0 + '@embedpdf/plugin-render': 2.7.0(@embedpdf/core@2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) preact: 10.28.4 react: 19.2.4 react-dom: 19.2.3(react@19.2.4) svelte: 5.46.1 - vue: 3.5.28(typescript@5.9.3) + vue: 3.5.29(typescript@5.9.3) - '@embedpdf/plugin-tiling@2.6.2(60e3722d1129fa8e515c6cab2323c1cf)': + '@embedpdf/plugin-tiling@2.7.0(5a96f8242ae086e623dd61223674fb9c)': dependencies: - '@embedpdf/core': 2.6.2(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3)) - '@embedpdf/models': 2.6.2 - '@embedpdf/plugin-render': 2.6.2(@embedpdf/core@2.6.2(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3)) - '@embedpdf/plugin-scroll': 2.6.2(@embedpdf/core@2.6.2(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3)))(@embedpdf/plugin-viewport@2.6.2(@embedpdf/core@2.6.2(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3)) - '@embedpdf/plugin-viewport': 2.6.2(@embedpdf/core@2.6.2(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3)) + '@embedpdf/core': 2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) + '@embedpdf/models': 2.7.0 + '@embedpdf/plugin-render': 2.7.0(@embedpdf/core@2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) + '@embedpdf/plugin-scroll': 2.7.0(@embedpdf/core@2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(@embedpdf/plugin-viewport@2.7.0(@embedpdf/core@2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) + '@embedpdf/plugin-viewport': 2.7.0(@embedpdf/core@2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) preact: 10.28.4 react: 19.2.4 react-dom: 19.2.3(react@19.2.4) svelte: 5.46.1 - vue: 3.5.28(typescript@5.9.3) + vue: 3.5.29(typescript@5.9.3) - '@embedpdf/plugin-ui@2.6.2(60e3722d1129fa8e515c6cab2323c1cf)': + '@embedpdf/plugin-ui@2.7.0(5a96f8242ae086e623dd61223674fb9c)': dependencies: - '@embedpdf/core': 2.6.2(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3)) - '@embedpdf/models': 2.6.2 - '@embedpdf/plugin-render': 2.6.2(@embedpdf/core@2.6.2(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3)) - '@embedpdf/plugin-scroll': 2.6.2(@embedpdf/core@2.6.2(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3)))(@embedpdf/plugin-viewport@2.6.2(@embedpdf/core@2.6.2(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3)) - '@embedpdf/plugin-viewport': 2.6.2(@embedpdf/core@2.6.2(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3)) + '@embedpdf/core': 2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) + '@embedpdf/models': 2.7.0 + '@embedpdf/plugin-render': 2.7.0(@embedpdf/core@2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) + '@embedpdf/plugin-scroll': 2.7.0(@embedpdf/core@2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(@embedpdf/plugin-viewport@2.7.0(@embedpdf/core@2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) + '@embedpdf/plugin-viewport': 2.7.0(@embedpdf/core@2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) preact: 10.28.4 react: 19.2.4 react-dom: 19.2.3(react@19.2.4) svelte: 5.46.1 - vue: 3.5.28(typescript@5.9.3) + vue: 3.5.29(typescript@5.9.3) - '@embedpdf/plugin-view-manager@2.6.2(@embedpdf/core@2.6.2(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3))': + '@embedpdf/plugin-view-manager@2.7.0(@embedpdf/core@2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3))': dependencies: - '@embedpdf/core': 2.6.2(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3)) - '@embedpdf/models': 2.6.2 + '@embedpdf/core': 2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) + '@embedpdf/models': 2.7.0 preact: 10.28.4 react: 19.2.4 react-dom: 19.2.3(react@19.2.4) svelte: 5.46.1 - vue: 3.5.28(typescript@5.9.3) + vue: 3.5.29(typescript@5.9.3) - '@embedpdf/plugin-viewport@2.6.2(@embedpdf/core@2.6.2(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3))': + '@embedpdf/plugin-viewport@2.7.0(@embedpdf/core@2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3))': dependencies: - '@embedpdf/core': 2.6.2(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3)) - '@embedpdf/models': 2.6.2 + '@embedpdf/core': 2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) + '@embedpdf/models': 2.7.0 preact: 10.28.4 react: 19.2.4 react-dom: 19.2.3(react@19.2.4) svelte: 5.46.1 - vue: 3.5.28(typescript@5.9.3) + vue: 3.5.29(typescript@5.9.3) - '@embedpdf/plugin-zoom@2.6.2(b3109c7b9dc2ece1b638dcaeb87738a9)': + '@embedpdf/plugin-zoom@2.7.0(68cdd6270a43970eb3cc490f0b97d81a)': dependencies: - '@embedpdf/core': 2.6.2(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3)) - '@embedpdf/models': 2.6.2 - '@embedpdf/plugin-scroll': 2.6.2(@embedpdf/core@2.6.2(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3)))(@embedpdf/plugin-viewport@2.6.2(@embedpdf/core@2.6.2(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3)) - '@embedpdf/plugin-viewport': 2.6.2(@embedpdf/core@2.6.2(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3)) + '@embedpdf/core': 2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) + '@embedpdf/models': 2.7.0 + '@embedpdf/plugin-scroll': 2.7.0(@embedpdf/core@2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(@embedpdf/plugin-viewport@2.7.0(@embedpdf/core@2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) + '@embedpdf/plugin-viewport': 2.7.0(@embedpdf/core@2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) preact: 10.28.4 react: 19.2.4 react-dom: 19.2.3(react@19.2.4) svelte: 5.46.1 - vue: 3.5.28(typescript@5.9.3) + vue: 3.5.29(typescript@5.9.3) - '@embedpdf/utils@2.6.2(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.28(typescript@5.9.3))': + '@embedpdf/utils@2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3))': dependencies: preact: 10.28.4 react: 19.2.4 react-dom: 19.2.3(react@19.2.4) svelte: 5.46.1 - vue: 3.5.28(typescript@5.9.3) + vue: 3.5.29(typescript@5.9.3) '@emnapi/core@1.8.1': dependencies: @@ -9365,7 +9367,7 @@ snapshots: dependencies: '@eslint/object-schema': 2.1.7 debug: 4.4.3 - minimatch: 3.1.3 + minimatch: 3.1.5 transitivePeerDependencies: - supports-color @@ -9377,7 +9379,7 @@ snapshots: dependencies: '@types/json-schema': 7.0.15 - '@eslint/eslintrc@3.3.3': + '@eslint/eslintrc@3.3.4': dependencies: ajv: 6.14.0 debug: 4.4.3 @@ -9386,7 +9388,7 @@ snapshots: ignore: 5.3.2 import-fresh: 3.3.1 js-yaml: 4.1.1 - minimatch: 3.1.3 + minimatch: 3.1.5 strip-json-comments: 3.1.1 transitivePeerDependencies: - supports-color @@ -9415,21 +9417,21 @@ snapshots: '@floating-ui/utils@0.2.10': {} - '@hono/node-server@1.19.9(hono@4.12.2)': + '@hono/node-server@1.19.9(hono@4.12.3)': dependencies: - hono: 4.12.2 + hono: 4.12.3 - '@hono/zod-openapi@1.2.2(hono@4.12.2)(zod@4.3.6)': + '@hono/zod-openapi@1.2.2(hono@4.12.3)(zod@4.3.6)': dependencies: '@asteasolutions/zod-to-openapi': 8.4.1(zod@4.3.6) - '@hono/zod-validator': 0.7.6(hono@4.12.2)(zod@4.3.6) - hono: 4.12.2 + '@hono/zod-validator': 0.7.6(hono@4.12.3)(zod@4.3.6) + hono: 4.12.3 openapi3-ts: 4.5.0 zod: 4.3.6 - '@hono/zod-validator@0.7.6(hono@4.12.2)(zod@4.3.6)': + '@hono/zod-validator@0.7.6(hono@4.12.3)(zod@4.3.6)': dependencies: - hono: 4.12.2 + hono: 4.12.3 zod: 4.3.6 '@huggingface/jinja@0.2.2': {} @@ -9648,7 +9650,7 @@ snapshots: dependencies: string-width: 5.1.2 string-width-cjs: string-width@4.2.3 - strip-ansi: 7.1.2 + strip-ansi: 7.2.0 strip-ansi-cjs: strip-ansi@6.0.1 wrap-ansi: 8.1.0 wrap-ansi-cjs: wrap-ansi@7.0.0 @@ -9716,9 +9718,9 @@ snapshots: dependencies: langium: 4.2.1 - '@modelcontextprotocol/sdk@1.26.0(zod@4.3.6)': + '@modelcontextprotocol/sdk@1.27.1(zod@4.3.6)': dependencies: - '@hono/node-server': 1.19.9(hono@4.12.2) + '@hono/node-server': 1.19.9(hono@4.12.3) ajv: 8.18.0 ajv-formats: 3.0.1(ajv@8.18.0) content-type: 1.0.5 @@ -9728,7 +9730,7 @@ snapshots: eventsource-parser: 3.0.6 express: 5.2.1 express-rate-limit: 8.2.1(express@5.2.1) - hono: 4.12.2 + hono: 4.12.3 jose: 6.1.3 json-schema-typed: 8.0.2 pkce-challenge: 5.0.1 @@ -9854,20 +9856,26 @@ snapshots: '@sindresorhus/is': 7.2.0 supports-color: 10.2.2 + '@poppinss/dumper@0.7.0': + dependencies: + '@poppinss/colors': 4.1.6 + '@sindresorhus/is': 7.2.0 + supports-color: 10.2.2 + '@poppinss/exception@1.2.3': {} - '@preact/preset-vite@2.10.3(@babel/core@7.29.0)(preact@10.28.4)(rollup@4.59.0)(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))': + '@preact/preset-vite@2.10.3(@babel/core@7.29.0)(preact@10.28.4)(rollup@4.59.0)(vite@7.3.1(@types/node@25.3.1)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))': dependencies: '@babel/core': 7.29.0 '@babel/plugin-transform-react-jsx': 7.28.6(@babel/core@7.29.0) '@babel/plugin-transform-react-jsx-development': 7.27.1(@babel/core@7.29.0) - '@prefresh/vite': 2.4.12(preact@10.28.4)(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)) + '@prefresh/vite': 2.4.12(preact@10.28.4)(vite@7.3.1(@types/node@25.3.1)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)) '@rollup/pluginutils': 5.3.0(rollup@4.59.0) babel-plugin-transform-hook-names: 1.0.2(@babel/core@7.29.0) debug: 4.4.3 picocolors: 1.1.1 - vite: 7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) - vite-prerender-plugin: 0.5.12(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)) + vite: 7.3.1(@types/node@25.3.1)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + vite-prerender-plugin: 0.5.12(vite@7.3.1(@types/node@25.3.1)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)) transitivePeerDependencies: - preact - rollup @@ -9881,7 +9889,7 @@ snapshots: '@prefresh/utils@1.2.1': {} - '@prefresh/vite@2.4.12(preact@10.28.4)(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))': + '@prefresh/vite@2.4.12(preact@10.28.4)(vite@7.3.1(@types/node@25.3.1)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))': dependencies: '@babel/core': 7.29.0 '@prefresh/babel-plugin': 0.5.3 @@ -9889,7 +9897,7 @@ snapshots: '@prefresh/utils': 1.2.1 '@rollup/pluginutils': 4.2.1 preact: 10.28.4 - vite: 7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + vite: 7.3.1(@types/node@25.3.1)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) transitivePeerDependencies: - supports-color @@ -10121,45 +10129,45 @@ snapshots: '@rollup/rollup-win32-x64-msvc@4.59.0': optional: true - '@sentry-internal/browser-utils@10.39.0': + '@sentry-internal/browser-utils@10.40.0': dependencies: - '@sentry/core': 10.39.0 + '@sentry/core': 10.40.0 - '@sentry-internal/feedback@10.39.0': + '@sentry-internal/feedback@10.40.0': dependencies: - '@sentry/core': 10.39.0 + '@sentry/core': 10.40.0 - '@sentry-internal/replay-canvas@10.39.0': + '@sentry-internal/replay-canvas@10.40.0': dependencies: - '@sentry-internal/replay': 10.39.0 - '@sentry/core': 10.39.0 + '@sentry-internal/replay': 10.40.0 + '@sentry/core': 10.40.0 - '@sentry-internal/replay@10.39.0': + '@sentry-internal/replay@10.40.0': dependencies: - '@sentry-internal/browser-utils': 10.39.0 - '@sentry/core': 10.39.0 + '@sentry-internal/browser-utils': 10.40.0 + '@sentry/core': 10.40.0 - '@sentry/browser@10.39.0': + '@sentry/browser@10.40.0': dependencies: - '@sentry-internal/browser-utils': 10.39.0 - '@sentry-internal/feedback': 10.39.0 - '@sentry-internal/replay': 10.39.0 - '@sentry-internal/replay-canvas': 10.39.0 - '@sentry/core': 10.39.0 + '@sentry-internal/browser-utils': 10.40.0 + '@sentry-internal/feedback': 10.40.0 + '@sentry-internal/replay': 10.40.0 + '@sentry-internal/replay-canvas': 10.40.0 + '@sentry/core': 10.40.0 - '@sentry/cloudflare@10.39.0(@cloudflare/workers-types@4.20260302.0)': + '@sentry/cloudflare@10.40.0(@cloudflare/workers-types@4.20260305.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@sentry/core': 10.39.0 + '@sentry/core': 10.40.0 optionalDependencies: - '@cloudflare/workers-types': 4.20260302.0 + '@cloudflare/workers-types': 4.20260305.0 - '@sentry/core@10.39.0': {} + '@sentry/core@10.40.0': {} - '@sentry/solid@10.39.0(@solidjs/router@0.15.4(solid-js@1.9.11))(solid-js@1.9.11)': + '@sentry/solid@10.40.0(@solidjs/router@0.15.4(solid-js@1.9.11))(solid-js@1.9.11)': dependencies: - '@sentry/browser': 10.39.0 - '@sentry/core': 10.39.0 + '@sentry/browser': 10.40.0 + '@sentry/core': 10.40.0 solid-js: 1.9.11 optionalDependencies: '@solidjs/router': 0.15.4(solid-js@1.9.11) @@ -10257,11 +10265,11 @@ snapshots: dependencies: solid-js: 1.9.11 - '@solidjs/start@1.3.0(@testing-library/jest-dom@6.9.1)(solid-js@1.9.11)(vinxi@0.5.11(@types/node@25.3.0)(better-sqlite3@12.6.2)(db0@0.3.4(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260302.0)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.6.2)(gel@2.2.0)(kysely@0.28.11)))(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260302.0)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.6.2)(gel@2.2.0)(kysely@0.28.11))(ioredis@5.9.3)(jiti@2.6.1)(lightningcss@1.31.1)(rolldown@1.0.0-beta.51)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))': + '@solidjs/start@1.3.2(@testing-library/jest-dom@6.9.1)(solid-js@1.9.11)(vinxi@0.5.11(@types/node@25.3.1)(better-sqlite3@12.6.2)(db0@0.3.4(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260305.0)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.6.2)(gel@2.2.0)(kysely@0.28.11)))(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260305.0)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.6.2)(gel@2.2.0)(kysely@0.28.11))(ioredis@5.9.3)(jiti@2.6.1)(lightningcss@1.31.1)(rolldown@1.0.0-beta.51)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))(vite@7.3.1(@types/node@25.3.1)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))': dependencies: - '@tanstack/server-functions-plugin': 1.121.21(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)) - '@vinxi/plugin-directives': 0.5.1(vinxi@0.5.11(@types/node@25.3.0)(better-sqlite3@12.6.2)(db0@0.3.4(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260302.0)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.6.2)(gel@2.2.0)(kysely@0.28.11)))(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260302.0)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.6.2)(gel@2.2.0)(kysely@0.28.11))(ioredis@5.9.3)(jiti@2.6.1)(lightningcss@1.31.1)(rolldown@1.0.0-beta.51)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)) - '@vinxi/server-components': 0.5.1(vinxi@0.5.11(@types/node@25.3.0)(better-sqlite3@12.6.2)(db0@0.3.4(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260302.0)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.6.2)(gel@2.2.0)(kysely@0.28.11)))(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260302.0)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.6.2)(gel@2.2.0)(kysely@0.28.11))(ioredis@5.9.3)(jiti@2.6.1)(lightningcss@1.31.1)(rolldown@1.0.0-beta.51)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)) + '@tanstack/server-functions-plugin': 1.121.21(vite@7.3.1(@types/node@25.3.1)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)) + '@vinxi/plugin-directives': 0.5.1(vinxi@0.5.11(@types/node@25.3.1)(better-sqlite3@12.6.2)(db0@0.3.4(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260305.0)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.6.2)(gel@2.2.0)(kysely@0.28.11)))(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260305.0)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.6.2)(gel@2.2.0)(kysely@0.28.11))(ioredis@5.9.3)(jiti@2.6.1)(lightningcss@1.31.1)(rolldown@1.0.0-beta.51)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)) + '@vinxi/server-components': 0.5.1(vinxi@0.5.11(@types/node@25.3.1)(better-sqlite3@12.6.2)(db0@0.3.4(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260305.0)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.6.2)(gel@2.2.0)(kysely@0.28.11)))(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260305.0)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.6.2)(gel@2.2.0)(kysely@0.28.11))(ioredis@5.9.3)(jiti@2.6.1)(lightningcss@1.31.1)(rolldown@1.0.0-beta.51)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)) cookie-es: 2.0.0 defu: 6.1.4 error-stack-parser: 2.1.4 @@ -10273,8 +10281,8 @@ snapshots: source-map-js: 1.2.1 terracotta: 1.1.0(solid-js@1.9.11) tinyglobby: 0.2.15 - vinxi: 0.5.11(@types/node@25.3.0)(better-sqlite3@12.6.2)(db0@0.3.4(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260302.0)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.6.2)(gel@2.2.0)(kysely@0.28.11)))(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260302.0)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.6.2)(gel@2.2.0)(kysely@0.28.11))(ioredis@5.9.3)(jiti@2.6.1)(lightningcss@1.31.1)(rolldown@1.0.0-beta.51)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) - vite-plugin-solid: 2.11.10(@testing-library/jest-dom@6.9.1)(solid-js@1.9.11)(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)) + vinxi: 0.5.11(@types/node@25.3.1)(better-sqlite3@12.6.2)(db0@0.3.4(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260305.0)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.6.2)(gel@2.2.0)(kysely@0.28.11)))(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260305.0)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.6.2)(gel@2.2.0)(kysely@0.28.11))(ioredis@5.9.3)(jiti@2.6.1)(lightningcss@1.31.1)(rolldown@1.0.0-beta.51)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + vite-plugin-solid: 2.11.10(@testing-library/jest-dom@6.9.1)(solid-js@1.9.11)(vite@7.3.1(@types/node@25.3.1)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)) transitivePeerDependencies: - '@testing-library/jest-dom' - solid-js @@ -10361,14 +10369,14 @@ snapshots: '@tailwindcss/oxide-win32-arm64-msvc': 4.2.1 '@tailwindcss/oxide-win32-x64-msvc': 4.2.1 - '@tailwindcss/vite@4.2.1(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))': + '@tailwindcss/vite@4.2.1(vite@7.3.1(@types/node@25.3.1)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))': dependencies: '@tailwindcss/node': 4.2.1 '@tailwindcss/oxide': 4.2.1 tailwindcss: 4.2.1 - vite: 7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + vite: 7.3.1(@types/node@25.3.1)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) - '@tanstack/directive-functions-plugin@1.121.21(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))': + '@tanstack/directive-functions-plugin@1.121.21(vite@7.3.1(@types/node@25.3.1)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))': dependencies: '@babel/code-frame': 7.26.2 '@babel/core': 7.29.0 @@ -10377,7 +10385,7 @@ snapshots: '@tanstack/router-utils': 1.161.4 babel-dead-code-elimination: 1.0.12 tiny-invariant: 1.3.3 - vite: 7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + vite: 7.3.1(@types/node@25.3.1)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) transitivePeerDependencies: - supports-color @@ -10399,7 +10407,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@tanstack/server-functions-plugin@1.121.21(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))': + '@tanstack/server-functions-plugin@1.121.21(vite@7.3.1(@types/node@25.3.1)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))': dependencies: '@babel/code-frame': 7.26.2 '@babel/core': 7.29.0 @@ -10408,7 +10416,7 @@ snapshots: '@babel/template': 7.28.6 '@babel/traverse': 7.29.0 '@babel/types': 7.29.0 - '@tanstack/directive-functions-plugin': 1.121.21(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)) + '@tanstack/directive-functions-plugin': 1.121.21(vite@7.3.1(@types/node@25.3.1)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)) babel-dead-code-elimination: 1.0.12 tiny-invariant: 1.3.3 transitivePeerDependencies: @@ -10485,7 +10493,7 @@ snapshots: '@types/better-sqlite3@7.6.13': dependencies: - '@types/node': 25.3.0 + '@types/node': 25.3.1 '@types/braces@3.0.5': {} @@ -10642,7 +10650,7 @@ snapshots: dependencies: '@types/braces': 3.0.5 - '@types/node@25.3.0': + '@types/node@25.3.1': dependencies: undici-types: 7.18.2 @@ -10657,7 +10665,7 @@ snapshots: '@types/yauzl@2.10.3': dependencies: - '@types/node': 25.3.0 + '@types/node': 25.3.1 optional: true '@typescript-eslint/parser@8.56.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3)': @@ -10699,7 +10707,7 @@ snapshots: '@typescript-eslint/types': 8.56.1 '@typescript-eslint/visitor-keys': 8.56.1 debug: 4.4.3 - minimatch: 10.2.2 + minimatch: 10.2.4 semver: 7.7.4 tinyglobby: 0.2.15 ts-api-utils: 2.4.0(typescript@5.9.3) @@ -10764,7 +10772,7 @@ snapshots: untun: 0.1.3 uqr: 0.1.2 - '@vinxi/plugin-directives@0.5.1(vinxi@0.5.11(@types/node@25.3.0)(better-sqlite3@12.6.2)(db0@0.3.4(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260302.0)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.6.2)(gel@2.2.0)(kysely@0.28.11)))(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260302.0)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.6.2)(gel@2.2.0)(kysely@0.28.11))(ioredis@5.9.3)(jiti@2.6.1)(lightningcss@1.31.1)(rolldown@1.0.0-beta.51)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))': + '@vinxi/plugin-directives@0.5.1(vinxi@0.5.11(@types/node@25.3.1)(better-sqlite3@12.6.2)(db0@0.3.4(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260305.0)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.6.2)(gel@2.2.0)(kysely@0.28.11)))(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260305.0)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.6.2)(gel@2.2.0)(kysely@0.28.11))(ioredis@5.9.3)(jiti@2.6.1)(lightningcss@1.31.1)(rolldown@1.0.0-beta.51)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))': dependencies: '@babel/parser': 7.29.0 acorn: 8.16.0 @@ -10775,23 +10783,23 @@ snapshots: magicast: 0.2.11 recast: 0.23.11 tslib: 2.8.1 - vinxi: 0.5.11(@types/node@25.3.0)(better-sqlite3@12.6.2)(db0@0.3.4(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260302.0)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.6.2)(gel@2.2.0)(kysely@0.28.11)))(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260302.0)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.6.2)(gel@2.2.0)(kysely@0.28.11))(ioredis@5.9.3)(jiti@2.6.1)(lightningcss@1.31.1)(rolldown@1.0.0-beta.51)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + vinxi: 0.5.11(@types/node@25.3.1)(better-sqlite3@12.6.2)(db0@0.3.4(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260305.0)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.6.2)(gel@2.2.0)(kysely@0.28.11)))(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260305.0)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.6.2)(gel@2.2.0)(kysely@0.28.11))(ioredis@5.9.3)(jiti@2.6.1)(lightningcss@1.31.1)(rolldown@1.0.0-beta.51)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) - '@vinxi/server-components@0.5.1(vinxi@0.5.11(@types/node@25.3.0)(better-sqlite3@12.6.2)(db0@0.3.4(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260302.0)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.6.2)(gel@2.2.0)(kysely@0.28.11)))(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260302.0)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.6.2)(gel@2.2.0)(kysely@0.28.11))(ioredis@5.9.3)(jiti@2.6.1)(lightningcss@1.31.1)(rolldown@1.0.0-beta.51)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))': + '@vinxi/server-components@0.5.1(vinxi@0.5.11(@types/node@25.3.1)(better-sqlite3@12.6.2)(db0@0.3.4(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260305.0)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.6.2)(gel@2.2.0)(kysely@0.28.11)))(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260305.0)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.6.2)(gel@2.2.0)(kysely@0.28.11))(ioredis@5.9.3)(jiti@2.6.1)(lightningcss@1.31.1)(rolldown@1.0.0-beta.51)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))': dependencies: - '@vinxi/plugin-directives': 0.5.1(vinxi@0.5.11(@types/node@25.3.0)(better-sqlite3@12.6.2)(db0@0.3.4(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260302.0)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.6.2)(gel@2.2.0)(kysely@0.28.11)))(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260302.0)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.6.2)(gel@2.2.0)(kysely@0.28.11))(ioredis@5.9.3)(jiti@2.6.1)(lightningcss@1.31.1)(rolldown@1.0.0-beta.51)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)) + '@vinxi/plugin-directives': 0.5.1(vinxi@0.5.11(@types/node@25.3.1)(better-sqlite3@12.6.2)(db0@0.3.4(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260305.0)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.6.2)(gel@2.2.0)(kysely@0.28.11)))(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260305.0)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.6.2)(gel@2.2.0)(kysely@0.28.11))(ioredis@5.9.3)(jiti@2.6.1)(lightningcss@1.31.1)(rolldown@1.0.0-beta.51)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)) acorn: 8.16.0 acorn-loose: 8.5.2 acorn-typescript: 1.4.13(acorn@8.16.0) astring: 1.9.0 magicast: 0.2.11 recast: 0.23.11 - vinxi: 0.5.11(@types/node@25.3.0)(better-sqlite3@12.6.2)(db0@0.3.4(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260302.0)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.6.2)(gel@2.2.0)(kysely@0.28.11)))(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260302.0)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.6.2)(gel@2.2.0)(kysely@0.28.11))(ioredis@5.9.3)(jiti@2.6.1)(lightningcss@1.31.1)(rolldown@1.0.0-beta.51)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + vinxi: 0.5.11(@types/node@25.3.1)(better-sqlite3@12.6.2)(db0@0.3.4(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260305.0)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.6.2)(gel@2.2.0)(kysely@0.28.11)))(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260305.0)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.6.2)(gel@2.2.0)(kysely@0.28.11))(ioredis@5.9.3)(jiti@2.6.1)(lightningcss@1.31.1)(rolldown@1.0.0-beta.51)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) - '@vitejs/plugin-vue@5.2.4(vite@5.4.21(@types/node@25.3.0)(lightningcss@1.31.1)(terser@5.46.0))(vue@3.5.28(typescript@5.9.3))': + '@vitejs/plugin-vue@5.2.4(vite@5.4.21(@types/node@25.3.1)(lightningcss@1.31.1)(terser@5.46.0))(vue@3.5.29(typescript@5.9.3))': dependencies: - vite: 5.4.21(@types/node@25.3.0)(lightningcss@1.31.1)(terser@5.46.0) - vue: 3.5.28(typescript@5.9.3) + vite: 5.4.21(@types/node@25.3.1)(lightningcss@1.31.1)(terser@5.46.0) + vue: 3.5.29(typescript@5.9.3) '@vitest/expect@3.2.0': dependencies: @@ -10810,21 +10818,21 @@ snapshots: chai: 6.2.2 tinyrainbow: 3.0.3 - '@vitest/mocker@3.2.0(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))': + '@vitest/mocker@3.2.0(vite@7.3.1(@types/node@25.3.1)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))': dependencies: '@vitest/spy': 3.2.0 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - vite: 7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + vite: 7.3.1(@types/node@25.3.1)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) - '@vitest/mocker@4.0.18(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))': + '@vitest/mocker@4.0.18(vite@7.3.1(@types/node@25.3.1)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))': dependencies: '@vitest/spy': 4.0.18 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - vite: 7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + vite: 7.3.1(@types/node@25.3.1)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) '@vitest/pretty-format@3.2.0': dependencies: @@ -10875,7 +10883,7 @@ snapshots: sirv: 3.0.2 tinyglobby: 0.2.15 tinyrainbow: 3.0.3 - vitest: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.3.0)(@vitest/ui@4.0.18)(jiti@2.6.1)(jsdom@27.4.0(@noble/hashes@2.0.1))(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + vitest: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.3.1)(@vitest/ui@4.0.18)(jiti@2.6.1)(jsdom@27.4.0(@noble/hashes@2.0.1))(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) '@vitest/utils@3.2.0': dependencies: @@ -10888,35 +10896,35 @@ snapshots: '@vitest/pretty-format': 4.0.18 tinyrainbow: 3.0.3 - '@vue/compiler-core@3.5.28': + '@vue/compiler-core@3.5.29': dependencies: '@babel/parser': 7.29.0 - '@vue/shared': 3.5.28 + '@vue/shared': 3.5.29 entities: 7.0.1 estree-walker: 2.0.2 source-map-js: 1.2.1 - '@vue/compiler-dom@3.5.28': + '@vue/compiler-dom@3.5.29': dependencies: - '@vue/compiler-core': 3.5.28 - '@vue/shared': 3.5.28 + '@vue/compiler-core': 3.5.29 + '@vue/shared': 3.5.29 - '@vue/compiler-sfc@3.5.28': + '@vue/compiler-sfc@3.5.29': dependencies: '@babel/parser': 7.29.0 - '@vue/compiler-core': 3.5.28 - '@vue/compiler-dom': 3.5.28 - '@vue/compiler-ssr': 3.5.28 - '@vue/shared': 3.5.28 + '@vue/compiler-core': 3.5.29 + '@vue/compiler-dom': 3.5.29 + '@vue/compiler-ssr': 3.5.29 + '@vue/shared': 3.5.29 estree-walker: 2.0.2 magic-string: 0.30.21 postcss: 8.5.6 source-map-js: 1.2.1 - '@vue/compiler-ssr@3.5.28': + '@vue/compiler-ssr@3.5.29': dependencies: - '@vue/compiler-dom': 3.5.28 - '@vue/shared': 3.5.28 + '@vue/compiler-dom': 3.5.29 + '@vue/shared': 3.5.29 '@vue/devtools-api@7.7.9': dependencies: @@ -10936,36 +10944,36 @@ snapshots: dependencies: rfdc: 1.4.1 - '@vue/reactivity@3.5.28': + '@vue/reactivity@3.5.29': dependencies: - '@vue/shared': 3.5.28 + '@vue/shared': 3.5.29 - '@vue/runtime-core@3.5.28': + '@vue/runtime-core@3.5.29': dependencies: - '@vue/reactivity': 3.5.28 - '@vue/shared': 3.5.28 + '@vue/reactivity': 3.5.29 + '@vue/shared': 3.5.29 - '@vue/runtime-dom@3.5.28': + '@vue/runtime-dom@3.5.29': dependencies: - '@vue/reactivity': 3.5.28 - '@vue/runtime-core': 3.5.28 - '@vue/shared': 3.5.28 + '@vue/reactivity': 3.5.29 + '@vue/runtime-core': 3.5.29 + '@vue/shared': 3.5.29 csstype: 3.2.3 - '@vue/server-renderer@3.5.28(vue@3.5.28(typescript@5.9.3))': + '@vue/server-renderer@3.5.29(vue@3.5.29(typescript@5.9.3))': dependencies: - '@vue/compiler-ssr': 3.5.28 - '@vue/shared': 3.5.28 - vue: 3.5.28(typescript@5.9.3) + '@vue/compiler-ssr': 3.5.29 + '@vue/shared': 3.5.29 + vue: 3.5.29(typescript@5.9.3) - '@vue/shared@3.5.28': {} + '@vue/shared@3.5.29': {} '@vueuse/core@12.8.2(typescript@5.9.3)': dependencies: '@types/web-bluetooth': 0.0.21 '@vueuse/metadata': 12.8.2 '@vueuse/shared': 12.8.2(typescript@5.9.3) - vue: 3.5.28(typescript@5.9.3) + vue: 3.5.29(typescript@5.9.3) transitivePeerDependencies: - typescript @@ -10973,7 +10981,7 @@ snapshots: dependencies: '@vueuse/core': 12.8.2(typescript@5.9.3) '@vueuse/shared': 12.8.2(typescript@5.9.3) - vue: 3.5.28(typescript@5.9.3) + vue: 3.5.29(typescript@5.9.3) optionalDependencies: axios: 1.13.5 change-case: 5.4.4 @@ -10985,7 +10993,7 @@ snapshots: '@vueuse/shared@12.8.2(typescript@5.9.3)': dependencies: - vue: 3.5.28(typescript@5.9.3) + vue: 3.5.29(typescript@5.9.3) transitivePeerDependencies: - typescript @@ -11615,22 +11623,22 @@ snapshots: json-schema-traverse: 1.0.0 require-from-string: 2.0.2 - algoliasearch@5.49.0: - dependencies: - '@algolia/abtesting': 1.15.0 - '@algolia/client-abtesting': 5.49.0 - '@algolia/client-analytics': 5.49.0 - '@algolia/client-common': 5.49.0 - '@algolia/client-insights': 5.49.0 - '@algolia/client-personalization': 5.49.0 - '@algolia/client-query-suggestions': 5.49.0 - '@algolia/client-search': 5.49.0 - '@algolia/ingestion': 1.49.0 - '@algolia/monitoring': 1.49.0 - '@algolia/recommend': 5.49.0 - '@algolia/requester-browser-xhr': 5.49.0 - '@algolia/requester-fetch': 5.49.0 - '@algolia/requester-node-http': 5.49.0 + algoliasearch@5.49.1: + dependencies: + '@algolia/abtesting': 1.15.1 + '@algolia/client-abtesting': 5.49.1 + '@algolia/client-analytics': 5.49.1 + '@algolia/client-common': 5.49.1 + '@algolia/client-insights': 5.49.1 + '@algolia/client-personalization': 5.49.1 + '@algolia/client-query-suggestions': 5.49.1 + '@algolia/client-search': 5.49.1 + '@algolia/ingestion': 1.49.1 + '@algolia/monitoring': 1.49.1 + '@algolia/recommend': 5.49.1 + '@algolia/requester-browser-xhr': 5.49.1 + '@algolia/requester-fetch': 5.49.1 + '@algolia/requester-node-http': 5.49.1 ansi-align@3.0.1: dependencies: @@ -11757,7 +11765,7 @@ snapshots: bare-events@2.8.2: {} - bare-fs@4.5.4: + bare-fs@4.5.5: dependencies: bare-events: 2.8.2 bare-path: 3.0.0 @@ -11769,12 +11777,12 @@ snapshots: - react-native-b4a optional: true - bare-os@3.6.2: + bare-os@3.7.0: optional: true bare-path@3.0.0: dependencies: - bare-os: 3.6.2 + bare-os: 3.7.0 optional: true bare-stream@2.8.0(bare-events@2.8.2): @@ -11799,10 +11807,10 @@ snapshots: basic-ftp@5.2.0: {} - better-auth@1.4.19(better-sqlite3@12.6.2)(drizzle-kit@0.31.9)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260302.0)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.6.2)(gel@2.2.0)(kysely@0.28.11))(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(solid-js@1.9.11)(svelte@5.46.1)(vitest@3.2.0(@types/node@25.3.0)(jiti@2.6.1)(jsdom@27.4.0(@noble/hashes@2.0.1))(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))(vue@3.5.28(typescript@5.9.3)): + better-auth@1.4.19(better-sqlite3@12.6.2)(drizzle-kit@0.31.9)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260305.0)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.6.2)(gel@2.2.0)(kysely@0.28.11))(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(solid-js@1.9.11)(svelte@5.46.1)(vitest@3.2.0(@types/node@25.3.1)(jiti@2.6.1)(jsdom@27.4.0(@noble/hashes@2.0.1))(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))(vue@3.5.29(typescript@5.9.3)): dependencies: - '@better-auth/core': 1.4.19(@better-auth/utils@0.3.0)(@better-fetch/fetch@1.1.21)(better-call@1.1.8(zod@4.3.6))(jose@6.1.3)(kysely@0.28.11)(nanostores@1.1.0) - '@better-auth/telemetry': 1.4.19(@better-auth/core@1.4.19(@better-auth/utils@0.3.0)(@better-fetch/fetch@1.1.21)(better-call@1.1.8(zod@4.3.6))(jose@6.1.3)(kysely@0.28.11)(nanostores@1.1.0)) + '@better-auth/core': 1.4.19(@better-auth/utils@0.3.0)(@better-fetch/fetch@1.1.21)(better-call@1.1.8(zod@4.3.6))(jose@6.1.3)(kysely@0.28.11)(nanostores@1.1.1) + '@better-auth/telemetry': 1.4.19(@better-auth/core@1.4.19(@better-auth/utils@0.3.0)(@better-fetch/fetch@1.1.21)(better-call@1.1.8(zod@4.3.6))(jose@6.1.3)(kysely@0.28.11)(nanostores@1.1.1)) '@better-auth/utils': 0.3.0 '@better-fetch/fetch': 1.1.21 '@noble/ciphers': 2.1.1 @@ -11811,23 +11819,23 @@ snapshots: defu: 6.1.4 jose: 6.1.3 kysely: 0.28.11 - nanostores: 1.1.0 + nanostores: 1.1.1 zod: 4.3.6 optionalDependencies: better-sqlite3: 12.6.2 drizzle-kit: 0.31.9 - drizzle-orm: 0.45.1(@cloudflare/workers-types@4.20260302.0)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.6.2)(gel@2.2.0)(kysely@0.28.11) + drizzle-orm: 0.45.1(@cloudflare/workers-types@4.20260305.0)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.6.2)(gel@2.2.0)(kysely@0.28.11) react: 19.2.4 react-dom: 19.2.3(react@19.2.4) solid-js: 1.9.11 svelte: 5.46.1 - vitest: 3.2.0(@types/node@25.3.0)(jiti@2.6.1)(jsdom@27.4.0(@noble/hashes@2.0.1))(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) - vue: 3.5.28(typescript@5.9.3) + vitest: 3.2.0(@types/node@25.3.1)(jiti@2.6.1)(jsdom@27.4.0(@noble/hashes@2.0.1))(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + vue: 3.5.29(typescript@5.9.3) - better-auth@1.4.19(better-sqlite3@12.6.2)(drizzle-kit@0.31.9)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260302.0)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.6.2)(gel@2.2.0)(kysely@0.28.11))(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(solid-js@1.9.11)(svelte@5.46.1)(vitest@4.0.18)(vue@3.5.28(typescript@5.9.3)): + better-auth@1.4.19(better-sqlite3@12.6.2)(drizzle-kit@0.31.9)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260305.0)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.6.2)(gel@2.2.0)(kysely@0.28.11))(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(solid-js@1.9.11)(svelte@5.46.1)(vitest@4.0.18)(vue@3.5.29(typescript@5.9.3)): dependencies: - '@better-auth/core': 1.4.19(@better-auth/utils@0.3.0)(@better-fetch/fetch@1.1.21)(better-call@1.1.8(zod@4.3.6))(jose@6.1.3)(kysely@0.28.11)(nanostores@1.1.0) - '@better-auth/telemetry': 1.4.19(@better-auth/core@1.4.19(@better-auth/utils@0.3.0)(@better-fetch/fetch@1.1.21)(better-call@1.1.8(zod@4.3.6))(jose@6.1.3)(kysely@0.28.11)(nanostores@1.1.0)) + '@better-auth/core': 1.4.19(@better-auth/utils@0.3.0)(@better-fetch/fetch@1.1.21)(better-call@1.1.8(zod@4.3.6))(jose@6.1.3)(kysely@0.28.11)(nanostores@1.1.1) + '@better-auth/telemetry': 1.4.19(@better-auth/core@1.4.19(@better-auth/utils@0.3.0)(@better-fetch/fetch@1.1.21)(better-call@1.1.8(zod@4.3.6))(jose@6.1.3)(kysely@0.28.11)(nanostores@1.1.1)) '@better-auth/utils': 0.3.0 '@better-fetch/fetch': 1.1.21 '@noble/ciphers': 2.1.1 @@ -11836,18 +11844,18 @@ snapshots: defu: 6.1.4 jose: 6.1.3 kysely: 0.28.11 - nanostores: 1.1.0 + nanostores: 1.1.1 zod: 4.3.6 optionalDependencies: better-sqlite3: 12.6.2 drizzle-kit: 0.31.9 - drizzle-orm: 0.45.1(@cloudflare/workers-types@4.20260302.0)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.6.2)(gel@2.2.0)(kysely@0.28.11) + drizzle-orm: 0.45.1(@cloudflare/workers-types@4.20260305.0)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.6.2)(gel@2.2.0)(kysely@0.28.11) react: 19.2.4 react-dom: 19.2.3(react@19.2.4) solid-js: 1.9.11 svelte: 5.46.1 - vitest: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.3.0)(@vitest/ui@4.0.18)(jiti@2.6.1)(jsdom@27.4.0(@noble/hashes@2.0.1))(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) - vue: 3.5.28(typescript@5.9.3) + vitest: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.3.1)(@vitest/ui@4.0.18)(jiti@2.6.1)(jsdom@27.4.0(@noble/hashes@2.0.1))(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + vue: 3.5.29(typescript@5.9.3) better-call@1.1.8(zod@4.3.6): dependencies: @@ -12477,10 +12485,10 @@ snapshots: dayjs@1.11.19: {} - db0@0.3.4(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260302.0)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.6.2)(gel@2.2.0)(kysely@0.28.11)): + db0@0.3.4(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260305.0)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.6.2)(gel@2.2.0)(kysely@0.28.11)): optionalDependencies: better-sqlite3: 12.6.2 - drizzle-orm: 0.45.1(@cloudflare/workers-types@4.20260302.0)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.6.2)(gel@2.2.0)(kysely@0.28.11) + drizzle-orm: 0.45.1(@cloudflare/workers-types@4.20260305.0)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.6.2)(gel@2.2.0)(kysely@0.28.11) debug@2.6.9: dependencies: @@ -12596,9 +12604,9 @@ snapshots: transitivePeerDependencies: - supports-color - drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260302.0)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.6.2)(gel@2.2.0)(kysely@0.28.11): + drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260305.0)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.6.2)(gel@2.2.0)(kysely@0.28.11): optionalDependencies: - '@cloudflare/workers-types': 4.20260302.0 + '@cloudflare/workers-types': 4.20260305.0 '@opentelemetry/api': 1.9.0 '@types/better-sqlite3': 7.6.13 better-sqlite3: 12.6.2 @@ -12920,7 +12928,7 @@ snapshots: '@eslint/config-array': 0.21.1 '@eslint/config-helpers': 0.4.2 '@eslint/core': 0.17.0 - '@eslint/eslintrc': 3.3.3 + '@eslint/eslintrc': 3.3.4 '@eslint/js': 9.39.3 '@eslint/plugin-kit': 0.4.1 '@humanfs/node': 0.16.7 @@ -12946,7 +12954,7 @@ snapshots: is-glob: 4.0.3 json-stable-stringify-without-jsonify: 1.0.1 lodash.merge: 4.6.2 - minimatch: 3.1.3 + minimatch: 3.1.5 natural-compare: 1.4.0 optionator: 0.9.4 optionalDependencies: @@ -13114,9 +13122,9 @@ snapshots: file-uri-to-path@1.0.0: {} - filelist@1.0.5: + filelist@1.0.6: dependencies: - minimatch: 10.2.2 + minimatch: 5.1.9 fill-range@7.1.1: dependencies: @@ -13266,14 +13274,14 @@ snapshots: dependencies: foreground-child: 3.3.1 jackspeak: 3.4.3 - minimatch: 9.0.6 + minimatch: 9.0.8 minipass: 7.1.3 package-json-from-dist: 1.0.1 path-scurry: 1.11.1 glob@13.0.6: dependencies: - minimatch: 10.2.2 + minimatch: 10.2.4 minipass: 7.1.3 path-scurry: 2.0.2 @@ -13282,7 +13290,7 @@ snapshots: fs.realpath: 1.0.0 inflight: 1.0.6 inherits: 2.0.4 - minimatch: 3.1.3 + minimatch: 3.1.5 once: 1.4.0 path-is-absolute: 1.0.1 @@ -13371,7 +13379,7 @@ snapshots: he@1.2.0: {} - hono@4.12.2: {} + hono@4.12.3: {} hookable@5.5.3: {} @@ -13618,7 +13626,7 @@ snapshots: jake@10.9.4: dependencies: async: 3.2.6 - filelist: 1.0.5 + filelist: 1.0.6 picocolors: 1.1.1 jiti@1.21.7: {} @@ -13681,7 +13689,7 @@ snapshots: jsx-ast-utils-x@0.1.0: {} - katex@0.16.32: + katex@0.16.33: dependencies: commander: 8.3.0 @@ -13810,7 +13818,7 @@ snapshots: localflare-api@0.3.1: dependencies: - hono: 4.12.2 + hono: 4.12.3 localflare-core@0.3.1: dependencies: @@ -13927,7 +13935,7 @@ snapshots: dagre-d3-es: 7.0.13 dayjs: 1.11.19 dompurify: 3.3.1 - katex: 0.16.32 + katex: 0.16.33 khroma: 2.1.0 lodash-es: 4.17.23 marked: 16.4.2 @@ -14002,12 +14010,12 @@ snapshots: - bufferutil - utf-8-validate - miniflare@4.20260302.0: + miniflare@4.20260305.0: dependencies: '@cspotcode/source-map-support': 0.8.1 sharp: 0.34.5 undici: 7.18.2 - workerd: 1.20260302.0 + workerd: 1.20260305.0 ws: 8.18.0 youch: 4.1.0-beta.10 transitivePeerDependencies: @@ -14018,19 +14026,19 @@ snapshots: dependencies: '@isaacs/brace-expansion': 5.0.1 - minimatch@10.2.2: + minimatch@10.2.4: dependencies: brace-expansion: 5.0.3 - minimatch@3.1.3: + minimatch@3.1.5: dependencies: brace-expansion: 1.1.12 - minimatch@5.1.7: + minimatch@5.1.9: dependencies: brace-expansion: 2.0.2 - minimatch@9.0.6: + minimatch@9.0.8: dependencies: brace-expansion: 5.0.3 @@ -14067,7 +14075,7 @@ snapshots: nanoid@3.3.11: {} - nanostores@1.1.0: {} + nanostores@1.1.1: {} napi-build-utils@2.0.0: {} @@ -14077,7 +14085,7 @@ snapshots: netmask@2.0.2: {} - nitropack@2.13.1(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260302.0)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.6.2)(gel@2.2.0)(kysely@0.28.11))(rolldown@1.0.0-beta.51): + nitropack@2.13.1(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260305.0)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.6.2)(gel@2.2.0)(kysely@0.28.11))(rolldown@1.0.0-beta.51): dependencies: '@cloudflare/kv-asset-handler': 0.4.2 '@rollup/plugin-alias': 6.0.0(rollup@4.59.0) @@ -14098,7 +14106,7 @@ snapshots: cookie-es: 2.0.0 croner: 9.1.0 crossws: 0.3.5 - db0: 0.3.4(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260302.0)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.6.2)(gel@2.2.0)(kysely@0.28.11)) + db0: 0.3.4(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260305.0)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.6.2)(gel@2.2.0)(kysely@0.28.11)) defu: 6.1.4 destr: 2.0.5 dot-prop: 10.1.0 @@ -14144,10 +14152,10 @@ snapshots: unenv: 2.0.0-rc.24 unimport: 5.6.0 unplugin-utils: 0.3.1 - unstorage: 1.17.4(db0@0.3.4(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260302.0)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.6.2)(gel@2.2.0)(kysely@0.28.11)))(ioredis@5.9.3) + unstorage: 1.17.4(db0@0.3.4(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260305.0)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.6.2)(gel@2.2.0)(kysely@0.28.11)))(ioredis@5.9.3) untyped: 2.0.0 unwasm: 0.5.3 - youch: 4.1.0-beta.14 + youch: 4.1.0 youch-core: 0.3.3 transitivePeerDependencies: - '@azure/app-configuration' @@ -14514,7 +14522,7 @@ snapshots: '@protobufjs/pool': 1.1.0 '@protobufjs/utf8': 1.1.0 '@types/long': 4.0.2 - '@types/node': 25.3.0 + '@types/node': 25.3.1 long: 4.0.0 proxy-addr@2.0.7: @@ -14556,7 +14564,7 @@ snapshots: chromium-bidi: 14.0.0(devtools-protocol@0.0.1566079) debug: 4.4.3 devtools-protocol: 0.0.1566079 - typed-query-selector: 2.12.0 + typed-query-selector: 2.12.1 webdriver-bidi-protocol: 0.4.1 ws: 8.19.0 transitivePeerDependencies: @@ -14574,7 +14582,7 @@ snapshots: cosmiconfig: 9.0.0(typescript@5.9.3) devtools-protocol: 0.0.1566079 puppeteer-core: 24.37.5 - typed-query-selector: 2.12.0 + typed-query-selector: 2.12.1 transitivePeerDependencies: - bare-abort-controller - bare-buffer @@ -14659,7 +14667,7 @@ snapshots: readdir-glob@1.1.3: dependencies: - minimatch: 5.1.7 + minimatch: 5.1.9 readdirp@4.1.2: {} @@ -15222,18 +15230,18 @@ snapshots: dependencies: eastasianwidth: 0.2.0 emoji-regex: 9.2.2 - strip-ansi: 7.1.2 + strip-ansi: 7.2.0 string-width@7.2.0: dependencies: emoji-regex: 10.6.0 get-east-asian-width: 1.5.0 - strip-ansi: 7.1.2 + strip-ansi: 7.2.0 string-width@8.2.0: dependencies: get-east-asian-width: 1.5.0 - strip-ansi: 7.1.2 + strip-ansi: 7.2.0 string_decoder@1.1.1: dependencies: @@ -15252,7 +15260,7 @@ snapshots: dependencies: ansi-regex: 5.0.1 - strip-ansi@7.1.2: + strip-ansi@7.2.0: dependencies: ansi-regex: 6.2.2 @@ -15272,9 +15280,9 @@ snapshots: dependencies: js-tokens: 9.0.1 - stripe@20.3.1(@types/node@25.3.0): + stripe@20.4.0(@types/node@25.3.1): optionalDependencies: - '@types/node': 25.3.0 + '@types/node': 25.3.1 style-to-object@1.0.14: dependencies: @@ -15342,7 +15350,7 @@ snapshots: pump: 3.0.3 tar-stream: 3.1.7 optionalDependencies: - bare-fs: 4.5.4 + bare-fs: 4.5.5 bare-path: 3.0.0 transitivePeerDependencies: - bare-abort-controller @@ -15479,32 +15487,32 @@ snapshots: dependencies: safe-buffer: 5.2.1 - turbo-darwin-64@2.8.10: + turbo-darwin-64@2.8.11: optional: true - turbo-darwin-arm64@2.8.10: + turbo-darwin-arm64@2.8.11: optional: true - turbo-linux-64@2.8.10: + turbo-linux-64@2.8.11: optional: true - turbo-linux-arm64@2.8.10: + turbo-linux-arm64@2.8.11: optional: true - turbo-windows-64@2.8.10: + turbo-windows-64@2.8.11: optional: true - turbo-windows-arm64@2.8.10: + turbo-windows-arm64@2.8.11: optional: true - turbo@2.8.10: + turbo@2.8.11: optionalDependencies: - turbo-darwin-64: 2.8.10 - turbo-darwin-arm64: 2.8.10 - turbo-linux-64: 2.8.10 - turbo-linux-arm64: 2.8.10 - turbo-windows-64: 2.8.10 - turbo-windows-arm64: 2.8.10 + turbo-darwin-64: 2.8.11 + turbo-darwin-arm64: 2.8.11 + turbo-linux-64: 2.8.11 + turbo-linux-arm64: 2.8.11 + turbo-windows-64: 2.8.11 + turbo-windows-arm64: 2.8.11 type-check@0.4.0: dependencies: @@ -15522,7 +15530,7 @@ snapshots: media-typer: 1.1.0 mime-types: 3.0.2 - typed-query-selector@2.12.0: {} + typed-query-selector@2.12.1: {} typescript@5.9.3: {} @@ -15615,7 +15623,7 @@ snapshots: picomatch: 4.0.3 webpack-virtual-modules: 0.6.2 - unstorage@1.17.4(db0@0.3.4(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260302.0)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.6.2)(gel@2.2.0)(kysely@0.28.11)))(ioredis@5.9.3): + unstorage@1.17.4(db0@0.3.4(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260305.0)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.6.2)(gel@2.2.0)(kysely@0.28.11)))(ioredis@5.9.3): dependencies: anymatch: 3.1.3 chokidar: 5.0.0 @@ -15626,7 +15634,7 @@ snapshots: ofetch: 1.5.1 ufo: 1.6.3 optionalDependencies: - db0: 0.3.4(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260302.0)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.6.2)(gel@2.2.0)(kysely@0.28.11)) + db0: 0.3.4(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260305.0)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.6.2)(gel@2.2.0)(kysely@0.28.11)) ioredis: 5.9.3 untun@0.1.3: @@ -15680,7 +15688,7 @@ snapshots: '@types/unist': 3.0.3 vfile-message: 4.0.3 - vinxi@0.5.11(@types/node@25.3.0)(better-sqlite3@12.6.2)(db0@0.3.4(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260302.0)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.6.2)(gel@2.2.0)(kysely@0.28.11)))(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260302.0)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.6.2)(gel@2.2.0)(kysely@0.28.11))(ioredis@5.9.3)(jiti@2.6.1)(lightningcss@1.31.1)(rolldown@1.0.0-beta.51)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2): + vinxi@0.5.11(@types/node@25.3.1)(better-sqlite3@12.6.2)(db0@0.3.4(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260305.0)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.6.2)(gel@2.2.0)(kysely@0.28.11)))(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260305.0)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.6.2)(gel@2.2.0)(kysely@0.28.11))(ioredis@5.9.3)(jiti@2.6.1)(lightningcss@1.31.1)(rolldown@1.0.0-beta.51)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2): dependencies: '@babel/core': 7.29.0 '@babel/plugin-syntax-jsx': 7.28.6(@babel/core@7.29.0) @@ -15701,7 +15709,7 @@ snapshots: hookable: 5.5.3 http-proxy: 1.18.1 micromatch: 4.0.8 - nitropack: 2.13.1(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260302.0)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.6.2)(gel@2.2.0)(kysely@0.28.11))(rolldown@1.0.0-beta.51) + nitropack: 2.13.1(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260305.0)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.6.2)(gel@2.2.0)(kysely@0.28.11))(rolldown@1.0.0-beta.51) node-fetch-native: 1.6.7 path-to-regexp: 6.3.0 pathe: 1.1.2 @@ -15713,8 +15721,8 @@ snapshots: ufo: 1.6.3 unctx: 2.5.0 unenv: 1.10.0 - unstorage: 1.17.4(db0@0.3.4(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260302.0)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.6.2)(gel@2.2.0)(kysely@0.28.11)))(ioredis@5.9.3) - vite: 6.4.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + unstorage: 1.17.4(db0@0.3.4(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260305.0)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.6.2)(gel@2.2.0)(kysely@0.28.11)))(ioredis@5.9.3) + vite: 6.4.1(@types/node@25.3.1)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) zod: 4.3.6 transitivePeerDependencies: - '@azure/app-configuration' @@ -15761,13 +15769,13 @@ snapshots: - xml2js - yaml - vite-node@3.2.0(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2): + vite-node@3.2.0(@types/node@25.3.1)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2): dependencies: cac: 6.7.14 debug: 4.4.3 es-module-lexer: 1.7.0 pathe: 2.0.3 - vite: 7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + vite: 7.3.1(@types/node@25.3.1)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) transitivePeerDependencies: - '@types/node' - jiti @@ -15782,7 +15790,7 @@ snapshots: - tsx - yaml - vite-plugin-solid@2.11.10(@testing-library/jest-dom@6.9.1)(solid-js@1.9.11)(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)): + vite-plugin-solid@2.11.10(@testing-library/jest-dom@6.9.1)(solid-js@1.9.11)(vite@7.3.1(@types/node@25.3.1)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)): dependencies: '@babel/core': 7.29.0 '@types/babel__core': 7.20.5 @@ -15790,14 +15798,14 @@ snapshots: merge-anything: 5.1.7 solid-js: 1.9.11 solid-refresh: 0.6.3(solid-js@1.9.11) - vite: 7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) - vitefu: 1.1.2(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)) + vite: 7.3.1(@types/node@25.3.1)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + vitefu: 1.1.2(vite@7.3.1(@types/node@25.3.1)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)) optionalDependencies: '@testing-library/jest-dom': 6.9.1 transitivePeerDependencies: - supports-color - vite-prerender-plugin@0.5.12(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)): + vite-prerender-plugin@0.5.12(vite@7.3.1(@types/node@25.3.1)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)): dependencies: kolorist: 1.8.0 magic-string: 0.30.21 @@ -15805,20 +15813,20 @@ snapshots: simple-code-frame: 1.3.0 source-map: 0.7.6 stack-trace: 1.0.0-pre2 - vite: 7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + vite: 7.3.1(@types/node@25.3.1)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) - vite@5.4.21(@types/node@25.3.0)(lightningcss@1.31.1)(terser@5.46.0): + vite@5.4.21(@types/node@25.3.1)(lightningcss@1.31.1)(terser@5.46.0): dependencies: esbuild: 0.21.5 postcss: 8.5.6 rollup: 4.59.0 optionalDependencies: - '@types/node': 25.3.0 + '@types/node': 25.3.1 fsevents: 2.3.3 lightningcss: 1.31.1 terser: 5.46.0 - vite@6.4.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2): + vite@6.4.1(@types/node@25.3.1)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2): dependencies: esbuild: 0.25.12 fdir: 6.5.0(picomatch@4.0.3) @@ -15827,7 +15835,7 @@ snapshots: rollup: 4.59.0 tinyglobby: 0.2.15 optionalDependencies: - '@types/node': 25.3.0 + '@types/node': 25.3.1 fsevents: 2.3.3 jiti: 2.6.1 lightningcss: 1.31.1 @@ -15835,7 +15843,7 @@ snapshots: tsx: 4.21.0 yaml: 2.8.2 - vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2): + vite@7.3.1(@types/node@25.3.1)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2): dependencies: esbuild: 0.27.3 fdir: 6.5.0(picomatch@4.0.3) @@ -15844,7 +15852,7 @@ snapshots: rollup: 4.59.0 tinyglobby: 0.2.15 optionalDependencies: - '@types/node': 25.3.0 + '@types/node': 25.3.1 fsevents: 2.3.3 jiti: 2.6.1 lightningcss: 1.31.1 @@ -15852,37 +15860,37 @@ snapshots: tsx: 4.21.0 yaml: 2.8.2 - vitefu@1.1.2(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)): + vitefu@1.1.2(vite@7.3.1(@types/node@25.3.1)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)): optionalDependencies: - vite: 7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + vite: 7.3.1(@types/node@25.3.1)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) - vitepress-plugin-mermaid@2.0.17(mermaid@11.12.3)(vitepress@1.6.4(@algolia/client-search@5.49.0)(@types/node@25.3.0)(axios@1.13.5)(change-case@5.4.4)(lightningcss@1.31.1)(postcss@8.5.6)(search-insights@2.17.3)(terser@5.46.0)(typescript@5.9.3)): + vitepress-plugin-mermaid@2.0.17(mermaid@11.12.3)(vitepress@1.6.4(@algolia/client-search@5.49.1)(@types/node@25.3.1)(axios@1.13.5)(change-case@5.4.4)(lightningcss@1.31.1)(postcss@8.5.6)(search-insights@2.17.3)(terser@5.46.0)(typescript@5.9.3)): dependencies: mermaid: 11.12.3 - vitepress: 1.6.4(@algolia/client-search@5.49.0)(@types/node@25.3.0)(axios@1.13.5)(change-case@5.4.4)(lightningcss@1.31.1)(postcss@8.5.6)(search-insights@2.17.3)(terser@5.46.0)(typescript@5.9.3) + vitepress: 1.6.4(@algolia/client-search@5.49.1)(@types/node@25.3.1)(axios@1.13.5)(change-case@5.4.4)(lightningcss@1.31.1)(postcss@8.5.6)(search-insights@2.17.3)(terser@5.46.0)(typescript@5.9.3) optionalDependencies: '@mermaid-js/mermaid-mindmap': 9.3.0 - vitepress@1.6.4(@algolia/client-search@5.49.0)(@types/node@25.3.0)(axios@1.13.5)(change-case@5.4.4)(lightningcss@1.31.1)(postcss@8.5.6)(search-insights@2.17.3)(terser@5.46.0)(typescript@5.9.3): + vitepress@1.6.4(@algolia/client-search@5.49.1)(@types/node@25.3.1)(axios@1.13.5)(change-case@5.4.4)(lightningcss@1.31.1)(postcss@8.5.6)(search-insights@2.17.3)(terser@5.46.0)(typescript@5.9.3): dependencies: '@docsearch/css': 3.8.2 - '@docsearch/js': 3.8.2(@algolia/client-search@5.49.0)(search-insights@2.17.3) + '@docsearch/js': 3.8.2(@algolia/client-search@5.49.1)(search-insights@2.17.3) '@iconify-json/simple-icons': 1.2.71 '@shikijs/core': 2.5.0 '@shikijs/transformers': 2.5.0 '@shikijs/types': 2.5.0 '@types/markdown-it': 14.1.2 - '@vitejs/plugin-vue': 5.2.4(vite@5.4.21(@types/node@25.3.0)(lightningcss@1.31.1)(terser@5.46.0))(vue@3.5.28(typescript@5.9.3)) + '@vitejs/plugin-vue': 5.2.4(vite@5.4.21(@types/node@25.3.1)(lightningcss@1.31.1)(terser@5.46.0))(vue@3.5.29(typescript@5.9.3)) '@vue/devtools-api': 7.7.9 - '@vue/shared': 3.5.28 + '@vue/shared': 3.5.29 '@vueuse/core': 12.8.2(typescript@5.9.3) '@vueuse/integrations': 12.8.2(axios@1.13.5)(change-case@5.4.4)(focus-trap@7.8.0)(typescript@5.9.3) focus-trap: 7.8.0 mark.js: 8.11.1 minisearch: 7.2.0 shiki: 2.5.0 - vite: 5.4.21(@types/node@25.3.0)(lightningcss@1.31.1)(terser@5.46.0) - vue: 3.5.28(typescript@5.9.3) + vite: 5.4.21(@types/node@25.3.1)(lightningcss@1.31.1)(terser@5.46.0) + vue: 3.5.29(typescript@5.9.3) optionalDependencies: postcss: 8.5.6 transitivePeerDependencies: @@ -15912,11 +15920,11 @@ snapshots: - typescript - universal-cookie - vitest@3.2.0(@types/node@25.3.0)(jiti@2.6.1)(jsdom@27.4.0(@noble/hashes@2.0.1))(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2): + vitest@3.2.0(@types/node@25.3.1)(jiti@2.6.1)(jsdom@27.4.0(@noble/hashes@2.0.1))(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2): dependencies: '@types/chai': 5.2.3 '@vitest/expect': 3.2.0 - '@vitest/mocker': 3.2.0(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)) + '@vitest/mocker': 3.2.0(vite@7.3.1(@types/node@25.3.1)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)) '@vitest/pretty-format': 3.2.4 '@vitest/runner': 3.2.0 '@vitest/snapshot': 3.2.0 @@ -15934,11 +15942,11 @@ snapshots: tinyglobby: 0.2.15 tinypool: 1.1.1 tinyrainbow: 2.0.0 - vite: 7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) - vite-node: 3.2.0(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + vite: 7.3.1(@types/node@25.3.1)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + vite-node: 3.2.0(@types/node@25.3.1)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) why-is-node-running: 2.3.0 optionalDependencies: - '@types/node': 25.3.0 + '@types/node': 25.3.1 jsdom: 27.4.0(@noble/hashes@2.0.1) transitivePeerDependencies: - jiti @@ -15954,10 +15962,10 @@ snapshots: - tsx - yaml - vitest@4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.3.0)(@vitest/ui@4.0.18)(jiti@2.6.1)(jsdom@27.4.0(@noble/hashes@2.0.1))(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2): + vitest@4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.3.1)(@vitest/ui@4.0.18)(jiti@2.6.1)(jsdom@27.4.0(@noble/hashes@2.0.1))(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2): dependencies: '@vitest/expect': 4.0.18 - '@vitest/mocker': 4.0.18(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)) + '@vitest/mocker': 4.0.18(vite@7.3.1(@types/node@25.3.1)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)) '@vitest/pretty-format': 4.0.18 '@vitest/runner': 4.0.18 '@vitest/snapshot': 4.0.18 @@ -15974,11 +15982,11 @@ snapshots: tinyexec: 1.0.2 tinyglobby: 0.2.15 tinyrainbow: 3.0.3 - vite: 7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + vite: 7.3.1(@types/node@25.3.1)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) why-is-node-running: 2.3.0 optionalDependencies: '@opentelemetry/api': 1.9.0 - '@types/node': 25.3.0 + '@types/node': 25.3.1 '@vitest/ui': 4.0.18(vitest@4.0.18) jsdom: 27.4.0(@noble/hashes@2.0.1) transitivePeerDependencies: @@ -16011,13 +16019,13 @@ snapshots: vscode-uri@3.1.0: {} - vue@3.5.28(typescript@5.9.3): + vue@3.5.29(typescript@5.9.3): dependencies: - '@vue/compiler-dom': 3.5.28 - '@vue/compiler-sfc': 3.5.28 - '@vue/runtime-dom': 3.5.28 - '@vue/server-renderer': 3.5.28(vue@3.5.28(typescript@5.9.3)) - '@vue/shared': 3.5.28 + '@vue/compiler-dom': 3.5.29 + '@vue/compiler-sfc': 3.5.29 + '@vue/runtime-dom': 3.5.29 + '@vue/server-renderer': 3.5.29(vue@3.5.29(typescript@5.9.3)) + '@vue/shared': 3.5.29 optionalDependencies: typescript: 5.9.3 @@ -16078,15 +16086,15 @@ snapshots: '@cloudflare/workerd-linux-arm64': 1.20251217.0 '@cloudflare/workerd-windows-64': 1.20251217.0 - workerd@1.20260302.0: + workerd@1.20260305.0: optionalDependencies: - '@cloudflare/workerd-darwin-64': 1.20260302.0 - '@cloudflare/workerd-darwin-arm64': 1.20260302.0 - '@cloudflare/workerd-linux-64': 1.20260302.0 - '@cloudflare/workerd-linux-arm64': 1.20260302.0 - '@cloudflare/workerd-windows-64': 1.20260302.0 + '@cloudflare/workerd-darwin-64': 1.20260305.0 + '@cloudflare/workerd-darwin-arm64': 1.20260305.0 + '@cloudflare/workerd-linux-64': 1.20260305.0 + '@cloudflare/workerd-linux-arm64': 1.20260305.0 + '@cloudflare/workerd-windows-64': 1.20260305.0 - wrangler@4.56.0(@cloudflare/workers-types@4.20260302.0): + wrangler@4.56.0(@cloudflare/workers-types@4.20260305.0): dependencies: '@cloudflare/kv-asset-handler': 0.4.1 '@cloudflare/unenv-preset': 2.7.13(unenv@2.0.0-rc.24)(workerd@1.20251217.0) @@ -16097,24 +16105,24 @@ snapshots: unenv: 2.0.0-rc.24 workerd: 1.20251217.0 optionalDependencies: - '@cloudflare/workers-types': 4.20260302.0 + '@cloudflare/workers-types': 4.20260305.0 fsevents: 2.3.3 transitivePeerDependencies: - bufferutil - utf-8-validate - wrangler@4.67.1(@cloudflare/workers-types@4.20260302.0): + wrangler@4.69.0(@cloudflare/workers-types@4.20260305.0): dependencies: '@cloudflare/kv-asset-handler': 0.4.2 - '@cloudflare/unenv-preset': 2.14.0(unenv@2.0.0-rc.24)(workerd@1.20260302.0) + '@cloudflare/unenv-preset': 2.14.0(unenv@2.0.0-rc.24)(workerd@1.20260305.0) blake3-wasm: 2.1.5 esbuild: 0.27.3 - miniflare: 4.20260302.0 + miniflare: 4.20260305.0 path-to-regexp: 6.3.0 unenv: 2.0.0-rc.24 - workerd: 1.20260302.0 + workerd: 1.20260305.0 optionalDependencies: - '@cloudflare/workers-types': 4.20260302.0 + '@cloudflare/workers-types': 4.20260305.0 fsevents: 2.3.3 transitivePeerDependencies: - bufferutil @@ -16130,13 +16138,13 @@ snapshots: dependencies: ansi-styles: 6.2.3 string-width: 5.1.2 - strip-ansi: 7.1.2 + strip-ansi: 7.2.0 wrap-ansi@9.0.2: dependencies: ansi-styles: 6.2.3 string-width: 7.2.0 - strip-ansi: 7.1.2 + strip-ansi: 7.2.0 wrappy@1.0.2: {} @@ -16218,20 +16226,20 @@ snapshots: '@poppinss/exception': 1.2.3 error-stack-parser-es: 1.0.5 - youch@4.1.0-beta.10: + youch@4.1.0: dependencies: '@poppinss/colors': 4.1.6 - '@poppinss/dumper': 0.6.5 + '@poppinss/dumper': 0.7.0 '@speed-highlight/core': 1.2.14 - cookie: 1.1.1 + cookie-es: 2.0.0 youch-core: 0.3.3 - youch@4.1.0-beta.14: + youch@4.1.0-beta.10: dependencies: '@poppinss/colors': 4.1.6 '@poppinss/dumper': 0.6.5 '@speed-highlight/core': 1.2.14 - cookie-es: 2.0.0 + cookie: 1.1.1 youch-core: 0.3.3 zimmerframe@1.1.4: {} From 2f824db226cb14ac20a2506f25ebec710c44b831 Mon Sep 17 00:00:00 2001 From: Jacob Maynard Date: Fri, 6 Mar 2026 21:02:08 -0500 Subject: [PATCH 4/9] bug fixes --- .cursor/mcp.json | 16 ++++++-- .mcp.json | 17 +++++++-- .mcp/memory.db | Bin 1060864 -> 1073152 bytes .vscode/mcp.json | 21 ++++++---- .../rob2-reconcile/pages/PreliminaryPage.jsx | 17 +-------- .../src/primitives/useProject/connection.js | 22 +++++++++++ .../web/src/primitives/useProject/index.js | 26 ++++++++++--- .../workers/scripts/setup-stripe-test.mjs | 3 +- packages/workers/src/auth/config.ts | 10 ++--- packages/workers/src/auth/email.ts | 4 +- .../workers/src/durable-objects/ProjectDoc.ts | 36 +++++++++++++----- packages/workers/src/lib/email-queue.ts | 1 + .../workers/src/lib/send-invitation-email.ts | 4 +- packages/workers/src/lib/stripe.ts | 2 +- .../workers/src/routes/admin/stripe-tools.ts | 15 ++------ .../billing/__tests__/invoiceHandlers.test.ts | 1 + .../__tests__/subscriptionHandlers.test.ts | 19 +++------ .../billing/handlers/invoiceHandlers.ts | 4 +- .../billing/handlers/subscriptionHandlers.ts | 36 ++++++++---------- packages/workers/src/routes/contact.ts | 3 +- 20 files changed, 154 insertions(+), 103 deletions(-) diff --git a/.cursor/mcp.json b/.cursor/mcp.json index c2492b65b..f9e450272 100644 --- a/.cursor/mcp.json +++ b/.cursor/mcp.json @@ -3,19 +3,29 @@ "corates": { "type": "stdio", "command": "node", - "args": ["${workspaceFolder}/packages/mcp/dist/server.js"] + "args": [ + "${workspaceFolder}/packages/mcp/dist/server.js" + ] }, "corates-memory": { "type": "stdio", "command": "node", - "args": ["${workspaceFolder}/packages/mcp-memory/dist/server.js"], + "args": [ + "${workspaceFolder}/packages/mcp-memory/dist/server.js" + ], "env": { "MCP_MEMORY_REPO_ROOT": "${workspaceFolder}" } }, "ark-ui": { "command": "npx", - "args": ["-y", "@ark-ui/mcp"] + "args": [ + "-y", + "@ark-ui/mcp" + ] + }, + "sentry": { + "url": "https://mcp.sentry.dev/mcp" } } } diff --git a/.mcp.json b/.mcp.json index ece3a3398..48629b419 100644 --- a/.mcp.json +++ b/.mcp.json @@ -3,12 +3,16 @@ "corates": { "type": "stdio", "command": "node", - "args": ["packages/mcp/dist/server.js"] + "args": [ + "packages/mcp/dist/server.js" + ] }, "corates-memory": { "type": "stdio", "command": "node", - "args": ["packages/mcp-memory/dist/server.js"], + "args": [ + "packages/mcp-memory/dist/server.js" + ], "env": { "MCP_MEMORY_REPO_ROOT": "." } @@ -16,7 +20,14 @@ "ark-ui": { "type": "stdio", "command": "npx", - "args": ["-y", "@ark-ui/mcp"] + "args": [ + "-y", + "@ark-ui/mcp" + ] + }, + "sentry": { + "type": "http", + "url": "https://mcp.sentry.dev/mcp" } } } diff --git a/.mcp/memory.db b/.mcp/memory.db index ad492c7e2436e501da1fac20eaa003d94cacf682..3e232c1045cfe3272f5405af19ad2e2339482308 100644 GIT binary patch delta 9298 zcma*tJ&fh&RR-|=%sT7ru0sHcSRq#yMJ#sK|L>1TQ4$fLK_XESikOJKJ9Ec7$#`~| znO&1mTw8I3puxyO78MO05|Xt=QqoYRi4;Y&rl5dSbQFO2J@5Zcf{2i?G@hMz-jDO1 z^PJ~A=biiJ2cLWM??3;}i`TDTx^($Nf3f=PSm^0-aPx{XaD(y+lSAeUApth+y8d!htL1z^JmXq_~QEcTOYaliOUC@ z{iCy^M<<8R-hB1#YgZ3%Uw!w+{U2Ppef8N#UwGx#^=nrzT|RvF+{u4jzIu4`NAKQv z{GBT|fAs9n9{={ucR%>{_2>TOC*S?m?|xcPkhu?YU?LT?v?aRKd_`2%rny>4=KIH3$ujhPy z*w;;8&-?m_uUp@H=k43)f4gdL{P@zHf4uW|cfNb)_wTfKZr=W<+uy(a=eG}Uf9Cct z-ulUnAAj$q>dyN&UjEe8uU=mF>+WzqnD&Ndf4$c|I5^mQuwPAk_3&WRth=^q>doQz z{%gE*<=;QXQ`a|7HfJy0ed+O|v-8*2r{8?9e*D~v?|trrE7zXiyuLm<-uuHRX1sUj z&C9?1-isexxxM}D?)IUti#a=L#_Lp#^Am80{#FPLy31Hq)zdUJeLr+g8Rucn zXw%N~+%)yjG;`NZV>zd3`g*dCf$g^H>TW1DwOz;5zHR2V8-{+lyj{7Yb@y_oc51UN z!-u|U^Q+E^;t|%5O;t@}-%L%zGntt1wEfsm+%R`lT~4ZNV}0$`RljYzuIm?{bYs`F zZO7BrjdK~S+nEV<$N#NuhsAwU%K<}OF{-PY#U?`u&@>EHKelr@zOIL=sphF}8lG@$ zv8ipFap+iS!>yPt2RU?_*;|d>T+K}xbc?1py&i{wyLYi`IC!obUa0tMxn~C2IUeEp zzFxL;`AjNTXy;~eb3Xz}Od6VDYPVB~sA#mq(6VR-hux-ZZkx87$GLHVsVkehg%cnN zLfoU^j(f}*0LS+pP;<>{bTuCC`_VNZBZJdW0qZbVeLHp4(B0i8nnF8QIeq|juqX!= z$X2=jAT9-C@WI6nYI`%=C7RXHj-4NBxi~{)!JXY#qV1X z?OOZivO^25%jtHLY2(_E!-ElJ@^%Xeui=SF99m?r*FRF|0 zYYy$_#-x^YlHl&Pq`mZ-ld;h2;5cfO$lci2LR?KPCNNevJsiySp%(cE`lQSGTSCvfcrgj(05uNl-4?cRdz1#@AM|34-!nwpPT+En~=PDol1K*3ouG-JY|%m^)3M}TN~vAwF% zw!C8ko0q9|LeP$`%1JP@kdX3YrC@Rtx{yxG4qS>Hr>&HPa$#~BfMRBG#(_l86psl z9XsIZSv| znm#lbjp19ib&Pby0^nQo%Q92;hcgrbwbA)m?lQKLT|-cKQK@h*!c>?7a4eoZ-C3De zh(}-qmW*|C8*s{3)B?X{%aQ64Dt8!|FPu5YhEM~dREo&q%G4jEDMKg;Zp1B%@56_R zlJZlj@Ce65Sdz7_S40|AW-!sj12u3dPta*B0O3j6LxlPrl0}4_s17zEZJvRS6p>p^36MN~vKNCb5cE zQyGDCxZ7;+Ay|&0w@A)Zpv@kgk;{^kBEq!*?LLbMXj!?F3}jN(xS5#($EWB`xCcsf z@if6QL^hy~oD{FPT-ZSPx&~8Z;ua1;5_(;2>ecbglmUR(zaq(hr7Vpl5@G4vMcPMt2-ALs2v zE>lwsi_5a!2JRBqtDkDtLYmHYEp!z9Qqm!?Cx_nU4Mkdx$!!QB?9evIxIkOrU~sJE4%m!Bf0Hcrm#o&3E*S z|HVV(`PO_pXf^qgD6j^`7uO>Yp;s;-d8=}j(ZJG>P^N_L2I(P$quOu=YF_*yZWxW5RQ6>n6KNCv%IPEwjx6uFS*T9QANJp?tmk+P*^m$yb-d@Rivh# zWV46#Sh$|}P&v&3d4SHz0SEy-&>%Rf+NtnJ?Ksr$@Xd0^Pzo6ZWW-ij_->{Cky{8Q zd!&Rff?dWV&tNukFf#+XRH-(^qI*^^mQ28MS*eB-9tq8o$TYN>3TBvzQ*t5yp}sr= zG~{EHz_93#l#rqVQXs@`xfTXcal}+v@!PUPo+#8qAOR|4F-x<7jL13ZRk$&OXfMQJ!ovxX5Pg`vag1)x9}6>WJ4 zW7qeCn~Wu9fHckroA#c)9j%ww28rlU%KTo=*M>So>BjsQN<--KnxmTlmrz>qNM1}z zw}={)?EuQFgG8q8QriioCHnH%j&Q3hw)>8S8P5M|YFdoq&Kmw9fn5XuUjtNJCk5gk zau)gvZlyD96#^A1xl$b8z_Et}%jHH|)iNquuu}F@?Eo`d2AYxEuH;+Vaf48({v+|+ zg@{{NB#?nKQiDj%+f0bG>8sYn<&k~Y@igEAa|uY6|{H`U&st6 ztMeGLEJrx%pT=EIp&V~}i=}xuqO~c;D96kU!(^sR#{PVPlY-;2rR(9yym09M5Rb}UjKW>QmiNMRHj#L7zGnfD zRX9DmM5<>Hf=h(`k{aFBX+2`r+JQg$y6hQEuT;Xa7lAyvEL$dP3~%)dRlH|3+cOaR zQ*ApfMa{(bNtrzO?8q&wu4Lxbg)7RI?&sArsV6>EcQ!-;GRBT6EtPGGLFr0VnUwl! z+%~Fn=9ZprHZS;0i;+QF(w_mWRu!$6lQ;=6@eaRJ(Yp@JqXkDtZ^qfn<1Ms-wx2=P zie2|BY*6SRnyKEVJIV3l5imt$MB)@n^By3KQHcJrFph*L4dp|@XdZH`hB}FAN-tkZ)lN{@i7@%nI{IcH||Ebcsokuo9;{38=lL&Bni)^T;JxPkGVC zMV*%SLC;9aq}FDav+^Z9zeWi&?Yta)PrsHTS zqOgfYIj4arT?rmcpSa)*b$KY0eN<9v;N89M9)OT+3hJCczVw^DC3-S}Od`~6j#YL{ zr2ojvm`cP8kw(SMT9y0=?Y)zB%EM7^n#WFx-EWKQt&?2pod!)MSe(alQ^GlUi!9bt zV#;5nm+ZvkS!|tz+3Kp&VtYhbc4VAbVr#&@FjL#(j|(i|G#?pYg{&GtKgF*U#)?=iim^laAq)p1}$Ay&SH9D)vzHEG96~m+9 ztj1X#l?4|xATJY}A(8PVKs(QpNgL&&p&q@tN zsg;1pLu8XefCn!A5JA7Ew_q%{BKdModfW8W&cURMlh`O({8dKVt}&mN0&(6@i$&a$j*RqB zM&Z8SzqrM+#^xO(wv1iCcV8$kE;W zzMK^_naORb0R(uN>RgAU`Xrp*f0k13y%GQEspA~*&ryhv+ma57iORD8myh!r01)Dd z_LpqPs|6!%LdAG&*?Az!O$viu7$uw996RQtDHZi{ON#Qhki?I%Kv#z4tEeC7_RTW-uP*+`uWcz{9og@@{x*LFJ8L!;H5L(X7#%dzOmUqKl{qV&FZ}$ zUjOjNw{NV^R;QcC$Lsyg!Rn2p^M^mb!|Lc{^;??hs6PtMciEpB;Si=#ACk z@uN4+R_6~-A3b^P;cC4)J34vId5=#Y9X#3JoURU^oa~?bRLJUn`Orf#{ZpHh?bExf z$Lnt$KUyEWd_M=>KRexj<@o5qEC1sY68Fx}?yuG-2evJXSNo4n&Yrw(*M~-reZN?E zbaJryqcZ*c;rcwM?{CiHme+k-zvdrLkJhU%?mmxkZ}pWeM=X0DovlvRuXDov{YR(k z^Uc{_vB1fnI@mmYdG*Tw{>5JI=C}Fw^5VKL{LYtFPuHhM>yz^{o7?-1({=oCdhZ)& zk52a4d*%{P+tuqwuQ}xC(e`9nd0!Ma=bM8+*gsy!;7_k!eX01U1o5S>-{<(%*+XGH zSUubvKX&Jzdg^R*a3IUl+$O z20_IE;hMt^m{J8&9xcM*(cwhT(__*@b delta 234 zcmZoT;MnlMVS+R(3j+fq^F#%EMwX2UOY}K(`Q;gaB8-!H45BtRO0#Tk{4$Sgv%LLN z0iIOu1_pk4zK^^YxTkIw3P|Lh7{I@|A-aWyIhBuNGJC@5&4L1Eyqh`l{xCA9ay^*L zUeLU`r@);Hr0hYJ3M+Fe%Y@174W~CY?qhDA(9%Akg%OCEfS4JGS%8=oh}nRc9f&!A zm=lP(fS4PId4QOA`-B$0lGSoX?Ee_}uk)|tZ{?5SH|FQ!d&swgub(fC&z4Vw_w{xa S1OAQd6DMeI|7Xt6^aB8fKT$^j diff --git a/.vscode/mcp.json b/.vscode/mcp.json index 3156312e7..1a8ba55ca 100644 --- a/.vscode/mcp.json +++ b/.vscode/mcp.json @@ -3,23 +3,30 @@ "corates": { "type": "stdio", "command": "node", - "args": ["${workspaceFolder}/packages/mcp/dist/server.js"] + "args": [ + "${workspaceFolder}/packages/mcp/dist/server.js" + ] }, "corates-memory": { "type": "stdio", "command": "node", - "args": ["${workspaceFolder}/packages/mcp-memory/dist/server.js"], + "args": [ + "${workspaceFolder}/packages/mcp-memory/dist/server.js" + ], "env": { "MCP_MEMORY_REPO_ROOT": "${workspaceFolder}" } }, "ark-ui": { "command": "npx", - "args": ["-y", "@ark-ui/mcp"] + "args": [ + "-y", + "@ark-ui/mcp" + ] + }, + "sentry": { + "type": "http", + "url": "https://mcp.sentry.dev/mcp" } - // "stripe": { - // "type": "http", - // "url": "https://mcp.stripe.com" - // } } } diff --git a/packages/web/src/components/project/reconcile-tab/rob2-reconcile/pages/PreliminaryPage.jsx b/packages/web/src/components/project/reconcile-tab/rob2-reconcile/pages/PreliminaryPage.jsx index 6ae465c59..f4eaf3908 100644 --- a/packages/web/src/components/project/reconcile-tab/rob2-reconcile/pages/PreliminaryPage.jsx +++ b/packages/web/src/components/project/reconcile-tab/rob2-reconcile/pages/PreliminaryPage.jsx @@ -1,4 +1,4 @@ -import { Show, For, createMemo, createEffect, onCleanup } from 'solid-js'; +import { Show, For, createMemo } from 'solid-js'; import { FiCheck, FiX, FiAlertTriangle } from 'solid-icons/fi'; import { PRELIMINARY_SECTION, @@ -241,21 +241,6 @@ export default function PreliminaryPage(props) { const isTextField = () => PRELIMINARY_TEXT_FIELDS.includes(props.fieldKey); - // Sync Y.Text changes back to finalAnswers so hasNavItemAnswer detects the field as answered - createEffect(() => { - if (!isTextField() || !props.getRob2Text) return; - const yText = props.getRob2Text('preliminary', props.fieldKey); - if (!yText) return; - - const observer = () => { - const text = yText.toString(); - props.onFinalChange?.(text); - }; - - yText.observe(observer); - onCleanup(() => yText.unobserve(observer)); - }); - const getFieldType = () => { const key = props.fieldKey; if (key === 'studyDesign') return 'select'; diff --git a/packages/web/src/primitives/useProject/connection.js b/packages/web/src/primitives/useProject/connection.js index 5ef6efb0b..db29328a9 100644 --- a/packages/web/src/primitives/useProject/connection.js +++ b/packages/web/src/primitives/useProject/connection.js @@ -83,6 +83,28 @@ export function createConnectionManager(projectId, ydoc, options) { // WebsocketProvider handles reconnection automatically with exponential backoff }); + // Wrap the awareness message handler with error protection. + // Awareness data is ephemeral (cursor positions, presence) so a dropped + // update is invisible to users and corrected by the next update. + const AWARENESS_MSG_TYPE = 1; + const originalAwarenessHandler = provider.messageHandlers[AWARENESS_MSG_TYPE]; + if (originalAwarenessHandler) { + provider.messageHandlers = [...provider.messageHandlers]; + provider.messageHandlers[AWARENESS_MSG_TYPE] = ( + encoder, + decoder, + prov, + emitSynced, + msgType, + ) => { + try { + return originalAwarenessHandler(encoder, decoder, prov, emitSynced, msgType); + } catch (err) { + console.warn('Awareness update skipped:', err.message); + } + }; + } + provider.on('status', ({ status }) => { projectStore.setConnectionState(projectId, { connected: status === 'connected', diff --git a/packages/web/src/primitives/useProject/index.js b/packages/web/src/primitives/useProject/index.js index 7652cdd70..bf0f63b42 100644 --- a/packages/web/src/primitives/useProject/index.js +++ b/packages/web/src/primitives/useProject/index.js @@ -237,10 +237,15 @@ export function useProject(projectId) { isOutcomeInUse: connectionEntry.outcomeOps.isOutcomeInUse, }); - // Listen for Y.Doc changes BEFORE setting up providers - // This ensures we catch all updates including initial sync + // Listen for Y.Doc changes to sync to the store. + // Suppressed during Dexie state load to prevent the sync handler from + // firing while the Y.Doc's internal struct store is being populated, + // which can cause corruption and GC errors. + let isLoadingPersistedState = false; ydoc.on('update', () => { - connectionEntry.syncManager?.syncFromYDoc(); + if (!isLoadingPersistedState) { + connectionEntry.syncManager?.syncFromYDoc(); + } }); // Set up Dexie persistence for offline support using y-dexie @@ -258,9 +263,18 @@ export function useProject(projectId) { connectionEntry.dexieProvider = DexieYProvider.load(project.ydoc); connectionEntry.dexieProvider.whenLoaded.then(() => { - // Apply persisted state from Dexie Y.Doc to our Y.Doc - const persistedState = Y.encodeStateAsUpdate(project.ydoc); - Y.applyUpdate(ydoc, persistedState); + // Suppress the sync handler while applying persisted state to avoid + // racing with the Dexie persistence handler below + isLoadingPersistedState = true; + try { + const persistedState = Y.encodeStateAsUpdate(project.ydoc); + Y.applyUpdate(ydoc, persistedState); + } catch (err) { + console.error('Corrupted persisted state, clearing local data:', err); + deleteProjectData(projectId).catch(() => {}); + } finally { + isLoadingPersistedState = false; + } // Subscribe to our ydoc updates to persist them to Dexie const updateHandler = (update, origin) => { diff --git a/packages/workers/scripts/setup-stripe-test.mjs b/packages/workers/scripts/setup-stripe-test.mjs index 0b6f35394..93b6d7ae7 100644 --- a/packages/workers/scripts/setup-stripe-test.mjs +++ b/packages/workers/scripts/setup-stripe-test.mjs @@ -438,7 +438,8 @@ async function main() { console.log('⚠️ DRY RUN MODE: Using placeholder key for preview'); } - const stripe = stripeKey ? new Stripe(stripeKey, { apiVersion: '2025-12-15.clover' }) : null; + // Keep in sync with STRIPE_API_VERSION in src/lib/stripe.ts + const stripe = stripeKey ? new Stripe(stripeKey, { apiVersion: '2026-02-25.clover' }) : null; console.log('🚀 Setting up Stripe test products and prices...\n'); diff --git a/packages/workers/src/auth/config.ts b/packages/workers/src/auth/config.ts index 706b450cb..4640c00c8 100644 --- a/packages/workers/src/auth/config.ts +++ b/packages/workers/src/auth/config.ts @@ -5,6 +5,7 @@ import { genericOAuth, magicLink, twoFactor, admin, organization } from 'better- import { oAuthRelay } from './oauth-relay'; import { stripe } from '@better-auth/stripe'; import Stripe from 'stripe'; +import { STRIPE_API_VERSION } from '@/lib/stripe.js'; import { drizzle } from 'drizzle-orm/d1'; import { eq, and } from 'drizzle-orm'; import * as schema from '../db/schema'; @@ -178,8 +179,7 @@ export function createAuth(env: Env, ctx?: ExecutionContext) { const html = getMagicLinkEmailHtml({ subject, magicLinkUrl: url }); const text = getMagicLinkEmailText({ magicLinkUrl: url }); - // Queue send is a direct binding call, no need for waitUntil keepalive - queueEmail(env, { to: email, subject, html, text }).catch(err => + await queueEmail(env, { to: email, subject, html, text }).catch(err => console.error('[Auth] Magic link email queue error:', err), ); }, @@ -226,7 +226,7 @@ export function createAuth(env: Env, ctx?: ExecutionContext) { // - unlimited_team: $59/month, $590/year if (env.STRIPE_SECRET_KEY && env.STRIPE_WEBHOOK_SECRET_AUTH) { const stripeClient = new Stripe(env.STRIPE_SECRET_KEY, { - apiVersion: '2025-12-15.clover', + apiVersion: STRIPE_API_VERSION, }); plugins.push( @@ -449,7 +449,7 @@ export function createAuth(env: Env, ctx?: ExecutionContext) { const html = getPasswordResetEmailHtml({ name, subject, resetUrl: url }); const text = getPasswordResetEmailText({ name, resetUrl: url }); - queueEmail(env, { to: user.email, subject, html, text }).catch(err => + await queueEmail(env, { to: user.email, subject, html, text }).catch(err => console.error('[Auth] Password reset email queue error:', err), ); }, @@ -473,7 +473,7 @@ export function createAuth(env: Env, ctx?: ExecutionContext) { const html = getVerificationEmailHtml({ name, subject, verificationUrl: url }); const text = getVerificationEmailText({ name, verificationUrl: url }); - queueEmail(env, { to: user.email, subject, html, text }).catch(err => + await queueEmail(env, { to: user.email, subject, html, text }).catch(err => console.error('[Auth] Verification email queue error:', err), ); }, diff --git a/packages/workers/src/auth/email.ts b/packages/workers/src/auth/email.ts index 6f803ea8c..e38bb1bdc 100644 --- a/packages/workers/src/auth/email.ts +++ b/packages/workers/src/auth/email.ts @@ -19,6 +19,7 @@ interface SendEmailParams { subject: string; html: string; text: string; + replyTo?: string; } interface EmailResult { @@ -55,7 +56,7 @@ export function createEmailService(env: Env): EmailService { /** * Send email using Postmark */ - async function sendEmail({ to, subject, html, text }: SendEmailParams): Promise { + async function sendEmail({ to, subject, html, text, replyTo }: SendEmailParams): Promise { if (env.SEND_EMAILS_IN_DEV !== 'true' && !isProduction) { console.log('[Email] Development environment - email sending is DISABLED'); return { success: true, id: 'dev-id' }; @@ -73,6 +74,7 @@ export function createEmailService(env: Env): EmailService { Subject: subject, HtmlBody: html, TextBody: text, + ...(replyTo ? { ReplyTo: replyTo } : {}), MessageStream: 'outbound', }); diff --git a/packages/workers/src/durable-objects/ProjectDoc.ts b/packages/workers/src/durable-objects/ProjectDoc.ts index 5d0a4b091..9221996ce 100644 --- a/packages/workers/src/durable-objects/ProjectDoc.ts +++ b/packages/workers/src/durable-objects/ProjectDoc.ts @@ -694,18 +694,34 @@ export class ProjectDoc extends DurableObject { } case messageAwareness: { const awarenessUpdate = decoding.readVarUint8Array(decoder); + + // Capture clientId from the awareness update event instead of + // manually re-decoding the binary message format + const attachment = ws.deserializeAttachment() as WebSocketAttachment; + const needsClientId = attachment && attachment.awarenessClientId === null; + + let capturedClientId: number | null = null; + const onUpdate = needsClientId + ? ({ + added, + updated, + }: { + added: number[]; + updated: number[]; + removed: number[]; + }) => { + const ids = [...added, ...updated]; + if (ids.length > 0) capturedClientId = ids[0]; + } + : null; + + if (onUpdate) this.awareness!.on('update', onUpdate); awarenessProtocol.applyAwarenessUpdate(this.awareness!, awarenessUpdate, ws); + if (onUpdate) this.awareness!.off('update', onUpdate); - // Store the client's awareness ID in the attachment - const awarenessDecoder = decoding.createDecoder(awarenessUpdate); - const len = decoding.readVarUint(awarenessDecoder); - if (len > 0) { - const clientId = decoding.readVarUint(awarenessDecoder); - const attachment = ws.deserializeAttachment() as WebSocketAttachment; - if (attachment && attachment.awarenessClientId === null) { - attachment.awarenessClientId = clientId; - ws.serializeAttachment(attachment); - } + if (capturedClientId !== null && needsClientId) { + attachment.awarenessClientId = capturedClientId; + ws.serializeAttachment(attachment); } break; } diff --git a/packages/workers/src/lib/email-queue.ts b/packages/workers/src/lib/email-queue.ts index 70a74452e..8fbe0fe59 100644 --- a/packages/workers/src/lib/email-queue.ts +++ b/packages/workers/src/lib/email-queue.ts @@ -12,6 +12,7 @@ export interface EmailPayload { subject: string; html?: string; text?: string; + replyTo?: string; } export async function queueEmail(env: Env, payload: EmailPayload): Promise { diff --git a/packages/workers/src/lib/send-invitation-email.ts b/packages/workers/src/lib/send-invitation-email.ts index 5dc925270..d98b4cf93 100644 --- a/packages/workers/src/lib/send-invitation-email.ts +++ b/packages/workers/src/lib/send-invitation-email.ts @@ -109,7 +109,7 @@ export async function sendInvitationEmail( const { getProjectInvitationEmailHtml, getProjectInvitationEmailText } = await import('@/auth/emailTemplates.js'); - const { escapeHtml } = await import('@/lib/escapeHtml.js'); + const { sanitizeEmailSubject } = await import('@/lib/escapeHtml.js'); const emailHtml = getProjectInvitationEmailHtml({ projectName, @@ -124,7 +124,7 @@ export async function sendInvitationEmail( role, }); - const safeProjectName = escapeHtml(projectName); + const safeProjectName = sanitizeEmailSubject(projectName); try { await queueEmail(env, { diff --git a/packages/workers/src/lib/stripe.ts b/packages/workers/src/lib/stripe.ts index a284e613c..75d5974dc 100644 --- a/packages/workers/src/lib/stripe.ts +++ b/packages/workers/src/lib/stripe.ts @@ -12,7 +12,7 @@ import type { Env } from '@/types'; * Stripe API version used across the application * Update this single constant when upgrading Stripe API version */ -export const STRIPE_API_VERSION = '2025-12-15.clover' as const; +export const STRIPE_API_VERSION = '2026-02-25.clover' as const; /** * Create a configured Stripe client instance diff --git a/packages/workers/src/routes/admin/stripe-tools.ts b/packages/workers/src/routes/admin/stripe-tools.ts index d59b8c3c1..36f9b0009 100644 --- a/packages/workers/src/routes/admin/stripe-tools.ts +++ b/packages/workers/src/routes/admin/stripe-tools.ts @@ -18,12 +18,6 @@ const stripeToolsRoutes = new OpenAPIHono<{ Bindings: Env }>({ defaultHook: validationHook, }); -// Extended types for Stripe API version properties -interface SubscriptionWithPeriods extends Stripe.Subscription { - current_period_start?: number; - current_period_end?: number; -} - interface InvoiceWithSubscription extends Stripe.Invoice { subscription?: string | Stripe.Subscription | null; } @@ -153,6 +147,8 @@ const SubscriptionItemSchema = z unitAmount: z.number().nullable(), interval: z.string().nullable(), quantity: z.number().nullable(), + currentPeriodStart: z.number(), + currentPeriodEnd: z.number(), }) .openapi('SubscriptionItem'); @@ -161,8 +157,6 @@ const StripeSubscriptionSchema = z id: z.string(), status: z.string(), currency: z.string(), - currentPeriodStart: z.number(), - currentPeriodEnd: z.number(), cancelAtPeriodEnd: z.boolean(), cancelAt: z.number().nullable(), canceledAt: z.number().nullable(), @@ -747,13 +741,10 @@ stripeToolsRoutes.openapi(subscriptionsRoute, async c => { return c.json({ customerId, subscriptions: subscriptions.data.map(sub => { - const subWithPeriods = sub as SubscriptionWithPeriods; return { id: sub.id, status: sub.status, currency: sub.currency, - currentPeriodStart: subWithPeriods.current_period_start ?? 0, - currentPeriodEnd: subWithPeriods.current_period_end ?? 0, cancelAtPeriodEnd: sub.cancel_at_period_end, cancelAt: sub.cancel_at, canceledAt: sub.canceled_at, @@ -767,6 +758,8 @@ stripeToolsRoutes.openapi(subscriptionsRoute, async c => { productId: item.price.product, unitAmount: item.price.unit_amount, interval: item.price.recurring?.interval ?? null, + currentPeriodStart: item.current_period_start, + currentPeriodEnd: item.current_period_end, quantity: item.quantity, })), defaultPaymentMethod: diff --git a/packages/workers/src/routes/billing/__tests__/invoiceHandlers.test.ts b/packages/workers/src/routes/billing/__tests__/invoiceHandlers.test.ts index 4795ec5bd..c85927d7a 100644 --- a/packages/workers/src/routes/billing/__tests__/invoiceHandlers.test.ts +++ b/packages/workers/src/routes/billing/__tests__/invoiceHandlers.test.ts @@ -248,6 +248,7 @@ describe('Invoice Handlers', () => { expect(result.handled).toBe(true); expect(result.result).toBe('payment_failed_processed'); + expect(mockEmailQueue.send).toHaveBeenCalledTimes(1); }); it('logs when dunning email skipped due to no user', async () => { diff --git a/packages/workers/src/routes/billing/__tests__/subscriptionHandlers.test.ts b/packages/workers/src/routes/billing/__tests__/subscriptionHandlers.test.ts index 949a3b9eb..ef47bc8f3 100644 --- a/packages/workers/src/routes/billing/__tests__/subscriptionHandlers.test.ts +++ b/packages/workers/src/routes/billing/__tests__/subscriptionHandlers.test.ts @@ -78,9 +78,7 @@ describe('Subscription Handlers', () => { status: 'active', customer: 'cus_123', metadata: { orgId: 'org-1' }, - items: { data: [{ price: { lookup_key: 'team' } }] }, - current_period_start: Math.floor(Date.now() / 1000), - current_period_end: Math.floor(Date.now() / 1000) + 86400 * 30, + items: { data: [{ price: { lookup_key: 'team' }, current_period_start: Math.floor(Date.now() / 1000), current_period_end: Math.floor(Date.now() / 1000) + 86400 * 30 }] }, } as unknown as Stripe.Subscription; const ctx = createTestContext(db); @@ -125,9 +123,7 @@ describe('Subscription Handlers', () => { status: 'trialing', customer: 'cus_456', metadata: { orgId: 'org-new' }, - items: { data: [{ price: { lookup_key: 'enterprise' } }] }, - current_period_start: Math.floor(Date.now() / 1000), - current_period_end: Math.floor(Date.now() / 1000) + 86400 * 30, + items: { data: [{ price: { lookup_key: 'enterprise' }, current_period_start: Math.floor(Date.now() / 1000), current_period_end: Math.floor(Date.now() / 1000) + 86400 * 30 }] }, cancel_at_period_end: false, trial_start: Math.floor(Date.now() / 1000), trial_end: Math.floor(Date.now() / 1000) + 86400 * 14, @@ -188,9 +184,7 @@ describe('Subscription Handlers', () => { id: 'sub_123', status: 'past_due', customer: 'cus_123', - items: { data: [{ price: { lookup_key: 'team' } }] }, - current_period_start: Math.floor(Date.now() / 1000), - current_period_end: Math.floor(Date.now() / 1000) + 86400 * 30, + items: { data: [{ price: { lookup_key: 'team' }, current_period_start: Math.floor(Date.now() / 1000), current_period_end: Math.floor(Date.now() / 1000) + 86400 * 30 }] }, cancel_at_period_end: false, } as unknown as Stripe.Subscription; @@ -220,9 +214,7 @@ describe('Subscription Handlers', () => { id: 'sub_123', status: 'active', customer: 'cus_123', - items: { data: [{ price: { lookup_key: 'team' } }] }, - current_period_start: Math.floor(Date.now() / 1000), - current_period_end: Math.floor(Date.now() / 1000) + 86400 * 30, + items: { data: [{ price: { lookup_key: 'team' }, current_period_start: Math.floor(Date.now() / 1000), current_period_end: Math.floor(Date.now() / 1000) + 86400 * 30 }] }, cancel_at_period_end: true, } as unknown as Stripe.Subscription; @@ -338,8 +330,7 @@ describe('Subscription Handlers', () => { const stripeSub = { id: 'sub_123', status: 'active', - current_period_start: Math.floor(Date.now() / 1000), - current_period_end: Math.floor(Date.now() / 1000) + 86400 * 30, + items: { data: [{ current_period_start: Math.floor(Date.now() / 1000), current_period_end: Math.floor(Date.now() / 1000) + 86400 * 30 }] }, } as unknown as Stripe.Subscription; const ctx = createTestContext(db); diff --git a/packages/workers/src/routes/billing/handlers/invoiceHandlers.ts b/packages/workers/src/routes/billing/handlers/invoiceHandlers.ts index 7405c5238..de45a3680 100644 --- a/packages/workers/src/routes/billing/handlers/invoiceHandlers.ts +++ b/packages/workers/src/routes/billing/handlers/invoiceHandlers.ts @@ -16,8 +16,8 @@ function getDb(ctx: WebhookContext) { return ctx.db as ReturnType; } -// The Stripe API version used (2025-12-15.clover) has (invoice as InvoiceWithSubscription).subscription -// that might not be in the standard types +// The subscription field moved to invoice.parent.subscription_details.subscription in newer +// API versions, but webhook payloads may still include it at the top level interface InvoiceWithSubscription extends Stripe.Invoice { subscription?: string | Stripe.Subscription | null; } diff --git a/packages/workers/src/routes/billing/handlers/subscriptionHandlers.ts b/packages/workers/src/routes/billing/handlers/subscriptionHandlers.ts index 9e560e0f8..fc97496d9 100644 --- a/packages/workers/src/routes/billing/handlers/subscriptionHandlers.ts +++ b/packages/workers/src/routes/billing/handlers/subscriptionHandlers.ts @@ -14,13 +14,6 @@ function getDb(ctx: WebhookContext) { return ctx.db as ReturnType; } -// The Stripe API version used (2025-12-15.clover) uses different field names -// These interfaces extend the Stripe types with the fields we need -interface SubscriptionWithPeriods extends Stripe.Subscription { - current_period_start?: number; - current_period_end?: number; -} - /** * Handle customer.subscription.created * Note: Better Auth Stripe plugin typically handles initial creation @@ -71,20 +64,21 @@ export async function handleSubscriptionCreated( // Create subscription record // Note: This is a fallback - Better Auth should handle most creations const subscriptionId = crypto.randomUUID(); + const firstItem = sub.items.data[0]; await db.insert(subscription).values({ id: subscriptionId, - plan: sub.items.data[0]?.price?.lookup_key || 'unknown', + plan: firstItem?.price?.lookup_key || 'unknown', referenceId: orgId, stripeCustomerId: typeof sub.customer === 'string' ? sub.customer : sub.customer?.id, stripeSubscriptionId: sub.id, status: sub.status, periodStart: - (sub as SubscriptionWithPeriods).current_period_start ? - new Date((sub as SubscriptionWithPeriods).current_period_start! * 1000) + firstItem?.current_period_start ? + new Date(firstItem.current_period_start * 1000) : null, periodEnd: - (sub as SubscriptionWithPeriods).current_period_end ? - new Date((sub as SubscriptionWithPeriods).current_period_end! * 1000) + firstItem?.current_period_end ? + new Date(firstItem.current_period_end * 1000) : null, cancelAtPeriodEnd: sub.cancel_at_period_end, cancelAt: sub.cancel_at ? new Date(sub.cancel_at * 1000) : null, @@ -152,17 +146,18 @@ export async function handleSubscriptionUpdated( } // Update subscription state + const firstItem = sub.items.data[0]; await db .update(subscription) .set({ status: sub.status, periodStart: - (sub as SubscriptionWithPeriods).current_period_start ? - new Date((sub as SubscriptionWithPeriods).current_period_start! * 1000) + firstItem?.current_period_start ? + new Date(firstItem.current_period_start * 1000) : null, periodEnd: - (sub as SubscriptionWithPeriods).current_period_end ? - new Date((sub as SubscriptionWithPeriods).current_period_end! * 1000) + firstItem?.current_period_end ? + new Date(firstItem.current_period_end * 1000) : null, cancelAtPeriodEnd: sub.cancel_at_period_end, cancelAt: sub.cancel_at ? new Date(sub.cancel_at * 1000) : null, @@ -323,17 +318,18 @@ export async function handleSubscriptionResumed( }; } + const firstItem = sub.items.data[0]; await db .update(subscription) .set({ status: sub.status || 'active', periodStart: - (sub as SubscriptionWithPeriods).current_period_start ? - new Date((sub as SubscriptionWithPeriods).current_period_start! * 1000) + firstItem?.current_period_start ? + new Date(firstItem.current_period_start * 1000) : null, periodEnd: - (sub as SubscriptionWithPeriods).current_period_end ? - new Date((sub as SubscriptionWithPeriods).current_period_end! * 1000) + firstItem?.current_period_end ? + new Date(firstItem.current_period_end * 1000) : null, updatedAt: new Date(), }) diff --git a/packages/workers/src/routes/contact.ts b/packages/workers/src/routes/contact.ts index d492f3cee..d8bf60586 100644 --- a/packages/workers/src/routes/contact.ts +++ b/packages/workers/src/routes/contact.ts @@ -179,7 +179,8 @@ contact.openapi(submitContactRoute, async c => { await queueEmail(env, { to: contactEmail, subject: `[Contact Form] ${subject || 'New Inquiry'}`, - text: `New contact form submission:\n\nName: ${name}\nEmail: ${email}\nSubject: ${subject || 'Not specified'}\n\nMessage:\n${message}\n\nReply-To: ${email}`, + replyTo: email, + text: `New contact form submission:\n\nName: ${name}\nEmail: ${email}\nSubject: ${subject || 'Not specified'}\n\nMessage:\n${message}`, html: `

New Contact Form Submission

From de3dec2656971870ef6701b7f736abf612b194ee Mon Sep 17 00:00:00 2001 From: GitHub Actions Date: Sat, 7 Mar 2026 02:04:19 +0000 Subject: [PATCH 5/9] Apply Prettier formatting --- .cursor/mcp.json | 13 ++--- .mcp.json | 13 ++--- .vscode/mcp.json | 13 ++--- packages/workers/src/auth/email.ts | 8 ++- .../workers/src/durable-objects/ProjectDoc.ts | 12 ++--- .../__tests__/subscriptionHandlers.test.ts | 49 +++++++++++++++++-- .../billing/handlers/subscriptionHandlers.ts | 25 +++------- 7 files changed, 69 insertions(+), 64 deletions(-) diff --git a/.cursor/mcp.json b/.cursor/mcp.json index f9e450272..12994e4fa 100644 --- a/.cursor/mcp.json +++ b/.cursor/mcp.json @@ -3,26 +3,19 @@ "corates": { "type": "stdio", "command": "node", - "args": [ - "${workspaceFolder}/packages/mcp/dist/server.js" - ] + "args": ["${workspaceFolder}/packages/mcp/dist/server.js"] }, "corates-memory": { "type": "stdio", "command": "node", - "args": [ - "${workspaceFolder}/packages/mcp-memory/dist/server.js" - ], + "args": ["${workspaceFolder}/packages/mcp-memory/dist/server.js"], "env": { "MCP_MEMORY_REPO_ROOT": "${workspaceFolder}" } }, "ark-ui": { "command": "npx", - "args": [ - "-y", - "@ark-ui/mcp" - ] + "args": ["-y", "@ark-ui/mcp"] }, "sentry": { "url": "https://mcp.sentry.dev/mcp" diff --git a/.mcp.json b/.mcp.json index 48629b419..91feed02c 100644 --- a/.mcp.json +++ b/.mcp.json @@ -3,16 +3,12 @@ "corates": { "type": "stdio", "command": "node", - "args": [ - "packages/mcp/dist/server.js" - ] + "args": ["packages/mcp/dist/server.js"] }, "corates-memory": { "type": "stdio", "command": "node", - "args": [ - "packages/mcp-memory/dist/server.js" - ], + "args": ["packages/mcp-memory/dist/server.js"], "env": { "MCP_MEMORY_REPO_ROOT": "." } @@ -20,10 +16,7 @@ "ark-ui": { "type": "stdio", "command": "npx", - "args": [ - "-y", - "@ark-ui/mcp" - ] + "args": ["-y", "@ark-ui/mcp"] }, "sentry": { "type": "http", diff --git a/.vscode/mcp.json b/.vscode/mcp.json index 1a8ba55ca..1ee1de07d 100644 --- a/.vscode/mcp.json +++ b/.vscode/mcp.json @@ -3,26 +3,19 @@ "corates": { "type": "stdio", "command": "node", - "args": [ - "${workspaceFolder}/packages/mcp/dist/server.js" - ] + "args": ["${workspaceFolder}/packages/mcp/dist/server.js"] }, "corates-memory": { "type": "stdio", "command": "node", - "args": [ - "${workspaceFolder}/packages/mcp-memory/dist/server.js" - ], + "args": ["${workspaceFolder}/packages/mcp-memory/dist/server.js"], "env": { "MCP_MEMORY_REPO_ROOT": "${workspaceFolder}" } }, "ark-ui": { "command": "npx", - "args": [ - "-y", - "@ark-ui/mcp" - ] + "args": ["-y", "@ark-ui/mcp"] }, "sentry": { "type": "http", diff --git a/packages/workers/src/auth/email.ts b/packages/workers/src/auth/email.ts index e38bb1bdc..0f268e291 100644 --- a/packages/workers/src/auth/email.ts +++ b/packages/workers/src/auth/email.ts @@ -56,7 +56,13 @@ export function createEmailService(env: Env): EmailService { /** * Send email using Postmark */ - async function sendEmail({ to, subject, html, text, replyTo }: SendEmailParams): Promise { + async function sendEmail({ + to, + subject, + html, + text, + replyTo, + }: SendEmailParams): Promise { if (env.SEND_EMAILS_IN_DEV !== 'true' && !isProduction) { console.log('[Email] Development environment - email sending is DISABLED'); return { success: true, id: 'dev-id' }; diff --git a/packages/workers/src/durable-objects/ProjectDoc.ts b/packages/workers/src/durable-objects/ProjectDoc.ts index 9221996ce..941f4e441 100644 --- a/packages/workers/src/durable-objects/ProjectDoc.ts +++ b/packages/workers/src/durable-objects/ProjectDoc.ts @@ -701,15 +701,9 @@ export class ProjectDoc extends DurableObject { const needsClientId = attachment && attachment.awarenessClientId === null; let capturedClientId: number | null = null; - const onUpdate = needsClientId - ? ({ - added, - updated, - }: { - added: number[]; - updated: number[]; - removed: number[]; - }) => { + const onUpdate = + needsClientId ? + ({ added, updated }: { added: number[]; updated: number[]; removed: number[] }) => { const ids = [...added, ...updated]; if (ids.length > 0) capturedClientId = ids[0]; } diff --git a/packages/workers/src/routes/billing/__tests__/subscriptionHandlers.test.ts b/packages/workers/src/routes/billing/__tests__/subscriptionHandlers.test.ts index ef47bc8f3..343d62be9 100644 --- a/packages/workers/src/routes/billing/__tests__/subscriptionHandlers.test.ts +++ b/packages/workers/src/routes/billing/__tests__/subscriptionHandlers.test.ts @@ -78,7 +78,15 @@ describe('Subscription Handlers', () => { status: 'active', customer: 'cus_123', metadata: { orgId: 'org-1' }, - items: { data: [{ price: { lookup_key: 'team' }, current_period_start: Math.floor(Date.now() / 1000), current_period_end: Math.floor(Date.now() / 1000) + 86400 * 30 }] }, + items: { + data: [ + { + price: { lookup_key: 'team' }, + current_period_start: Math.floor(Date.now() / 1000), + current_period_end: Math.floor(Date.now() / 1000) + 86400 * 30, + }, + ], + }, } as unknown as Stripe.Subscription; const ctx = createTestContext(db); @@ -123,7 +131,15 @@ describe('Subscription Handlers', () => { status: 'trialing', customer: 'cus_456', metadata: { orgId: 'org-new' }, - items: { data: [{ price: { lookup_key: 'enterprise' }, current_period_start: Math.floor(Date.now() / 1000), current_period_end: Math.floor(Date.now() / 1000) + 86400 * 30 }] }, + items: { + data: [ + { + price: { lookup_key: 'enterprise' }, + current_period_start: Math.floor(Date.now() / 1000), + current_period_end: Math.floor(Date.now() / 1000) + 86400 * 30, + }, + ], + }, cancel_at_period_end: false, trial_start: Math.floor(Date.now() / 1000), trial_end: Math.floor(Date.now() / 1000) + 86400 * 14, @@ -184,7 +200,15 @@ describe('Subscription Handlers', () => { id: 'sub_123', status: 'past_due', customer: 'cus_123', - items: { data: [{ price: { lookup_key: 'team' }, current_period_start: Math.floor(Date.now() / 1000), current_period_end: Math.floor(Date.now() / 1000) + 86400 * 30 }] }, + items: { + data: [ + { + price: { lookup_key: 'team' }, + current_period_start: Math.floor(Date.now() / 1000), + current_period_end: Math.floor(Date.now() / 1000) + 86400 * 30, + }, + ], + }, cancel_at_period_end: false, } as unknown as Stripe.Subscription; @@ -214,7 +238,15 @@ describe('Subscription Handlers', () => { id: 'sub_123', status: 'active', customer: 'cus_123', - items: { data: [{ price: { lookup_key: 'team' }, current_period_start: Math.floor(Date.now() / 1000), current_period_end: Math.floor(Date.now() / 1000) + 86400 * 30 }] }, + items: { + data: [ + { + price: { lookup_key: 'team' }, + current_period_start: Math.floor(Date.now() / 1000), + current_period_end: Math.floor(Date.now() / 1000) + 86400 * 30, + }, + ], + }, cancel_at_period_end: true, } as unknown as Stripe.Subscription; @@ -330,7 +362,14 @@ describe('Subscription Handlers', () => { const stripeSub = { id: 'sub_123', status: 'active', - items: { data: [{ current_period_start: Math.floor(Date.now() / 1000), current_period_end: Math.floor(Date.now() / 1000) + 86400 * 30 }] }, + items: { + data: [ + { + current_period_start: Math.floor(Date.now() / 1000), + current_period_end: Math.floor(Date.now() / 1000) + 86400 * 30, + }, + ], + }, } as unknown as Stripe.Subscription; const ctx = createTestContext(db); diff --git a/packages/workers/src/routes/billing/handlers/subscriptionHandlers.ts b/packages/workers/src/routes/billing/handlers/subscriptionHandlers.ts index fc97496d9..6b37cacbc 100644 --- a/packages/workers/src/routes/billing/handlers/subscriptionHandlers.ts +++ b/packages/workers/src/routes/billing/handlers/subscriptionHandlers.ts @@ -73,13 +73,8 @@ export async function handleSubscriptionCreated( stripeSubscriptionId: sub.id, status: sub.status, periodStart: - firstItem?.current_period_start ? - new Date(firstItem.current_period_start * 1000) - : null, - periodEnd: - firstItem?.current_period_end ? - new Date(firstItem.current_period_end * 1000) - : null, + firstItem?.current_period_start ? new Date(firstItem.current_period_start * 1000) : null, + periodEnd: firstItem?.current_period_end ? new Date(firstItem.current_period_end * 1000) : null, cancelAtPeriodEnd: sub.cancel_at_period_end, cancelAt: sub.cancel_at ? new Date(sub.cancel_at * 1000) : null, trialStart: sub.trial_start ? new Date(sub.trial_start * 1000) : null, @@ -152,13 +147,9 @@ export async function handleSubscriptionUpdated( .set({ status: sub.status, periodStart: - firstItem?.current_period_start ? - new Date(firstItem.current_period_start * 1000) - : null, + firstItem?.current_period_start ? new Date(firstItem.current_period_start * 1000) : null, periodEnd: - firstItem?.current_period_end ? - new Date(firstItem.current_period_end * 1000) - : null, + firstItem?.current_period_end ? new Date(firstItem.current_period_end * 1000) : null, cancelAtPeriodEnd: sub.cancel_at_period_end, cancelAt: sub.cancel_at ? new Date(sub.cancel_at * 1000) : null, canceledAt: sub.canceled_at ? new Date(sub.canceled_at * 1000) : null, @@ -324,13 +315,9 @@ export async function handleSubscriptionResumed( .set({ status: sub.status || 'active', periodStart: - firstItem?.current_period_start ? - new Date(firstItem.current_period_start * 1000) - : null, + firstItem?.current_period_start ? new Date(firstItem.current_period_start * 1000) : null, periodEnd: - firstItem?.current_period_end ? - new Date(firstItem.current_period_end * 1000) - : null, + firstItem?.current_period_end ? new Date(firstItem.current_period_end * 1000) : null, updatedAt: new Date(), }) .where(eq(subscription.id, existing.id)); From d65cc1cde87f9ae633756d170ffca3dca63d1913 Mon Sep 17 00:00:00 2001 From: Jacob Maynard Date: Fri, 6 Mar 2026 21:07:03 -0500 Subject: [PATCH 6/9] update deps --- package.json | 8 +- packages/landing/package.json | 2 +- packages/mcp-memory/package.json | 2 +- packages/mcp/package.json | 2 +- packages/web/package.json | 68 +- packages/workers/package.json | 14 +- pnpm-lock.yaml | 3718 ++++++++++++++++++------------ pnpm-workspace.yaml | 2 + 8 files changed, 2230 insertions(+), 1586 deletions(-) diff --git a/package.json b/package.json index fbc253735..fe4eb80a5 100644 --- a/package.json +++ b/package.json @@ -45,20 +45,20 @@ "docs:preview": "pnpm --filter @corates/docs preview" }, "devDependencies": { - "@eslint/js": "^9.39.3", + "@eslint/js": "^9.39.4", "@typescript-eslint/parser": "^8.56.1", "agent-browser": "^0.4.4", "concurrently": "^9.2.1", "dotenv": "^17.3.1", - "eslint": "^9.39.3", + "eslint": "^9.39.4", "eslint-plugin-drizzle": "^0.2.3", "eslint-plugin-solid": "^0.14.5", "eslint-plugin-sonarjs": "^3.0.7", "eslint-plugin-unicorn": "^62.0.0", "prettier": "^3.8.1", "prettier-plugin-tailwindcss": "^0.7.2", - "turbo": "^2.8.11", - "wrangler": "^4.69.0" + "turbo": "^2.8.14", + "wrangler": "^4.71.0" }, "engines": { "node": ">=24.0.0", diff --git a/packages/landing/package.json b/packages/landing/package.json index 4e8258b58..38af4c187 100644 --- a/packages/landing/package.json +++ b/packages/landing/package.json @@ -18,7 +18,7 @@ "@solidjs/meta": "^0.29.4", "@solidjs/router": "^0.15.4", "@solidjs/start": "^1.3.2", - "countup.js": "^2.9.0", + "countup.js": "^2.10.0", "solid-icons": "^1.2.0", "solid-js": "^1.9.11", "vinxi": "^0.5.11" diff --git a/packages/mcp-memory/package.json b/packages/mcp-memory/package.json index fd7f257f3..73bca980b 100644 --- a/packages/mcp-memory/package.json +++ b/packages/mcp-memory/package.json @@ -26,7 +26,7 @@ }, "devDependencies": { "@types/better-sqlite3": "^7.6.13", - "@types/node": "^25.3.1", + "@types/node": "^25.3.5", "tsx": "^4.21.0", "typescript": "^5.9.3", "vitest": "^4.0.18" diff --git a/packages/mcp/package.json b/packages/mcp/package.json index b5bf4c191..23b227863 100644 --- a/packages/mcp/package.json +++ b/packages/mcp/package.json @@ -24,7 +24,7 @@ "zod": "^4.3.6" }, "devDependencies": { - "@types/node": "^25.3.1", + "@types/node": "^25.3.5", "tsx": "^4.21.0", "typescript": "^5.9.3", "vitest": "^4.0.18" diff --git a/packages/web/package.json b/packages/web/package.json index 491c23936..c8648cbe2 100644 --- a/packages/web/package.json +++ b/packages/web/package.json @@ -17,46 +17,46 @@ "analyze": "vite build --mode analyze && source-map-explorer dist/assets/index-*.js --no-border-checks" }, "dependencies": { - "@ark-ui/solid": "^5.32.0", + "@ark-ui/solid": "^5.34.1", "@corates/shared": "workspace:*", - "@embedpdf/core": "^2.7.0", - "@embedpdf/engines": "^2.7.0", - "@embedpdf/models": "^2.7.0", - "@embedpdf/pdfium": "^2.7.0", - "@embedpdf/plugin-annotation": "^2.7.0", - "@embedpdf/plugin-capture": "^2.7.0", - "@embedpdf/plugin-commands": "^2.7.0", - "@embedpdf/plugin-document-manager": "^2.7.0", - "@embedpdf/plugin-export": "^2.7.0", - "@embedpdf/plugin-fullscreen": "^2.7.0", - "@embedpdf/plugin-history": "^2.7.0", - "@embedpdf/plugin-i18n": "^2.7.0", - "@embedpdf/plugin-interaction-manager": "^2.7.0", - "@embedpdf/plugin-pan": "^2.7.0", - "@embedpdf/plugin-print": "^2.7.0", - "@embedpdf/plugin-redaction": "^2.7.0", - "@embedpdf/plugin-render": "^2.7.0", - "@embedpdf/plugin-rotate": "^2.7.0", - "@embedpdf/plugin-scroll": "^2.7.0", - "@embedpdf/plugin-search": "^2.7.0", - "@embedpdf/plugin-selection": "^2.7.0", - "@embedpdf/plugin-spread": "^2.7.0", - "@embedpdf/plugin-thumbnail": "^2.7.0", - "@embedpdf/plugin-tiling": "^2.7.0", - "@embedpdf/plugin-ui": "^2.7.0", - "@embedpdf/plugin-view-manager": "^2.7.0", - "@embedpdf/plugin-viewport": "^2.7.0", - "@embedpdf/plugin-zoom": "^2.7.0", - "@sentry/solid": "^10.40.0", + "@embedpdf/core": "^2.8.0", + "@embedpdf/engines": "^2.8.0", + "@embedpdf/models": "^2.8.0", + "@embedpdf/pdfium": "^2.8.0", + "@embedpdf/plugin-annotation": "^2.8.0", + "@embedpdf/plugin-capture": "^2.8.0", + "@embedpdf/plugin-commands": "^2.8.0", + "@embedpdf/plugin-document-manager": "^2.8.0", + "@embedpdf/plugin-export": "^2.8.0", + "@embedpdf/plugin-fullscreen": "^2.8.0", + "@embedpdf/plugin-history": "^2.8.0", + "@embedpdf/plugin-i18n": "^2.8.0", + "@embedpdf/plugin-interaction-manager": "^2.8.0", + "@embedpdf/plugin-pan": "^2.8.0", + "@embedpdf/plugin-print": "^2.8.0", + "@embedpdf/plugin-redaction": "^2.8.0", + "@embedpdf/plugin-render": "^2.8.0", + "@embedpdf/plugin-rotate": "^2.8.0", + "@embedpdf/plugin-scroll": "^2.8.0", + "@embedpdf/plugin-search": "^2.8.0", + "@embedpdf/plugin-selection": "^2.8.0", + "@embedpdf/plugin-spread": "^2.8.0", + "@embedpdf/plugin-thumbnail": "^2.8.0", + "@embedpdf/plugin-tiling": "^2.8.0", + "@embedpdf/plugin-ui": "^2.8.0", + "@embedpdf/plugin-view-manager": "^2.8.0", + "@embedpdf/plugin-viewport": "^2.8.0", + "@embedpdf/plugin-zoom": "^2.8.0", + "@sentry/solid": "^10.42.0", "@solid-primitives/scheduled": "^1.5.3", "@solidjs/router": "^0.15.4", "@tanstack/solid-query": "^5.90.23", "@tanstack/solid-table": "^8.21.3", - "better-auth": "^1.4.19", + "better-auth": "^1.5.4", "chart.js": "^4.5.1", "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", - "countup.js": "^2.9.0", + "countup.js": "^2.10.0", "d3": "^7.9.0", "dexie": "^4.3.0", "preact": "^10.28.4", @@ -78,8 +78,8 @@ "fake-indexeddb": "^6.2.5", "jsdom": "^27.4.0", "prettier": "^3.8.1", - "puppeteer": "^24.37.5", - "rollup-plugin-visualizer": "^6.0.5", + "puppeteer": "^24.38.0", + "rollup-plugin-visualizer": "^6.0.11", "source-map-explorer": "^2.5.3", "tailwindcss": "^4.2.1", "terser": "^5.46.0", diff --git a/packages/workers/package.json b/packages/workers/package.json index 341f6b629..8fb3019f0 100644 --- a/packages/workers/package.json +++ b/packages/workers/package.json @@ -30,17 +30,17 @@ "localflare": "localflare" }, "dependencies": { - "@better-auth/stripe": "^1.4.19", - "@cloudflare/workers-types": "^4.20260305.0", + "@better-auth/stripe": "^1.5.4", + "@cloudflare/workers-types": "^4.20260307.1", "@corates/shared": "workspace:*", "@hono/zod-openapi": "^1.2.2", - "@sentry/cloudflare": "^10.40.0", - "better-auth": "^1.4.19", + "@sentry/cloudflare": "^10.42.0", + "better-auth": "^1.5.4", "drizzle-orm": "^0.45.1", - "hono": "^4.12.3", + "hono": "^4.12.5", "lib0": "^0.2.117", "postmark": "^4.0.7", - "stripe": "^20.4.0", + "stripe": "^20.4.1", "y-protocols": "^1.0.7", "yjs": "^13.6.29", "zod": "^4.3.6" @@ -53,6 +53,6 @@ "localflare": "^0.3.1", "typescript": "^5.9.3", "vitest": "3.2.0", - "wrangler": "^4.69.0" + "wrangler": "^4.71.0" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 09dcdf562..d70829757 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -9,11 +9,11 @@ importers: .: devDependencies: '@eslint/js': - specifier: ^9.39.3 - version: 9.39.3 + specifier: ^9.39.4 + version: 9.39.4 '@typescript-eslint/parser': specifier: ^8.56.1 - version: 8.56.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3) + version: 8.56.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) agent-browser: specifier: ^0.4.4 version: 0.4.4 @@ -24,20 +24,20 @@ importers: specifier: ^17.3.1 version: 17.3.1 eslint: - specifier: ^9.39.3 - version: 9.39.3(jiti@2.6.1) + specifier: ^9.39.4 + version: 9.39.4(jiti@2.6.1) eslint-plugin-drizzle: specifier: ^0.2.3 - version: 0.2.3(eslint@9.39.3(jiti@2.6.1)) + version: 0.2.3(eslint@9.39.4(jiti@2.6.1)) eslint-plugin-solid: specifier: ^0.14.5 - version: 0.14.5(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3) + version: 0.14.5(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) eslint-plugin-sonarjs: specifier: ^3.0.7 - version: 3.0.7(eslint@9.39.3(jiti@2.6.1)) + version: 3.0.7(eslint@9.39.4(jiti@2.6.1)) eslint-plugin-unicorn: specifier: ^62.0.0 - version: 62.0.0(eslint@9.39.3(jiti@2.6.1)) + version: 62.0.0(eslint@9.39.4(jiti@2.6.1)) prettier: specifier: ^3.8.1 version: 3.8.1 @@ -45,11 +45,11 @@ importers: specifier: ^0.7.2 version: 0.7.2(prettier@3.8.1) turbo: - specifier: ^2.8.11 - version: 2.8.11 + specifier: ^2.8.14 + version: 2.8.14 wrangler: - specifier: ^4.69.0 - version: 4.69.0(@cloudflare/workers-types@4.20260305.0) + specifier: ^4.71.0 + version: 4.71.0(@cloudflare/workers-types@4.20260307.1) packages/docs: devDependencies: @@ -58,10 +58,10 @@ importers: version: 11.12.3 vitepress: specifier: ^1.6.4 - version: 1.6.4(@algolia/client-search@5.49.1)(@types/node@25.3.1)(axios@1.13.5)(change-case@5.4.4)(lightningcss@1.31.1)(postcss@8.5.6)(search-insights@2.17.3)(terser@5.46.0)(typescript@5.9.3) + version: 1.6.4(@algolia/client-search@5.49.1)(@types/node@25.3.5)(axios@1.13.6)(change-case@5.4.4)(lightningcss@1.31.1)(postcss@8.5.8)(search-insights@2.17.3)(terser@5.46.0)(typescript@5.9.3) vitepress-plugin-mermaid: specifier: ^2.0.17 - version: 2.0.17(mermaid@11.12.3)(vitepress@1.6.4(@algolia/client-search@5.49.1)(@types/node@25.3.1)(axios@1.13.5)(change-case@5.4.4)(lightningcss@1.31.1)(postcss@8.5.6)(search-insights@2.17.3)(terser@5.46.0)(typescript@5.9.3)) + version: 2.0.17(mermaid@11.12.3)(vitepress@1.6.4(@algolia/client-search@5.49.1)(@types/node@25.3.5)(axios@1.13.6)(change-case@5.4.4)(lightningcss@1.31.1)(postcss@8.5.8)(search-insights@2.17.3)(terser@5.46.0)(typescript@5.9.3)) packages/landing: dependencies: @@ -76,10 +76,10 @@ importers: version: 0.15.4(solid-js@1.9.11) '@solidjs/start': specifier: ^1.3.2 - version: 1.3.2(@testing-library/jest-dom@6.9.1)(solid-js@1.9.11)(vinxi@0.5.11(@types/node@25.3.1)(better-sqlite3@12.6.2)(db0@0.3.4(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260305.0)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.6.2)(gel@2.2.0)(kysely@0.28.11)))(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260305.0)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.6.2)(gel@2.2.0)(kysely@0.28.11))(ioredis@5.9.3)(jiti@2.6.1)(lightningcss@1.31.1)(rolldown@1.0.0-beta.51)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))(vite@7.3.1(@types/node@25.3.1)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)) + version: 1.3.2(@testing-library/jest-dom@6.9.1)(solid-js@1.9.11)(vinxi@0.5.11(8957e57c08f05dd579cfce7ceebb1280))(vite@7.3.1(@types/node@25.3.5)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)) countup.js: - specifier: ^2.9.0 - version: 2.9.0 + specifier: ^2.10.0 + version: 2.10.0 solid-icons: specifier: ^1.2.0 version: 1.2.0(solid-js@1.9.11) @@ -88,11 +88,11 @@ importers: version: 1.9.11 vinxi: specifier: ^0.5.11 - version: 0.5.11(@types/node@25.3.1)(better-sqlite3@12.6.2)(db0@0.3.4(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260305.0)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.6.2)(gel@2.2.0)(kysely@0.28.11)))(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260305.0)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.6.2)(gel@2.2.0)(kysely@0.28.11))(ioredis@5.9.3)(jiti@2.6.1)(lightningcss@1.31.1)(rolldown@1.0.0-beta.51)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + version: 0.5.11(8957e57c08f05dd579cfce7ceebb1280) devDependencies: '@tailwindcss/vite': specifier: ^4.2.1 - version: 4.2.1(vite@7.3.1(@types/node@25.3.1)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)) + version: 4.2.1(vite@7.3.1(@types/node@25.3.5)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)) tailwindcss: specifier: ^4.2.1 version: 4.2.1 @@ -107,8 +107,8 @@ importers: version: 4.3.6 devDependencies: '@types/node': - specifier: ^25.3.1 - version: 25.3.1 + specifier: ^25.3.5 + version: 25.3.5 tsx: specifier: ^4.21.0 version: 4.21.0 @@ -117,7 +117,7 @@ importers: version: 5.9.3 vitest: specifier: ^4.0.18 - version: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.3.1)(@vitest/ui@4.0.18)(jiti@2.6.1)(jsdom@27.4.0(@noble/hashes@2.0.1))(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + version: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.3.5)(@vitest/ui@4.0.18)(jiti@2.6.1)(jsdom@27.4.0(@noble/hashes@2.0.1))(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) packages/mcp-memory: dependencies: @@ -138,8 +138,8 @@ importers: specifier: ^7.6.13 version: 7.6.13 '@types/node': - specifier: ^25.3.1 - version: 25.3.1 + specifier: ^25.3.5 + version: 25.3.5 tsx: specifier: ^4.21.0 version: 4.21.0 @@ -148,7 +148,7 @@ importers: version: 5.9.3 vitest: specifier: ^4.0.18 - version: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.3.1)(@vitest/ui@4.0.18)(jiti@2.6.1)(jsdom@27.4.0(@noble/hashes@2.0.1))(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + version: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.3.5)(@vitest/ui@4.0.18)(jiti@2.6.1)(jsdom@27.4.0(@noble/hashes@2.0.1))(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) packages/shared: devDependencies: @@ -157,7 +157,7 @@ importers: version: 5.9.3 vitest: specifier: ^4.0.18 - version: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.3.1)(@vitest/ui@4.0.18)(jiti@2.6.1)(jsdom@27.4.0(@noble/hashes@2.0.1))(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + version: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.3.5)(@vitest/ui@4.0.18)(jiti@2.6.1)(jsdom@27.4.0(@noble/hashes@2.0.1))(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) packages/stripe-dev: devDependencies: @@ -168,98 +168,98 @@ importers: packages/web: dependencies: '@ark-ui/solid': - specifier: ^5.32.0 - version: 5.32.0(solid-js@1.9.11) + specifier: ^5.34.1 + version: 5.34.1(solid-js@1.9.11) '@corates/shared': specifier: workspace:* version: link:../shared '@embedpdf/core': - specifier: ^2.7.0 - version: 2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) + specifier: ^2.8.0 + version: 2.8.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) '@embedpdf/engines': - specifier: ^2.7.0 - version: 2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) + specifier: ^2.8.0 + version: 2.8.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) '@embedpdf/models': - specifier: ^2.7.0 - version: 2.7.0 + specifier: ^2.8.0 + version: 2.8.0 '@embedpdf/pdfium': - specifier: ^2.7.0 - version: 2.7.0 + specifier: ^2.8.0 + version: 2.8.0 '@embedpdf/plugin-annotation': - specifier: ^2.7.0 - version: 2.7.0(f91e72ac9819744cb003db79e9d0556d) + specifier: ^2.8.0 + version: 2.8.0(a402eff97e44b8a035d7f545c7158135) '@embedpdf/plugin-capture': - specifier: ^2.7.0 - version: 2.7.0(@embedpdf/core@2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(@embedpdf/plugin-interaction-manager@2.7.0(@embedpdf/core@2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(@embedpdf/plugin-render@2.7.0(@embedpdf/core@2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) + specifier: ^2.8.0 + version: 2.8.0(@embedpdf/core@2.8.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(@embedpdf/plugin-interaction-manager@2.8.0(@embedpdf/core@2.8.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(@embedpdf/plugin-render@2.8.0(@embedpdf/core@2.8.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) '@embedpdf/plugin-commands': - specifier: ^2.7.0 - version: 2.7.0(@embedpdf/core@2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) + specifier: ^2.8.0 + version: 2.8.0(@embedpdf/core@2.8.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) '@embedpdf/plugin-document-manager': - specifier: ^2.7.0 - version: 2.7.0(@embedpdf/core@2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) + specifier: ^2.8.0 + version: 2.8.0(@embedpdf/core@2.8.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) '@embedpdf/plugin-export': - specifier: ^2.7.0 - version: 2.7.0(@embedpdf/core@2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) + specifier: ^2.8.0 + version: 2.8.0(@embedpdf/core@2.8.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) '@embedpdf/plugin-fullscreen': - specifier: ^2.7.0 - version: 2.7.0(@embedpdf/core@2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) + specifier: ^2.8.0 + version: 2.8.0(@embedpdf/core@2.8.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) '@embedpdf/plugin-history': - specifier: ^2.7.0 - version: 2.7.0(@embedpdf/core@2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) + specifier: ^2.8.0 + version: 2.8.0(@embedpdf/core@2.8.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) '@embedpdf/plugin-i18n': - specifier: ^2.7.0 - version: 2.7.0(@embedpdf/core@2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) + specifier: ^2.8.0 + version: 2.8.0(@embedpdf/core@2.8.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) '@embedpdf/plugin-interaction-manager': - specifier: ^2.7.0 - version: 2.7.0(@embedpdf/core@2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) + specifier: ^2.8.0 + version: 2.8.0(@embedpdf/core@2.8.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) '@embedpdf/plugin-pan': - specifier: ^2.7.0 - version: 2.7.0(@embedpdf/core@2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(@embedpdf/plugin-interaction-manager@2.7.0(@embedpdf/core@2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(@embedpdf/plugin-viewport@2.7.0(@embedpdf/core@2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) + specifier: ^2.8.0 + version: 2.8.0(@embedpdf/core@2.8.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(@embedpdf/plugin-interaction-manager@2.8.0(@embedpdf/core@2.8.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(@embedpdf/plugin-viewport@2.8.0(@embedpdf/core@2.8.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) '@embedpdf/plugin-print': - specifier: ^2.7.0 - version: 2.7.0(@embedpdf/core@2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) + specifier: ^2.8.0 + version: 2.8.0(@embedpdf/core@2.8.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) '@embedpdf/plugin-redaction': - specifier: ^2.7.0 - version: 2.7.0(5f456a3f53bec2768d3935038fafaf9c) + specifier: ^2.8.0 + version: 2.8.0(4de63f8d21781097e5d675cdbaf73f71) '@embedpdf/plugin-render': - specifier: ^2.7.0 - version: 2.7.0(@embedpdf/core@2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) + specifier: ^2.8.0 + version: 2.8.0(@embedpdf/core@2.8.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) '@embedpdf/plugin-rotate': - specifier: ^2.7.0 - version: 2.7.0(@embedpdf/core@2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) + specifier: ^2.8.0 + version: 2.8.0(@embedpdf/core@2.8.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) '@embedpdf/plugin-scroll': - specifier: ^2.7.0 - version: 2.7.0(@embedpdf/core@2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(@embedpdf/plugin-viewport@2.7.0(@embedpdf/core@2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) + specifier: ^2.8.0 + version: 2.8.0(@embedpdf/core@2.8.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(@embedpdf/plugin-viewport@2.8.0(@embedpdf/core@2.8.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) '@embedpdf/plugin-search': - specifier: ^2.7.0 - version: 2.7.0(@embedpdf/core@2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) + specifier: ^2.8.0 + version: 2.8.0(@embedpdf/core@2.8.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) '@embedpdf/plugin-selection': - specifier: ^2.7.0 - version: 2.7.0(@embedpdf/core@2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(@embedpdf/plugin-interaction-manager@2.7.0(@embedpdf/core@2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) + specifier: ^2.8.0 + version: 2.8.0(@embedpdf/core@2.8.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(@embedpdf/plugin-interaction-manager@2.8.0(@embedpdf/core@2.8.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) '@embedpdf/plugin-spread': - specifier: ^2.7.0 - version: 2.7.0(@embedpdf/core@2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) + specifier: ^2.8.0 + version: 2.8.0(@embedpdf/core@2.8.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) '@embedpdf/plugin-thumbnail': - specifier: ^2.7.0 - version: 2.7.0(@embedpdf/core@2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(@embedpdf/plugin-render@2.7.0(@embedpdf/core@2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) + specifier: ^2.8.0 + version: 2.8.0(@embedpdf/core@2.8.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(@embedpdf/plugin-render@2.8.0(@embedpdf/core@2.8.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) '@embedpdf/plugin-tiling': - specifier: ^2.7.0 - version: 2.7.0(5a96f8242ae086e623dd61223674fb9c) + specifier: ^2.8.0 + version: 2.8.0(a2178b18b2fd24a91650f4cf7697ee26) '@embedpdf/plugin-ui': - specifier: ^2.7.0 - version: 2.7.0(5a96f8242ae086e623dd61223674fb9c) + specifier: ^2.8.0 + version: 2.8.0(a2178b18b2fd24a91650f4cf7697ee26) '@embedpdf/plugin-view-manager': - specifier: ^2.7.0 - version: 2.7.0(@embedpdf/core@2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) + specifier: ^2.8.0 + version: 2.8.0(@embedpdf/core@2.8.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) '@embedpdf/plugin-viewport': - specifier: ^2.7.0 - version: 2.7.0(@embedpdf/core@2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) + specifier: ^2.8.0 + version: 2.8.0(@embedpdf/core@2.8.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) '@embedpdf/plugin-zoom': - specifier: ^2.7.0 - version: 2.7.0(68cdd6270a43970eb3cc490f0b97d81a) + specifier: ^2.8.0 + version: 2.8.0(8fba2ba33b2b9290d7f6d6cffabe8012) '@sentry/solid': - specifier: ^10.40.0 - version: 10.40.0(@solidjs/router@0.15.4(solid-js@1.9.11))(solid-js@1.9.11) + specifier: ^10.42.0 + version: 10.42.0(@solidjs/router@0.15.4(solid-js@1.9.11))(solid-js@1.9.11) '@solid-primitives/scheduled': specifier: ^1.5.3 version: 1.5.3(solid-js@1.9.11) @@ -273,8 +273,8 @@ importers: specifier: ^8.21.3 version: 8.21.3(solid-js@1.9.11) better-auth: - specifier: ^1.4.19 - version: 1.4.19(better-sqlite3@12.6.2)(drizzle-kit@0.31.9)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260305.0)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.6.2)(gel@2.2.0)(kysely@0.28.11))(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(solid-js@1.9.11)(svelte@5.46.1)(vitest@4.0.18)(vue@3.5.29(typescript@5.9.3)) + specifier: ^1.5.4 + version: 1.5.4(df0661f5bde84186cc7a939741e06321) chart.js: specifier: ^4.5.1 version: 4.5.1 @@ -285,8 +285,8 @@ importers: specifier: ^2.1.1 version: 2.1.1 countup.js: - specifier: ^2.9.0 - version: 2.9.0 + specifier: ^2.10.0 + version: 2.10.0 d3: specifier: ^7.9.0 version: 7.9.0 @@ -320,13 +320,13 @@ importers: devDependencies: '@preact/preset-vite': specifier: ^2.10.3 - version: 2.10.3(@babel/core@7.29.0)(preact@10.28.4)(rollup@4.59.0)(vite@7.3.1(@types/node@25.3.1)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)) + version: 2.10.3(@babel/core@7.29.0)(preact@10.28.4)(rollup@4.59.0)(vite@7.3.1(@types/node@25.3.5)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)) '@solidjs/testing-library': specifier: ^0.8.10 version: 0.8.10(@solidjs/router@0.15.4(solid-js@1.9.11))(solid-js@1.9.11) '@tailwindcss/vite': specifier: ^4.2.1 - version: 4.2.1(vite@7.3.1(@types/node@25.3.1)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)) + version: 4.2.1(vite@7.3.1(@types/node@25.3.5)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)) '@tanstack/solid-query-devtools': specifier: ^5.91.3 version: 5.91.3(@tanstack/solid-query@5.90.23(solid-js@1.9.11))(solid-js@1.9.11) @@ -346,11 +346,11 @@ importers: specifier: ^3.8.1 version: 3.8.1 puppeteer: - specifier: ^24.37.5 - version: 24.37.5(typescript@5.9.3) + specifier: ^24.38.0 + version: 24.38.0(typescript@5.9.3) rollup-plugin-visualizer: - specifier: ^6.0.5 - version: 6.0.5(rolldown@1.0.0-beta.51)(rollup@4.59.0) + specifier: ^6.0.11 + version: 6.0.11(rolldown@1.0.0-beta.51)(rollup@4.59.0) source-map-explorer: specifier: ^2.5.3 version: 2.5.3 @@ -365,40 +365,40 @@ importers: version: 5.9.3 vite: specifier: ^7.3.1 - version: 7.3.1(@types/node@25.3.1)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + version: 7.3.1(@types/node@25.3.5)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) vite-plugin-solid: specifier: ^2.11.10 - version: 2.11.10(@testing-library/jest-dom@6.9.1)(solid-js@1.9.11)(vite@7.3.1(@types/node@25.3.1)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)) + version: 2.11.10(@testing-library/jest-dom@6.9.1)(solid-js@1.9.11)(vite@7.3.1(@types/node@25.3.5)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)) vitest: specifier: ^4.0.18 - version: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.3.1)(@vitest/ui@4.0.18)(jiti@2.6.1)(jsdom@27.4.0(@noble/hashes@2.0.1))(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + version: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.3.5)(@vitest/ui@4.0.18)(jiti@2.6.1)(jsdom@27.4.0(@noble/hashes@2.0.1))(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) packages/workers: dependencies: '@better-auth/stripe': - specifier: ^1.4.19 - version: 1.4.19(@better-auth/core@1.4.19(@better-auth/utils@0.3.0)(@better-fetch/fetch@1.1.21)(better-call@1.1.8(zod@4.3.6))(jose@6.1.3)(kysely@0.28.11)(nanostores@1.1.1))(better-auth@1.4.19(better-sqlite3@12.6.2)(drizzle-kit@0.31.9)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260305.0)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.6.2)(gel@2.2.0)(kysely@0.28.11))(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(solid-js@1.9.11)(svelte@5.46.1)(vitest@3.2.0(@types/node@25.3.1)(jiti@2.6.1)(jsdom@27.4.0(@noble/hashes@2.0.1))(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))(vue@3.5.29(typescript@5.9.3)))(better-call@1.1.8(zod@4.3.6))(stripe@20.4.0(@types/node@25.3.1)) + specifier: ^1.5.4 + version: 1.5.4(@better-auth/core@1.5.4(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(@cloudflare/workers-types@4.20260307.1)(better-call@1.3.2(zod@4.3.6))(jose@6.2.0)(kysely@0.28.11)(nanostores@1.1.1))(better-auth@1.5.4(61d6557326f155d0f9393fbb3d05c0cd))(better-call@1.3.2(zod@4.3.6))(stripe@20.4.1(@types/node@25.3.5)) '@cloudflare/workers-types': - specifier: ^4.20260305.0 - version: 4.20260305.0 + specifier: ^4.20260307.1 + version: 4.20260307.1 '@corates/shared': specifier: workspace:* version: link:../shared '@hono/zod-openapi': specifier: ^1.2.2 - version: 1.2.2(hono@4.12.3)(zod@4.3.6) + version: 1.2.2(hono@4.12.5)(zod@4.3.6) '@sentry/cloudflare': - specifier: ^10.40.0 - version: 10.40.0(@cloudflare/workers-types@4.20260305.0) + specifier: ^10.42.0 + version: 10.42.0(@cloudflare/workers-types@4.20260307.1) better-auth: - specifier: ^1.4.19 - version: 1.4.19(better-sqlite3@12.6.2)(drizzle-kit@0.31.9)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260305.0)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.6.2)(gel@2.2.0)(kysely@0.28.11))(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(solid-js@1.9.11)(svelte@5.46.1)(vitest@3.2.0(@types/node@25.3.1)(jiti@2.6.1)(jsdom@27.4.0(@noble/hashes@2.0.1))(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))(vue@3.5.29(typescript@5.9.3)) + specifier: ^1.5.4 + version: 1.5.4(61d6557326f155d0f9393fbb3d05c0cd) drizzle-orm: specifier: ^0.45.1 - version: 0.45.1(@cloudflare/workers-types@4.20260305.0)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.6.2)(gel@2.2.0)(kysely@0.28.11) + version: 0.45.1(@cloudflare/workers-types@4.20260307.1)(@electric-sql/pglite@0.3.15)(@opentelemetry/api@1.9.0)(@prisma/client@7.4.2(prisma@7.4.2(@types/react@19.2.14)(better-sqlite3@12.6.2)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(typescript@5.9.3))(@types/better-sqlite3@7.6.13)(better-sqlite3@12.6.2)(gel@2.2.0)(kysely@0.28.11)(mysql2@3.15.3)(postgres@3.4.7)(prisma@7.4.2(@types/react@19.2.14)(better-sqlite3@12.6.2)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(typescript@5.9.3)) hono: - specifier: ^4.12.3 - version: 4.12.3 + specifier: ^4.12.5 + version: 4.12.5 lib0: specifier: ^0.2.117 version: 0.2.117 @@ -406,8 +406,8 @@ importers: specifier: ^4.0.7 version: 4.0.7 stripe: - specifier: ^20.4.0 - version: 20.4.0(@types/node@25.3.1) + specifier: ^20.4.1 + version: 20.4.1(@types/node@25.3.5) y-protocols: specifier: ^1.0.7 version: 1.0.7(yjs@13.6.29) @@ -420,7 +420,7 @@ importers: devDependencies: '@cloudflare/vitest-pool-workers': specifier: ^0.11.1 - version: 0.11.1(@cloudflare/workers-types@4.20260305.0)(@vitest/runner@4.0.18)(@vitest/snapshot@4.0.18)(vitest@3.2.0(@types/node@25.3.1)(jiti@2.6.1)(jsdom@27.4.0(@noble/hashes@2.0.1))(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)) + version: 0.11.1(@cloudflare/workers-types@4.20260307.1)(@vitest/runner@4.0.18)(@vitest/snapshot@4.0.18)(vitest@3.2.0(@types/node@25.3.5)(jiti@2.6.1)(jsdom@27.4.0(@noble/hashes@2.0.1))(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)) better-sqlite3: specifier: ^12.6.2 version: 12.6.2 @@ -432,16 +432,16 @@ importers: version: 0.31.9 localflare: specifier: ^0.3.1 - version: 0.3.1 + version: 0.3.1(@types/react@19.2.14) typescript: specifier: ^5.9.3 version: 5.9.3 vitest: specifier: 3.2.0 - version: 3.2.0(@types/node@25.3.1)(jiti@2.6.1)(jsdom@27.4.0(@noble/hashes@2.0.1))(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + version: 3.2.0(@types/node@25.3.5)(jiti@2.6.1)(jsdom@27.4.0(@noble/hashes@2.0.1))(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) wrangler: - specifier: ^4.69.0 - version: 4.69.0(@cloudflare/workers-types@4.20260305.0) + specifier: ^4.71.0 + version: 4.71.0(@cloudflare/workers-types@4.20260307.1) packages: @@ -534,8 +534,8 @@ packages: '@antfu/install-pkg@1.1.0': resolution: {integrity: sha512-MGQsmw10ZyI+EJo45CdSER4zEb+p31LpDAFp2Z3gkSd1yqVZGi0Ebx++YTEMonJy4oChEMLsxZ64j8FH6sSqtQ==} - '@ark-ui/solid@5.32.0': - resolution: {integrity: sha512-QZ1CnswqYuOuVZ1nqwS54NFETe/tMYLEhXUOf91tX60x7xoj0ruNxdH227UWqPtj79xFc2YD84U/blTpHCQPeQ==} + '@ark-ui/solid@5.34.1': + resolution: {integrity: sha512-DMTAVtmibwcKC9B3iMhQfXfTvCsQYs43qTX2VZPArVsjQGNZlDXK3+oPmaw1FPoVBD5csi1bjGNkwruhbh1gAA==} peerDependencies: solid-js: '>=1.6.0' @@ -548,8 +548,8 @@ packages: '@asamuzakjp/nwsapi@2.3.9': resolution: {integrity: sha512-n8GuYSrI9bF7FFZ/SjhwevlHc8xaVlb/7HmHelnc/PZXBD2ZR49NnN9sMMuDdEGPeeRQ5d0hqlSlEpgCX3Wl0Q==} - '@asteasolutions/zod-to-openapi@8.4.1': - resolution: {integrity: sha512-WmJUsFINbnWxGvHSd16aOjgKf+5GsfdxruO2YDLcgplsidakCauik1lhlk83YDH06265Yd1XtUyF24o09uygpw==} + '@asteasolutions/zod-to-openapi@8.4.3': + resolution: {integrity: sha512-lwfMTN7kDbFDwMniYZUebiGGHxVGBw9ZSI4IBYjm6Ey22Kd5z/fsQb2k+Okr8WMbCCC553vi/ZM9utl5/XcvuQ==} peerDependencies: zod: ^4.0.0 @@ -664,31 +664,70 @@ packages: resolution: {integrity: sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==} engines: {node: '>=6.9.0'} - '@better-auth/core@1.4.19': - resolution: {integrity: sha512-uADLHG1jc5BnEJi7f6ijUN5DmPPRSj++7m/G19z3UqA3MVCo4Y4t1MMa4IIxLCqGDFv22drdfxescgW+HnIowA==} + '@better-auth/core@1.5.4': + resolution: {integrity: sha512-k5AdwPRQETZn0vdB60EB9CDxxfllpJXKqVxTjyXIUSRz7delNGlU0cR/iRP3VfVJwvYR1NbekphBDNo+KGoEzQ==} peerDependencies: - '@better-auth/utils': 0.3.0 + '@better-auth/utils': 0.3.1 '@better-fetch/fetch': 1.1.21 - better-call: 1.1.8 + '@cloudflare/workers-types': '>=4' + better-call: 1.3.2 jose: ^6.1.0 kysely: ^0.28.5 nanostores: ^1.0.1 + peerDependenciesMeta: + '@cloudflare/workers-types': + optional: true + + '@better-auth/drizzle-adapter@1.5.4': + resolution: {integrity: sha512-4M4nMAWrDd3TmpV6dONkJjybBVKRZghe5Oj0NNyDEoXubxastQdO7Sb5B54I1rTx5yoMgsqaB+kbJnu/9UgjQg==} + peerDependencies: + '@better-auth/core': 1.5.4 + '@better-auth/utils': ^0.3.0 + drizzle-orm: '>=0.41.0' + + '@better-auth/kysely-adapter@1.5.4': + resolution: {integrity: sha512-DPww7rIfz6Ed7dZlJSW9xMQ42VKaJLB5Cs+pPqd+UHKRyighKjf3VgvMIcAdFPc4olQ0qRHo3+ZJhFlBCxRhxA==} + peerDependencies: + '@better-auth/core': 1.5.4 + '@better-auth/utils': ^0.3.0 + kysely: ^0.27.0 || ^0.28.0 + + '@better-auth/memory-adapter@1.5.4': + resolution: {integrity: sha512-iiWYut9rbQqiAsgRBtj6+nxanwjapxRgpIJbiS2o81h7b9iclE0AiDA0Foes590gdFQvskNauZcCpuF8ytxthg==} + peerDependencies: + '@better-auth/core': 1.5.4 + '@better-auth/utils': ^0.3.0 + + '@better-auth/mongo-adapter@1.5.4': + resolution: {integrity: sha512-ArzJN5Obk6i6+vLK1HpPzLIcsjxZYXPPUvxVU8eyU5HyoUT2MlswWfPQ8UJAKPn0iq/T4PVp/wZcQMhWk1tuNA==} + peerDependencies: + '@better-auth/core': 1.5.4 + '@better-auth/utils': ^0.3.0 + mongodb: ^6.0.0 || ^7.0.0 + + '@better-auth/prisma-adapter@1.5.4': + resolution: {integrity: sha512-ZQTbcBopw/ezjjbNFsfR3CRp0QciC4tJCarAnB5G9fZtUYbDjfY0vZOxIRmU4kI3x755CXQpGqTrkwmXaMRa3w==} + peerDependencies: + '@better-auth/core': 1.5.4 + '@better-auth/utils': ^0.3.0 + '@prisma/client': ^5.0.0 || ^6.0.0 || ^7.0.0 + prisma: ^5.0.0 || ^6.0.0 || ^7.0.0 - '@better-auth/stripe@1.4.19': - resolution: {integrity: sha512-LkU5s6st3jj61Pyl2bGhkNSkJZZAtxD+RuzXep9dGwlgDTxs36nZ/LMWgjVpZvsI2iSZmsPolRaHaLe0Yk2Ayw==} + '@better-auth/stripe@1.5.4': + resolution: {integrity: sha512-CCCY81eBwf7IRw7gbMe5H0JfSVwRTujeBvRcXTaOPIFXAHogU/Z4Z/jOhUXuYkl7tbLoYBpTQQ1Qqw00a3ZUZA==} peerDependencies: - '@better-auth/core': 1.4.19 - better-auth: 1.4.19 - better-call: 1.1.8 + '@better-auth/core': 1.5.4 + better-auth: 1.5.4 + better-call: 1.3.2 stripe: ^18 || ^19 || ^20 - '@better-auth/telemetry@1.4.19': - resolution: {integrity: sha512-ApGNS7olCTtDpKF8Ow3Z+jvFAirOj7c4RyFUpu8axklh3mH57ndpfUAUjhgA8UVoaaH/mnm/Tl884BlqiewLyw==} + '@better-auth/telemetry@1.5.4': + resolution: {integrity: sha512-mGXTY7Ecxo7uvlMr6TFCBUvlH0NUMOeE9LKgPhG4HyhBN6VfCEg/DD9PG0Z2IatmMWQbckkt7ox5A0eBpG9m5w==} peerDependencies: - '@better-auth/core': 1.4.19 + '@better-auth/core': 1.5.4 - '@better-auth/utils@0.3.0': - resolution: {integrity: sha512-W+Adw6ZA6mgvnSnhOki270rwJ42t4XzSK6YWGF//BbVXL6SwCLWfyzBc1lN2m/4RM28KubdBKQ4X5VMoLRNPQw==} + '@better-auth/utils@0.3.1': + resolution: {integrity: sha512-+CGp4UmZSUrHHnpHhLPYu6cV+wSUSvVbZbNykxhUDocpVNTo9uFFxw/NqJlh1iC4wQ9HKKWGCKuZ5wUgS0v6Kg==} '@better-fetch/fetch@1.1.21': resolution: {integrity: sha512-/ImESw0sskqlVR94jB+5+Pxjf+xBwDZF/N5+y2/q4EqD7IARUTSpPfIo8uf39SYpCxyOCtbyYpUrZ3F/k0zT4A==} @@ -699,20 +738,32 @@ packages: '@braintree/sanitize-url@7.1.2': resolution: {integrity: sha512-jigsZK+sMF/cuiB7sERuo9V7N9jx+dhmHHnQyDSVdpZwVutaBu7WvNYqMDLSgFgfB30n452TP3vjDAvFC973mA==} - '@chevrotain/cst-dts-gen@11.1.1': - resolution: {integrity: sha512-fRHyv6/f542qQqiRGalrfJl/evD39mAvbJLCekPazhiextEatq1Jx1K/i9gSd5NNO0ds03ek0Cbo/4uVKmOBcw==} + '@chevrotain/cst-dts-gen@10.5.0': + resolution: {integrity: sha512-lhmC/FyqQ2o7pGK4Om+hzuDrm9rhFYIJ/AXoQBeongmn870Xeb0L6oGEiuR8nohFNL5sMaQEJWCxr1oIVIVXrw==} + + '@chevrotain/cst-dts-gen@11.1.2': + resolution: {integrity: sha512-XTsjvDVB5nDZBQB8o0o/0ozNelQtn2KrUVteIHSlPd2VAV2utEb6JzyCJaJ8tGxACR4RiBNWy5uYUHX2eji88Q==} + + '@chevrotain/gast@10.5.0': + resolution: {integrity: sha512-pXdMJ9XeDAbgOWKuD1Fldz4ieCs6+nLNmyVhe2gZVqoO7v8HXuHYs5OV2EzUtbuai37TlOAQHrTDvxMnvMJz3A==} - '@chevrotain/gast@11.1.1': - resolution: {integrity: sha512-Ko/5vPEYy1vn5CbCjjvnSO4U7GgxyGm+dfUZZJIWTlQFkXkyym0jFYrWEU10hyCjrA7rQtiHtBr0EaZqvHFZvg==} + '@chevrotain/gast@11.1.2': + resolution: {integrity: sha512-Z9zfXR5jNZb1Hlsd/p+4XWeUFugrHirq36bKzPWDSIacV+GPSVXdk+ahVWZTwjhNwofAWg/sZg58fyucKSQx5g==} - '@chevrotain/regexp-to-ast@11.1.1': - resolution: {integrity: sha512-ctRw1OKSXkOrR8VTvOxrQ5USEc4sNrfwXHa1NuTcR7wre4YbjPcKw+82C2uylg/TEwFRgwLmbhlln4qkmDyteg==} + '@chevrotain/regexp-to-ast@11.1.2': + resolution: {integrity: sha512-nMU3Uj8naWer7xpZTYJdxbAs6RIv/dxYzkYU8GSwgUtcAAlzjcPfX1w+RKRcYG8POlzMeayOQ/znfwxEGo5ulw==} - '@chevrotain/types@11.1.1': - resolution: {integrity: sha512-wb2ToxG8LkgPYnKe9FH8oGn3TMCBdnwiuNC5l5y+CtlaVRbCytU0kbVsk6CGrqTL4ZN4ksJa0TXOYbxpbthtqw==} + '@chevrotain/types@10.5.0': + resolution: {integrity: sha512-f1MAia0x/pAVPWH/T73BJVyO2XU5tI4/iE7cnxb7tqdNTNhQI3Uq3XkqcoteTmD4t1aM0LbHCJOhgIDn07kl2A==} - '@chevrotain/utils@11.1.1': - resolution: {integrity: sha512-71eTYMzYXYSFPrbg/ZwftSaSDld7UYlS8OQa3lNnn9jzNtpFbaReRRyghzqS7rI3CDaorqpPJJcXGHK+FE1TVQ==} + '@chevrotain/types@11.1.2': + resolution: {integrity: sha512-U+HFai5+zmJCkK86QsaJtoITlboZHBqrVketcO2ROv865xfCMSFpELQoz1GkX5GzME8pTa+3kbKrZHQtI0gdbw==} + + '@chevrotain/utils@10.5.0': + resolution: {integrity: sha512-hBzuU5+JjB2cqNZyszkDHZgOSrUUT8V3dhgRl8Q9Gp6dAj/H5+KILGjbhDpc3Iy9qmqlm/akuOI2ut9VUtzJxQ==} + + '@chevrotain/utils@11.1.2': + resolution: {integrity: sha512-4mudFAQ6H+MqBTfqLmU7G1ZwRzCLfJEooL/fsF6rCX5eePMbGhoy5n4g+G4vlh2muDcsCTJtL+uKbOzWxs5LHA==} '@cloudflare/kv-asset-handler@0.4.1': resolution: {integrity: sha512-Nu8ahitGFFJztxUml9oD/DLb7Z28C8cd8F46IVQ7y5Btz575pvMY8AqZsXkX7Gds29eCKdMgIHjIvzskHgPSFg==} @@ -722,11 +773,11 @@ packages: resolution: {integrity: sha512-SIOD2DxrRRwQ+jgzlXCqoEFiKOFqaPjhnNTGKXSRLvp1HiOvapLaFG2kEr9dYQTYe8rKrd9uvDUzmAITeNyaHQ==} engines: {node: '>=18.0.0'} - '@cloudflare/unenv-preset@2.14.0': - resolution: {integrity: sha512-XKAkWhi1nBdNsSEoNG9nkcbyvfUrSjSf+VYVPfOto3gLTZVc3F4g6RASCMh6IixBKCG2yDgZKQIHGKtjcnLnKg==} + '@cloudflare/unenv-preset@2.15.0': + resolution: {integrity: sha512-EGYmJaGZKWl+X8tXxcnx4v2bOZSjQeNI5dWFeXivgX9+YCT69AkzHHwlNbVpqtEUTbew8eQurpyOpeN8fg00nw==} peerDependencies: unenv: 2.0.0-rc.24 - workerd: ^1.20260218.0 + workerd: 1.20260301.1 || ~1.20260302.1 || ~1.20260303.1 || ~1.20260304.1 || >1.20260305.0 <2.0.0-0 peerDependenciesMeta: workerd: optional: true @@ -753,8 +804,8 @@ packages: cpu: [x64] os: [darwin] - '@cloudflare/workerd-darwin-64@1.20260305.0': - resolution: {integrity: sha512-chhKOpymo0Eh9J3nymrauMqKGboCc4uz/j0gA1G4gioMnKsN2ZDKJ+qjRZDnCoVGy8u2C4pxlmyIfsXCAfIzhQ==} + '@cloudflare/workerd-darwin-64@1.20260301.1': + resolution: {integrity: sha512-+kJvwociLrvy1JV9BAvoSVsMEIYD982CpFmo/yMEvBwxDIjltYsLTE8DLi0mCkGsQ8Ygidv2fD9wavzXeiY7OQ==} engines: {node: '>=16'} cpu: [x64] os: [darwin] @@ -765,8 +816,8 @@ packages: cpu: [arm64] os: [darwin] - '@cloudflare/workerd-darwin-arm64@1.20260305.0': - resolution: {integrity: sha512-K9aG2OQk5bBfOP+fyGPqLcqZ9OR3ra6uwnxJ8f2mveq2A2LsCI7ZeGxQiAj75Ti80ytH/gJffZIx4Np2JtU3aQ==} + '@cloudflare/workerd-darwin-arm64@1.20260301.1': + resolution: {integrity: sha512-PPIetY3e67YBr9O4UhILK8nbm5TqUDl14qx4rwFNrRSBOvlzuczzbd4BqgpAtbGVFxKp1PWpjAnBvGU/OI/tLQ==} engines: {node: '>=16'} cpu: [arm64] os: [darwin] @@ -777,8 +828,8 @@ packages: cpu: [x64] os: [linux] - '@cloudflare/workerd-linux-64@1.20260305.0': - resolution: {integrity: sha512-tt7XUoIw/cYFeGbkPkcZ6XX1aZm26Aju/4ih+DXxOosbBeGshFSrNJDBfAKKOvkjsAZymJ+WWVDBU+hmNaGfwA==} + '@cloudflare/workerd-linux-64@1.20260301.1': + resolution: {integrity: sha512-Gu5vaVTZuYl3cHa+u5CDzSVDBvSkfNyuAHi6Mdfut7TTUdcb3V5CIcR/mXRSyMXzEy9YxEWIfdKMxOMBjupvYQ==} engines: {node: '>=16'} cpu: [x64] os: [linux] @@ -789,8 +840,8 @@ packages: cpu: [arm64] os: [linux] - '@cloudflare/workerd-linux-arm64@1.20260305.0': - resolution: {integrity: sha512-72QTkY5EzylmvCZ8ZTrnJ9DctmQsfSof1OKyOWqu/pv/B2yACfuPMikq8RpPxvVu7hhS0ztGP6ZvXz72Htq4Zg==} + '@cloudflare/workerd-linux-arm64@1.20260301.1': + resolution: {integrity: sha512-igL1pkyCXW6GiGpjdOAvqMi87UW0LMc/+yIQe/CSzuZJm5GzXoAMrwVTkCFnikk6JVGELrM5x0tGYlxa0sk5Iw==} engines: {node: '>=16'} cpu: [arm64] os: [linux] @@ -801,14 +852,14 @@ packages: cpu: [x64] os: [win32] - '@cloudflare/workerd-windows-64@1.20260305.0': - resolution: {integrity: sha512-BA0uaQPOaI2F6mJtBDqplGnQQhpXCzwEMI33p/TnDxtSk9u8CGIfBFuI6uqo8mJ6ijIaPjeBLGOn2CiRMET4qg==} + '@cloudflare/workerd-windows-64@1.20260301.1': + resolution: {integrity: sha512-Q0wMJ4kcujXILwQKQFc1jaYamVsNvjuECzvRrTI8OxGFMx2yq9aOsswViE4X1gaS2YQQ5u0JGwuGi5WdT1Lt7A==} engines: {node: '>=16'} cpu: [x64] os: [win32] - '@cloudflare/workers-types@4.20260305.0': - resolution: {integrity: sha512-sCgPFnQ03SVpC2OVW8wysONLZW/A8hlp9Mq2ckG/h1oId4kr9NawA6vUiOmOjCWRn2hIohejBYVQ+Vu20rCdKA==} + '@cloudflare/workers-types@4.20260307.1': + resolution: {integrity: sha512-0PvWLVVD6Q64V/XhollYtc8H35Vxm2rZi8bkZbEr3lK+mNgd2FBBVhlZ6A3saAUq3giRF4US/UfU/3a8i1PEcg==} '@cspotcode/source-map-support@0.8.1': resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} @@ -838,8 +889,8 @@ packages: peerDependencies: '@csstools/css-tokenizer': ^4.0.0 - '@csstools/css-syntax-patches-for-csstree@1.0.28': - resolution: {integrity: sha512-1NRf1CUBjnr3K7hu8BLxjQrKCxEe8FP/xmPTenAxCRZWVLbmGotkFvG9mfNpjA6k7Bw1bw4BilZq9cu19RA5pg==} + '@csstools/css-syntax-patches-for-csstree@1.1.0': + resolution: {integrity: sha512-H4tuz2nhWgNKLt1inYpoVCfbJbMwX/lQKp3g69rrrIMIYlFD9+zTykOKhNR8uGrAmbS/kT9n6hTFkmDkxLgeTA==} '@csstools/css-tokenizer@4.0.0': resolution: {integrity: sha512-QxULHAm7cNu72w97JUNCBFODFaXpbDg+dP8b/oWFAZ2MTRppA3U00Y2L1HqaS4J6yBqxwa/Y3nMBaxVKbB/NsA==} @@ -877,8 +928,22 @@ packages: '@drizzle-team/brocli@0.10.2': resolution: {integrity: sha512-z33Il7l5dKjUgGULTqBsQBQwckHh5AbIuxhdsIxDDiZAzBOrZO6q9ogcWC65kU382AfynTfgNumVcNIjuIua6w==} - '@embedpdf/core@2.7.0': - resolution: {integrity: sha512-dJ9pCWXVJxh6uSJP4sKuJP4v67+6Vlmw4WqJcv+CKJSUPdX9LhOSTIgTjwKLZ5zXo0c3DihNvrUupovb/DrhgQ==} + '@electric-sql/pglite-socket@0.0.20': + resolution: {integrity: sha512-J5nLGsicnD9wJHnno9r+DGxfcZWh+YJMCe0q/aCgtG6XOm9Z7fKeite8IZSNXgZeGltSigM9U/vAWZQWdgcSFg==} + hasBin: true + peerDependencies: + '@electric-sql/pglite': 0.3.15 + + '@electric-sql/pglite-tools@0.2.20': + resolution: {integrity: sha512-BK50ZnYa3IG7ztXhtgYf0Q7zijV32Iw1cYS8C+ThdQlwx12V5VZ9KRJ42y82Hyb4PkTxZQklVQA9JHyUlex33A==} + peerDependencies: + '@electric-sql/pglite': 0.3.15 + + '@electric-sql/pglite@0.3.15': + resolution: {integrity: sha512-Cj++n1Mekf9ETfdc16TlDi+cDDQF0W7EcbyRHYOAeZdsAe8M/FJg18itDTSwyHfar2WIezawM9o0EKaRGVKygQ==} + + '@embedpdf/core@2.8.0': + resolution: {integrity: sha512-ui0HR4fl7ndiGPw40kMBxXCO9gZHctV1u3Q+/XTd34ONYJ+Pa2LoWNVW2IuPDK7PgKzABPT2axntowlVLPP10g==} peerDependencies: preact: ^10.26.4 react: '>=16.8.0' @@ -886,8 +951,8 @@ packages: svelte: '>=5 <6' vue: '>=3.2.0' - '@embedpdf/engines@2.7.0': - resolution: {integrity: sha512-9BW/0f1EhMtklOXzpq+TtAELpXrvWcgCioFX9tSvPXBwWw/xva9c3UFx8NKehfrAkmcLGNz2c2Kqe8hDlKp9Rw==} + '@embedpdf/engines@2.8.0': + resolution: {integrity: sha512-s749nppKxOcgvFraySKrwtiCt2VMXFe8TFuZUV5R7z8TtMagt6o5NOk6VsdvIpggUYxIsiKhLkFvAqvkNgcjng==} peerDependencies: preact: ^10.26.4 react: '>=16.8.0' @@ -916,276 +981,276 @@ packages: '@embedpdf/fonts-tc@1.0.0': resolution: {integrity: sha512-rGZJbVD6DYS5BbXdpEMnWkpVF0Knar+bsiyb2o3+YRx7O8eyFubEBQUSUInirQk69HA6fc3GhYCg7TyC/oD76Q==} - '@embedpdf/models@2.7.0': - resolution: {integrity: sha512-SRtDqYUn6Qw677ECIyipg0qqZR0+iLUU1mGI/X70ad4/qhw+TAOF5/aWddoFdPAw5XviEYVw5zR0oTz+MLBUbw==} + '@embedpdf/models@2.8.0': + resolution: {integrity: sha512-kk3Fm8exMmEX9Ce7VQePybmo04NQGdpsO3FsX1YOQqHpLVBk7tiTeOdetjBqI+YhQ2zWLa2naNKSOSGGzYLyxA==} - '@embedpdf/pdfium@2.7.0': - resolution: {integrity: sha512-PW6JnbBERvRKVrBzeCH/iGorQ8OTTRwr8rciyv2Kstqf3IdIFHjjNWvl6exK1/3K5wbbxYnHSNpRotl0OcsFJA==} + '@embedpdf/pdfium@2.8.0': + resolution: {integrity: sha512-RlNLRNboF1Y6fNDy4sJ/a/FEYxATZyeM+n25r3KZJjG+RaM6bxBWXvWlFlGBU5Vx2eqQ5AzDAmIE9cn1agFmqA==} - '@embedpdf/plugin-annotation@2.7.0': - resolution: {integrity: sha512-bkn9+91XfcFoKgwZ0kiJLbnvWNyrorhcbX5grsvUw2gJ8mL0RtwHSnCjZVT3WOPleQVwnNkBZUHefJhNT+LEKw==} + '@embedpdf/plugin-annotation@2.8.0': + resolution: {integrity: sha512-h31dT0pvQjFSwsBLytL4BBLf3WDdz9kmAYNKR10filikge7MpgTzgVYFD0C6AOyy2qK1Y/vqworCyh+emVD5aA==} peerDependencies: - '@embedpdf/core': 2.7.0 - '@embedpdf/plugin-history': 2.7.0 - '@embedpdf/plugin-interaction-manager': 2.7.0 - '@embedpdf/plugin-selection': 2.7.0 + '@embedpdf/core': 2.8.0 + '@embedpdf/plugin-history': 2.8.0 + '@embedpdf/plugin-interaction-manager': 2.8.0 + '@embedpdf/plugin-selection': 2.8.0 preact: ^10.26.4 react: '>=16.8.0' react-dom: '>=16.8.0' svelte: '>=5 <6' vue: '>=3.2.0' - '@embedpdf/plugin-capture@2.7.0': - resolution: {integrity: sha512-QTxry0aKt/DEWkqSde2gay9EqVJ2XPY9tYMkbI0bkRGVNcM/P+Z7id2S0z883Sx/D440QR5htOIIsnBXKKolTw==} + '@embedpdf/plugin-capture@2.8.0': + resolution: {integrity: sha512-4PckZ05bZ841Ogcb2hAtmV4LAEP5+iwK9YGPKgdltoH4KaVETCnxKqqtYlsRQudI7LEdH/aegrUEoa5r+jRORQ==} peerDependencies: - '@embedpdf/core': 2.7.0 - '@embedpdf/plugin-interaction-manager': 2.7.0 - '@embedpdf/plugin-render': 2.7.0 + '@embedpdf/core': 2.8.0 + '@embedpdf/plugin-interaction-manager': 2.8.0 + '@embedpdf/plugin-render': 2.8.0 preact: ^10.26.4 react: '>=16.8.0' react-dom: '>=16.8.0' svelte: '>=5 <6' vue: '>=3.2.0' - '@embedpdf/plugin-commands@2.7.0': - resolution: {integrity: sha512-Vx+yx0wWLa74KeSRsfymEclXyt8XmcBuSOVDnnOl9UoUGaksggOngB3Nt8kAePZE0Na6NggYRZ2jYS7U0XoLqA==} + '@embedpdf/plugin-commands@2.8.0': + resolution: {integrity: sha512-qchRR5+9KfnJ1CKue/L8NVj0y9p6CM6aHlIFnY9Lc7/6QELGXi8vPREzLXOJxAWQ3jVs2iqPHZL6NtSGwvWYbQ==} peerDependencies: - '@embedpdf/core': 2.7.0 + '@embedpdf/core': 2.8.0 preact: ^10.26.4 react: '>=16.8.0' react-dom: '>=16.8.0' svelte: '>=5 <6' vue: '>=3.2.0' - '@embedpdf/plugin-document-manager@2.7.0': - resolution: {integrity: sha512-eKM0MEUCPZmNkOkz5n6QWBcKN7m1c3RBZlfXB7faHBaScPyO3f+xgfipAht86UvfYwxT9BWk9ozbAtm2UPBHcQ==} + '@embedpdf/plugin-document-manager@2.8.0': + resolution: {integrity: sha512-SS+IKJ2+rk4dHM3PvQQrvnfNdb5oOF1INR5r2w0MKo22C9WPD8Ncg1Jak/mCrGbSrJemW3pkIrKZhoREQtSrbA==} peerDependencies: - '@embedpdf/core': 2.7.0 + '@embedpdf/core': 2.8.0 preact: ^10.26.4 react: '>=16.8.0' react-dom: '>=16.8.0' svelte: '>=5 <6' vue: '>=3.2.0' - '@embedpdf/plugin-export@2.7.0': - resolution: {integrity: sha512-wlP/ZdWPLCnJpsQWNCyZAlicvNiapbo7Dc95HMWHg2YgmkCjDe26z4C1QoubUanNSerGWJCK0qKXxJ/PVkJSnw==} + '@embedpdf/plugin-export@2.8.0': + resolution: {integrity: sha512-AvqfyhB58HLoZMKyXLLT+1ebE7wrMEnIAjr+OqEuaNnekxvb8atD8EBByzgtXLiNLStlxFn5g1CKyQThpw4Pcw==} peerDependencies: - '@embedpdf/core': 2.7.0 + '@embedpdf/core': 2.8.0 preact: ^10.26.4 react: '>=16.8.0' react-dom: '>=16.8.0' svelte: '>=5 <6' vue: '>=3.2.0' - '@embedpdf/plugin-fullscreen@2.7.0': - resolution: {integrity: sha512-KtsRybA6GAuxkggyW22f/PfA6jLWYeuSLLe/SPS8oYDElEszYZoprbpE3Fz30Wuu111VD0h4sS27kOXrAQjI1Q==} + '@embedpdf/plugin-fullscreen@2.8.0': + resolution: {integrity: sha512-xJqbZpWTgnLZwlLsYDY43tNQ5BJM51Xlr+fBK9OsSJJql+yGd9EquIdBC99KbkmVP78BG3OCOv0JkZ3C0ITQ4A==} peerDependencies: - '@embedpdf/core': 2.7.0 + '@embedpdf/core': 2.8.0 preact: ^10.26.4 react: '>=16.8.0' react-dom: '>=16.8.0' svelte: '>=5 <6' vue: '>=3.2.0' - '@embedpdf/plugin-history@2.7.0': - resolution: {integrity: sha512-k2c5M2Nwey+j6EtZyf5Sw+cuyNT4MTWdqPQGR9NbmZUiNnkSrg/TmPWZCyaXZKGRjLmoJocc0qRdyaZnaaTpqw==} + '@embedpdf/plugin-history@2.8.0': + resolution: {integrity: sha512-S6TO7DqMqVtBYsztgvPvq8BOJTMl8rWdGjVMuoxD93HZdSgogoculwCATrJGor/BC+X6Vmtaqg6NJWSdIAeBEQ==} peerDependencies: - '@embedpdf/core': 2.7.0 + '@embedpdf/core': 2.8.0 preact: ^10.26.4 react: '>=16.8.0' react-dom: '>=16.8.0' svelte: '>=5 <6' vue: '>=3.2.0' - '@embedpdf/plugin-i18n@2.7.0': - resolution: {integrity: sha512-LExw6+JSR7q3Cp7WxaVBhjmiYXmf7F9bes2Nm1Uje5WqmqAFVabY7Bl1+gA9vfX/vMeir1LL4NGOjo61DMMaYQ==} + '@embedpdf/plugin-i18n@2.8.0': + resolution: {integrity: sha512-DsqkkzsWYUfi0oVWT12Z5VcVuwIzXVNdcJ2OPHdPGS/a6M2bH63MV2YGSaVqm1jkV9B6CyND1zqgaaG5SUPHKw==} peerDependencies: - '@embedpdf/core': 2.7.0 + '@embedpdf/core': 2.8.0 preact: ^10.26.4 react: '>=16.8.0' react-dom: '>=16.8.0' svelte: '>=5 <6' vue: '>=3.2.0' - '@embedpdf/plugin-interaction-manager@2.7.0': - resolution: {integrity: sha512-IfJiugr2k9VD8/gryMb22wC5yk4EQwSS3/Co0EdOhzkmkGSgUHA/KcG83WBu8wPEtj5Gwy473xe41fYKsGMlsA==} + '@embedpdf/plugin-interaction-manager@2.8.0': + resolution: {integrity: sha512-xdRTAp1YiXWm+3WVqIN8dkRT3I/dHTumLJy5Kvt7lc1W2XM3M5bfCk5eTTcjY1DPv2buyt44i/4XNWoXAgBXDg==} peerDependencies: - '@embedpdf/core': 2.7.0 + '@embedpdf/core': 2.8.0 preact: ^10.26.4 react: '>=16.8.0' react-dom: '>=16.8.0' svelte: '>=5 <6' vue: '>=3.2.0' - '@embedpdf/plugin-pan@2.7.0': - resolution: {integrity: sha512-/jUyM4K42gd7eoVsKFDSfN4t8CHIf6ZX7kU4BHBBFvOcNB7bToOvibPiznC4oPrHmOuzcs4e+VOfu+yHKn6DrA==} + '@embedpdf/plugin-pan@2.8.0': + resolution: {integrity: sha512-EFqTEHk9E7AMRwguRO24jRl0J/5+pG07wlAm5U2rB0LDk30oAqVklFuDygaALdi8ZRBdkWOfD3Wl3gurQvfwAA==} peerDependencies: - '@embedpdf/core': 2.7.0 - '@embedpdf/plugin-interaction-manager': 2.7.0 - '@embedpdf/plugin-viewport': 2.7.0 + '@embedpdf/core': 2.8.0 + '@embedpdf/plugin-interaction-manager': 2.8.0 + '@embedpdf/plugin-viewport': 2.8.0 preact: ^10.26.4 react: '>=16.8.0' react-dom: '>=16.8.0' svelte: '>=5 <6' vue: '>=3.2.0' - '@embedpdf/plugin-print@2.7.0': - resolution: {integrity: sha512-sQqRSCN+r59EjKibQ3yMt1lKyHMxO1UqhZ6iI+w5hUBm9yTIHvkQRTVbawbkCfty8QNldjMQEwN3iYkf8LNHsg==} + '@embedpdf/plugin-print@2.8.0': + resolution: {integrity: sha512-PUdw2/1GwbewYrxVgsb+3lkYyYYcLU5qpazrBZjjx0v+SEpb2SMQOOPNUILeJGKbYUlxSz3qv/loFwqzALkUQA==} peerDependencies: - '@embedpdf/core': 2.7.0 + '@embedpdf/core': 2.8.0 preact: ^10.26.4 react: '>=18.0.0' react-dom: '>=18.0.0' svelte: '>=5 <6' vue: '>=3.2.0' - '@embedpdf/plugin-redaction@2.7.0': - resolution: {integrity: sha512-N6LD9k35ZCkpHPDW5I6pW6g/YTDXGuNp/kWTHU4bcRGfTwinu6i0PaFJQKus1t1pkVprhmjJgCXbkM2xmIKXAg==} + '@embedpdf/plugin-redaction@2.8.0': + resolution: {integrity: sha512-pIDFNd9rX7cwrhY6rFCBa5MTnGdLZHX7magToqna/Ffs1KEr0CfNF8jIXG0/E6KB6SsppbHwC7AkwRVWz8NoHg==} peerDependencies: - '@embedpdf/core': 2.7.0 - '@embedpdf/plugin-annotation': 2.7.0 - '@embedpdf/plugin-history': 2.7.0 - '@embedpdf/plugin-interaction-manager': 2.7.0 - '@embedpdf/plugin-selection': 2.7.0 + '@embedpdf/core': 2.8.0 + '@embedpdf/plugin-annotation': 2.8.0 + '@embedpdf/plugin-history': 2.8.0 + '@embedpdf/plugin-interaction-manager': 2.8.0 + '@embedpdf/plugin-selection': 2.8.0 preact: ^10.26.4 react: '>=16.8.0' react-dom: '>=16.8.0' svelte: '>=5 <6' vue: '>=3.2.0' - '@embedpdf/plugin-render@2.7.0': - resolution: {integrity: sha512-qJcBxl2Kgqbw/Yb4qiX3qNsBKmzI8ijAKix3PoYL+nlhX6iFbcCkUbJgF0rPCBbhIy59Bpp7eJL+RyY5DhQvUg==} + '@embedpdf/plugin-render@2.8.0': + resolution: {integrity: sha512-jVGSuyg366LmFzbDpqszLbu3G6VOfv1u46D1C0ph6pL3jisTlRswRosaXS4eVE/fAYTryBrI0olCpVYYct4bQw==} peerDependencies: - '@embedpdf/core': 2.7.0 + '@embedpdf/core': 2.8.0 preact: ^10.26.4 react: '>=16.8.0' react-dom: '>=16.8.0' svelte: '>=5 <6' vue: '>=3.2.0' - '@embedpdf/plugin-rotate@2.7.0': - resolution: {integrity: sha512-ggqhQzpJB7ydfx9fDcuUrlGS9wxfsLG+rQwf1MMmUMMdEK1NPsHw5abSuQBerAm1vrpZ3Dyz0v2TxPVejvIhjA==} + '@embedpdf/plugin-rotate@2.8.0': + resolution: {integrity: sha512-lWATWEwhkBW77dJaKXlSJbqEMLTSy1lOhn0kDAZ5eyPZRo+7UWe7LHuT5HWzzRlbY9rpvnyixCT6Zp9rKT+WnQ==} peerDependencies: - '@embedpdf/core': 2.7.0 + '@embedpdf/core': 2.8.0 preact: ^10.26.4 react: '>=16.8.0' react-dom: '>=16.8.0' svelte: '>=5 <6' vue: '>=3.2.0' - '@embedpdf/plugin-scroll@2.7.0': - resolution: {integrity: sha512-uEs5XdHZ3XqH3OWnM8E2eHen+7+MxK9SrlBnfM8ZcPkzHR9n7hT/Aqy05BiLKxKem585HvtbRgFzNQZqmNIGHw==} + '@embedpdf/plugin-scroll@2.8.0': + resolution: {integrity: sha512-l6hFH6lsAI+07ZGuOwbC8qcRNdYzWSIfRszjt9UmhKZbvXLEp6YJeS/XOUC/37Kqi30tsmLDyZhMW1AooGAr1A==} peerDependencies: - '@embedpdf/core': 2.7.0 - '@embedpdf/plugin-viewport': 2.7.0 + '@embedpdf/core': 2.8.0 + '@embedpdf/plugin-viewport': 2.8.0 preact: ^10.26.4 react: '>=16.8.0' react-dom: '>=16.8.0' svelte: '>=5 <6' vue: '>=3.2.0' - '@embedpdf/plugin-search@2.7.0': - resolution: {integrity: sha512-TeUMvlp6j4NXkkbPURSkg7fd6l/X8wUnN+ImFiM01VM+YBLQWTPXcP7AAyFzoI5iAh2m5+ZZEB/uGb5qm3Vamg==} + '@embedpdf/plugin-search@2.8.0': + resolution: {integrity: sha512-HZ7munHdAF2pJ1cT02yc5I0Xcr4b4CQ8GkhD4qhTpZK0yga/tQiDY2Jjstygv7XiZwHIDKvqOuQsQmOXDsEemw==} peerDependencies: - '@embedpdf/core': 2.7.0 + '@embedpdf/core': 2.8.0 preact: ^10.26.4 react: '>=16.8.0' react-dom: '>=16.8.0' svelte: '>=5 <6' vue: '>=3.2.0' - '@embedpdf/plugin-selection@2.7.0': - resolution: {integrity: sha512-MhTUHZ5jBh1jQU66xrtkx2jEtcreCfHy4zpmMY7iCoZtWUxrML+zf4jYNrR/ZP93O4i5HNBSnJNTG+RmRJ5KPw==} + '@embedpdf/plugin-selection@2.8.0': + resolution: {integrity: sha512-DcPyOp2WKoVYVpbZIP5t+JsEmCL9Y7bxe8PmiEBtlm1lustuUezdWyA2G4wsGCR4I/5uNlY85qBGCBhL195sSA==} peerDependencies: - '@embedpdf/core': 2.7.0 - '@embedpdf/plugin-interaction-manager': 2.7.0 + '@embedpdf/core': 2.8.0 + '@embedpdf/plugin-interaction-manager': 2.8.0 preact: ^10.26.4 react: '>=16.8.0' react-dom: '>=16.8.0' svelte: '>=5 <6' vue: '>=3.2.0' - '@embedpdf/plugin-spread@2.7.0': - resolution: {integrity: sha512-FMW6nXlyZhjQKrj8l4gduu0+IWI/H8Sda9iiKKYOGLrDWcIsSo3Gt3mSJgUsjUxA2YS+l0m48VeuSESa7Ab8oA==} + '@embedpdf/plugin-spread@2.8.0': + resolution: {integrity: sha512-0Ld5HERaG8cKyWW7ktojG3FK6angkzYnBnw7Rnqf4cQuNdO7nKSTslyxkrLzF3vvmKrB//2ghm/pRVkgci4BOw==} peerDependencies: - '@embedpdf/core': 2.7.0 + '@embedpdf/core': 2.8.0 preact: ^10.26.4 react: '>=16.8.0' react-dom: '>=16.8.0' svelte: '>=5 <6' vue: '>=3.2.0' - '@embedpdf/plugin-thumbnail@2.7.0': - resolution: {integrity: sha512-ZnXt9ebtExFQUMUbWApUK8yC1eXYjDMEzS9631QpbLm0BhW9jYu9cs6U37Sww+zhYi7IFih4zb38lgAsbDgOcA==} + '@embedpdf/plugin-thumbnail@2.8.0': + resolution: {integrity: sha512-Dq/Cqsn4GClRXNWerqlXNH8WDWK/TtHxwq6yr2kqgXPo1FyREto4I7GfdO1hygTu0Dl6HK2auEVHBVC8QT53fw==} peerDependencies: - '@embedpdf/core': 2.7.0 - '@embedpdf/plugin-render': 2.7.0 + '@embedpdf/core': 2.8.0 + '@embedpdf/plugin-render': 2.8.0 preact: ^10.26.4 react: '>=16.8.0' react-dom: '>=16.8.0' svelte: '>=5 <6' vue: '>=3.2.0' - '@embedpdf/plugin-tiling@2.7.0': - resolution: {integrity: sha512-/Cd7dR0kA5/Y1gykYLYS3gecStycc4m5Jjm+a0mFzO/7yQ6BLb0g4zkM95YloBAsFoP5GPXKKhBw3pi32pTObw==} + '@embedpdf/plugin-tiling@2.8.0': + resolution: {integrity: sha512-gPe5mG6hyyruki1eSuQYD2KDbo0Z0TxzSk8TcHIdEYYF6NlI2OghuO8Vczz5WLU8clX8xzn8c/c+tQMHEXfbZA==} peerDependencies: - '@embedpdf/core': 2.7.0 - '@embedpdf/plugin-render': 2.7.0 - '@embedpdf/plugin-scroll': 2.7.0 - '@embedpdf/plugin-viewport': 2.7.0 + '@embedpdf/core': 2.8.0 + '@embedpdf/plugin-render': 2.8.0 + '@embedpdf/plugin-scroll': 2.8.0 + '@embedpdf/plugin-viewport': 2.8.0 preact: ^10.26.4 react: '>=16.8.0' react-dom: '>=16.8.0' svelte: '>=5 <6' vue: '>=3.2.0' - '@embedpdf/plugin-ui@2.7.0': - resolution: {integrity: sha512-G145mFCTp5ct8bR5C8WdKFForaS2yA8N7N8MTBra5yNPWgEUD52Yx16PB+HuuBXPoTmLftd45XIDOqmF5vEvQQ==} + '@embedpdf/plugin-ui@2.8.0': + resolution: {integrity: sha512-RukCJFWKpBCao8ksiXLViXQafAvTpMtpMDXy3wt5zJMuWjYPvjPOWswZeztjeucRfS1F9JDIZohiwj9iE0AZJw==} peerDependencies: - '@embedpdf/core': 2.7.0 - '@embedpdf/plugin-render': 2.7.0 - '@embedpdf/plugin-scroll': 2.7.0 - '@embedpdf/plugin-viewport': 2.7.0 + '@embedpdf/core': 2.8.0 + '@embedpdf/plugin-render': 2.8.0 + '@embedpdf/plugin-scroll': 2.8.0 + '@embedpdf/plugin-viewport': 2.8.0 preact: ^10.26.4 react: '>=16.8.0' react-dom: '>=16.8.0' svelte: '>=5 <6' vue: '>=3.2.0' - '@embedpdf/plugin-view-manager@2.7.0': - resolution: {integrity: sha512-zC9nKvoCa5qStr4dIapSlrR1/j6zv5MnkLo3CUFI1je37J0tSCofnGbDFI6gViPtoQjW4G+vIW62/GqHgynt+A==} + '@embedpdf/plugin-view-manager@2.8.0': + resolution: {integrity: sha512-AJynwWjWmyndCZFfhsNoKYDXk1TWKZjqiSczOC8j7ea77iNl/zNW7cgeTglx96xieFffDcG9K3F0MiMdS/snQQ==} peerDependencies: - '@embedpdf/core': 2.7.0 + '@embedpdf/core': 2.8.0 preact: ^10.26.4 react: '>=16.8.0' react-dom: '>=16.8.0' svelte: '>=5 <6' vue: '>=3.2.0' - '@embedpdf/plugin-viewport@2.7.0': - resolution: {integrity: sha512-nVDoU86CgHme7f2r7OFhziqHz1Yg8vdE2K+bXzRCmtZaubH+qVo5C+77at9brYCSinA67znQn1yy6zbfxs4FwA==} + '@embedpdf/plugin-viewport@2.8.0': + resolution: {integrity: sha512-E16hc4yPA54XQGHp0Dy3OYyE8ilBaJE7LJirVmha4kMkP7XBu6xHNOJrXtq4GsZmdLQkf+x8ie2DDbWS+tcwnw==} peerDependencies: - '@embedpdf/core': 2.7.0 + '@embedpdf/core': 2.8.0 preact: ^10.26.4 react: '>=16.8.0' react-dom: '>=16.8.0' svelte: '>=5 <6' vue: '>=3.2.0' - '@embedpdf/plugin-zoom@2.7.0': - resolution: {integrity: sha512-5u2cQcahHkbOfa5Ug5hxXwtIOz4TzrQSgvmXvO7+jV0jXKOp1vFVB9tU26SKwwwW9OL6e4L/P6roKJRPbOnWyw==} + '@embedpdf/plugin-zoom@2.8.0': + resolution: {integrity: sha512-HepSQ7NFYhMsQsgfnC/G3b3LOYtNCWkCME0C0jBLrEYsgqsWozf97jIgzfOAeJsugyjQmojpgLUNt3xE9CtG6Q==} peerDependencies: - '@embedpdf/core': 2.7.0 - '@embedpdf/plugin-scroll': 2.7.0 - '@embedpdf/plugin-viewport': 2.7.0 + '@embedpdf/core': 2.8.0 + '@embedpdf/plugin-scroll': 2.8.0 + '@embedpdf/plugin-viewport': 2.8.0 preact: ^10.26.4 react: '>=16.8.0' react-dom: '>=16.8.0' svelte: '>=5 <6' vue: '>=3.2.0' - '@embedpdf/utils@2.7.0': - resolution: {integrity: sha512-QtHOChToxkemBbJSwBTbgUqQbUO+obRj5HBaA/8KGv1ESCjtrdwjfAHMCBYdRuyvMVvrQGe1bHuSbKpb2JVS5w==} + '@embedpdf/utils@2.8.0': + resolution: {integrity: sha512-mt3DiQ8pnPk95q0zv7dXfN+y5fzJT2WtXyST8ziYEgmfhz0l2HT/MHCAwLzB3Whlnd2BdHThLfJyG1UD6pC84g==} peerDependencies: preact: ^10.26.4 react: '>=16.8.0' @@ -1958,8 +2023,8 @@ packages: resolution: {integrity: sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - '@eslint/config-array@0.21.1': - resolution: {integrity: sha512-aw1gNayWpdI/jSYVgzN5pL0cfzU02GT3NBpeT/DXbx1/1x7ZKxFPd9bwrzygx/qiwIQiJ1sw/zD8qY/kRvlGHA==} + '@eslint/config-array@0.21.2': + resolution: {integrity: sha512-nJl2KGTlrf9GjLimgIru+V/mzgSK0ABCDQRvxw5BjURL7WfH5uoWmizbH7QB6MmnMBd8cIC9uceWnezL1VZWWw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@eslint/config-helpers@0.4.2': @@ -1970,12 +2035,12 @@ packages: resolution: {integrity: sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/eslintrc@3.3.4': - resolution: {integrity: sha512-4h4MVF8pmBsncB60r0wSJiIeUKTSD4m7FmTFThG8RHlsg9ajqckLm9OraguFGZE4vVdpiI1Q4+hFnisopmG6gQ==} + '@eslint/eslintrc@3.3.5': + resolution: {integrity: sha512-4IlJx0X0qftVsN5E+/vGujTRIFtwuLbNsVUe7TO6zYPDR1O6nFwvwhIKEKSrl6dZchmYBITazxKoUYOjdtjlRg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/js@9.39.3': - resolution: {integrity: sha512-1B1VkCq6FuUNlQvlBYb+1jDu/gV297TIs/OeiaSR9l1H27SVW55ONE1e1Vp16NqP683+xEGzxYtv4XCiDPaQiw==} + '@eslint/js@9.39.4': + resolution: {integrity: sha512-nE7DEIchvtiFTwBw4Lfbu59PG+kCofhjsKaCWzxTpt4lfRjRMqG6uMBzKXuEcyXhOHoUp9riAm7/aWYGhXZ9cw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@eslint/object-schema@2.1.7': @@ -1986,8 +2051,8 @@ packages: resolution: {integrity: sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@exodus/bytes@1.14.1': - resolution: {integrity: sha512-OhkBFWI6GcRMUroChZiopRiSp2iAMvEBK47NhJooDqz1RERO4QuZIZnjP63TXX8GAiLABkYmX+fuQsdJ1dd2QQ==} + '@exodus/bytes@1.15.0': + resolution: {integrity: sha512-UY0nlA+feH81UGSHv92sLEPLCeZFjXOuHhrIo0HQydScuQc8s0A7kL/UdgwgDq8g8ilksmuoF35YVTNphV2aBQ==} engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} peerDependencies: '@noble/hashes': ^1.8.0 || ^2.0.0 @@ -1995,14 +2060,20 @@ packages: '@noble/hashes': optional: true - '@floating-ui/core@1.7.4': - resolution: {integrity: sha512-C3HlIdsBxszvm5McXlB8PeOEWfBhcGBTZGkGlWc2U0KFY5IwG5OQEuQ8rq52DZmcHDlPLd+YFBK+cZcytwIFWg==} + '@floating-ui/core@1.7.5': + resolution: {integrity: sha512-1Ih4WTWyw0+lKyFMcBHGbb5U5FtuHJuujoyyr5zTaWS5EYMeT6Jb2AuDeftsCsEuchO+mM2ij5+q9crhydzLhQ==} - '@floating-ui/dom@1.7.5': - resolution: {integrity: sha512-N0bD2kIPInNHUHehXhMke1rBGs1dwqvC9O9KYMyyjK7iXt7GAhnro7UlcuYcGdS/yYOlq0MAVgrow8IbWJwyqg==} + '@floating-ui/dom@1.7.6': + resolution: {integrity: sha512-9gZSAI5XM36880PPMm//9dfiEngYoC6Am2izES1FF406YFsjvyBMmeJ2g4SAju3xWwtuynNRFL2s9hgxpLI5SQ==} - '@floating-ui/utils@0.2.10': - resolution: {integrity: sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==} + '@floating-ui/utils@0.2.11': + resolution: {integrity: sha512-RiB/yIh78pcIxl6lLMG0CgBXAZ2Y0eVHqMPYugu+9U0AeT6YBeiJpf7lbdJNIugFP5SIjwNRgo4DhR1Qxi26Gg==} + + '@hono/node-server@1.19.11': + resolution: {integrity: sha512-dr8/3zEaB+p0D2n/IUrlPF1HZm586qgJNXK1a9fhg/PzdtkK7Ksd5l312tJX2yBuALqDYBlG20QEbayqPyxn+g==} + engines: {node: '>=18.14.1'} + peerDependencies: + hono: ^4 '@hono/node-server@1.19.9': resolution: {integrity: sha512-vHL6w3ecZsky+8P5MD+eFfaGTyCeOHUIFYMGpQGbrBTSmNNoxv0if69rEZ5giu36weC5saFuznL411gRX7bJDw==} @@ -2043,8 +2114,8 @@ packages: resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==} engines: {node: '>=18.18'} - '@iconify-json/simple-icons@1.2.71': - resolution: {integrity: sha512-rNoDFbq1fAYiEexBvrw613/xiUOPEu5MKVV/X8lI64AgdTzLQUUemr9f9fplxUMPoxCBP2rWzlhOEeTHk/Sf0Q==} + '@iconify-json/simple-icons@1.2.72': + resolution: {integrity: sha512-wkcixntHvaCoqPqerGrNFcHQ3Yx1ux4ZkhscCDK0DEHpP62XCH+cxq1HTsRjbUiQl/M9K8bj03HF6Wgn5iE2rQ==} '@iconify/types@2.0.0': resolution: {integrity: sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==} @@ -2052,8 +2123,8 @@ packages: '@iconify/utils@3.1.0': resolution: {integrity: sha512-Zlzem1ZXhI1iHeeERabLNzBHdOa4VhQbqAcOQaMKuTuyZCpwKbC2R4Dd0Zo3g9EAc+Y4fiarO8HIHRAth7+skw==} - '@img/colour@1.0.0': - resolution: {integrity: sha512-A5P/LfWGFSl6nsckYtjw9da+19jB8hkJ6ACTGcDfEJ0aE+l2n2El7dsVM7UVHZQ9s2lmYMWlrS21YLy2IR1LUw==} + '@img/colour@1.1.0': + resolution: {integrity: sha512-Td76q7j57o/tLVdgS746cYARfSyxk8iEfRxewL9h4OMzYhbW4TAcppl0mT4eyqXddh6L/jwoM75mo7ixa/pCeQ==} engines: {node: '>=18'} '@img/sharp-darwin-arm64@0.33.5': @@ -2300,8 +2371,8 @@ packages: '@internationalized/number@3.6.5': resolution: {integrity: sha512-6hY4Kl4HPBvtfS62asS/R22JzNNy8vi/Ssev7x6EobfCp+9QIB2hKvI2EtbdJ0VSQacxVNtqhE/NmF/NZ0gm6g==} - '@ioredis/commands@1.5.0': - resolution: {integrity: sha512-eUgLqrMf8nJkZxT24JvVRrQya1vZkQh8BBeYNwGDqa5I0VUi8ACx7uFvAaLxintokpTenkK6DASvo/bvNbBGow==} + '@ioredis/commands@1.5.1': + resolution: {integrity: sha512-JH8ZL/ywcJyR9MmJ5BNqZllXNZQqQbnVZOqpPQqE1vHiFgAw4NHbvE0FOduNU8IX9babitBT46571OnPTT0Zcw==} '@isaacs/balanced-match@4.0.1': resolution: {integrity: sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==} @@ -2365,6 +2436,13 @@ packages: '@cfworker/json-schema': optional: true + '@mongodb-js/saslprep@1.4.6': + resolution: {integrity: sha512-y+x3H1xBZd38n10NZF/rEBlvDOOMQ6LKUTHqr8R9VkJ+mmQOYtJFxIlkkK8fZrtOiL6VixbOBWMbZGBdal3Z1g==} + + '@mrleebo/prisma-ast@0.13.1': + resolution: {integrity: sha512-XyroGQXcHrZdvmrGJvsA9KNeOOgGMg1Vg9OlheUsBOSKznLMDl+YChxbkboRHvtFYJEMRYmlV3uoo/njCw05iw==} + engines: {node: '>=16'} + '@napi-rs/wasm-runtime@1.1.1': resolution: {integrity: sha512-p64ah1M1ld8xjWv3qbvFwHiFVWrq1yFvV4f7w+mzaqiR4IlSgkqhcRdHwsGgomwzBH51sRY4NEowLxnaBjcW/A==} @@ -2534,6 +2612,58 @@ packages: preact: ^10.4.0 || ^11.0.0-0 vite: '>=2.0.0' + '@prisma/client-runtime-utils@7.4.2': + resolution: {integrity: sha512-cID+rzOEb38VyMsx5LwJMEY4NGIrWCNpKu/0ImbeooQ2Px7TI+kOt7cm0NelxUzF2V41UVVXAmYjANZQtCu1/Q==} + + '@prisma/client@7.4.2': + resolution: {integrity: sha512-ts2mu+cQHriAhSxngO3StcYubBGTWDtu/4juZhXCUKOwgh26l+s4KD3vT2kMUzFyrYnll9u/3qWrtzRv9CGWzA==} + engines: {node: ^20.19 || ^22.12 || >=24.0} + peerDependencies: + prisma: '*' + typescript: '>=5.4.0' + peerDependenciesMeta: + prisma: + optional: true + typescript: + optional: true + + '@prisma/config@7.4.2': + resolution: {integrity: sha512-CftBjWxav99lzY1Z4oDgomdb1gh9BJFAOmWF6P2v1xRfXqQb56DfBub+QKcERRdNoAzCb3HXy3Zii8Vb4AsXhg==} + + '@prisma/debug@7.2.0': + resolution: {integrity: sha512-YSGTiSlBAVJPzX4ONZmMotL+ozJwQjRmZweQNIq/ER0tQJKJynNkRB3kyvt37eOfsbMCXk3gnLF6J9OJ4QWftw==} + + '@prisma/debug@7.4.2': + resolution: {integrity: sha512-aP7qzu+g/JnbF6U69LMwHoUkELiserKmWsE2shYuEpNUJ4GrtxBCvZwCyCBHFSH2kLTF2l1goBlBh4wuvRq62w==} + + '@prisma/dev@0.20.0': + resolution: {integrity: sha512-ovlBYwWor0OzG+yH4J3Ot+AneD818BttLA+Ii7wjbcLHUrnC4tbUPVGyNd3c/+71KETPKZfjhkTSpdS15dmXNQ==} + + '@prisma/engines-version@7.5.0-10.94a226be1cf2967af2541cca5529f0f7ba866919': + resolution: {integrity: sha512-5FIKY3KoYQlBuZC2yc16EXfVRQ8HY+fLqgxkYfWCtKhRb3ajCRzP/rPeoSx11+NueJDANdh4hjY36mdmrTcGSg==} + + '@prisma/engines@7.4.2': + resolution: {integrity: sha512-B+ZZhI4rXlzjVqRw/93AothEKOU5/x4oVyJFGo9RpHPnBwaPwk4Pi0Q4iGXipKxeXPs/dqljgNBjK0m8nocOJA==} + + '@prisma/fetch-engine@7.4.2': + resolution: {integrity: sha512-f/c/MwYpdJO7taLETU8rahEstLeXfYgQGlz5fycG7Fbmva3iPdzGmjiSWHeSWIgNnlXnelUdCJqyZnFocurZuA==} + + '@prisma/get-platform@7.2.0': + resolution: {integrity: sha512-k1V0l0Td1732EHpAfi2eySTezyllok9dXb6UQanajkJQzPUGi3vO2z7jdkz67SypFTdmbnyGYxvEvYZdZsMAVA==} + + '@prisma/get-platform@7.4.2': + resolution: {integrity: sha512-UTnChXRwiauzl/8wT4hhe7Xmixja9WE28oCnGpBtRejaHhvekx5kudr3R4Y9mLSA0kqGnAMeyTiKwDVMjaEVsw==} + + '@prisma/query-plan-executor@7.2.0': + resolution: {integrity: sha512-EOZmNzcV8uJ0mae3DhTsiHgoNCuu1J9mULQpGCh62zN3PxPTd+qI9tJvk5jOst8WHKQNwJWR3b39t0XvfBB0WQ==} + + '@prisma/studio-core@0.13.1': + resolution: {integrity: sha512-agdqaPEePRHcQ7CexEfkX1RvSH9uWDb6pXrZnhCRykhDFAV0/0P3d07WtfiY8hZWb7oRU4v+NkT4cGFHkQJIPg==} + peerDependencies: + '@types/react': ^18.0.0 || ^19.0.0 + react: ^18.0.0 || ^19.0.0 + react-dom: ^18.0.0 || ^19.0.0 + '@protobufjs/aspromise@1.1.2': resolution: {integrity: sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==} @@ -2664,8 +2794,8 @@ packages: rollup: optional: true - '@rollup/plugin-commonjs@29.0.0': - resolution: {integrity: sha512-U2YHaxR2cU/yAiwKJtJRhnyLk7cifnQw0zUpISsocBDoHDJn+HTV74ABqnwr5bEgWUwFZC9oFL6wLe21lHu5eQ==} + '@rollup/plugin-commonjs@29.0.2': + resolution: {integrity: sha512-S/ggWH1LU7jTyi9DxZOKyxpVd4hF/OZ0JrEbeLjXk/DFXwRny0tjD2c992zOUYQobLrVkRVMDdmHP16HKP7GRg==} engines: {node: '>=16.0.0 || 14 >= 14.17'} peerDependencies: rollup: ^2.68.0||^3.0.0||^4.0.0 @@ -2856,28 +2986,28 @@ packages: cpu: [x64] os: [win32] - '@sentry-internal/browser-utils@10.40.0': - resolution: {integrity: sha512-3CDeVNBXYOIvBVdT0SOdMZx5LzYDLuhGK/z7A14sYZz4Cd2+f4mSeFDaEOoH/g2SaY2CKR5KGkAADy8IyjZ21w==} + '@sentry-internal/browser-utils@10.42.0': + resolution: {integrity: sha512-HCEICKvepxN4/6NYfnMMMlppcSwIEwtS66X6d1/mwaHdi2ivw0uGl52p7Nfhda/lIJArbrkWprxl0WcjZajhQA==} engines: {node: '>=18'} - '@sentry-internal/feedback@10.40.0': - resolution: {integrity: sha512-V/ixkcdCNMo04KgsCEeNEu966xUUTD6czKT2LOAO5siZACqFjT/Rp9VR1n7QQrVo3sL7P3QNiTHtX0jaeWbwzg==} + '@sentry-internal/feedback@10.42.0': + resolution: {integrity: sha512-lpPcHsog10MVYFTWE0Pf8vQRqQWwZHJpkVl2FEb9/HDdHFyTBUhCVoWo1KyKaG7GJl9AVKMAg7bp9SSNArhFNQ==} engines: {node: '>=18'} - '@sentry-internal/replay-canvas@10.40.0': - resolution: {integrity: sha512-wzQwilFHO2baeCt0dTMf0eW+rgK8O+mkisf9sQzPXzG3Krr/iVtFg1T5T1Th3YsCsEdn6yQ3hcBPLEXjMSvccg==} + '@sentry-internal/replay-canvas@10.42.0': + resolution: {integrity: sha512-am3m1Fj8ihoPfoYo41Qq4KeCAAICn4bySso8Oepu9dMNe9Lcnsf+reMRS2qxTPg3pZDc4JEMOcLyNCcgnAfrHw==} engines: {node: '>=18'} - '@sentry-internal/replay@10.40.0': - resolution: {integrity: sha512-vsH2Ut0KIIQIHNdS3zzEGLJ2C9btbpvJIWAVk7l7oft66JzlUNC89qNaQ5SAypjLQx4Ln2V/ZTqfEoNzXOAsoQ==} + '@sentry-internal/replay@10.42.0': + resolution: {integrity: sha512-Zh3EoaH39x2lqVY1YyVB2vJEyCIrT+YLUQxYl1yvP0MJgLxaR6akVjkgxbSUJahan4cX5DxpZiEHfzdlWnYPyQ==} engines: {node: '>=18'} - '@sentry/browser@10.40.0': - resolution: {integrity: sha512-nCt3FKUMFad0C6xl5wCK0Jz+qT4Vev4fv6HJRn0YoNRRDQCfsUVxAz7pNyyiPNGM/WCDp9wJpGJsRvbBRd2anw==} + '@sentry/browser@10.42.0': + resolution: {integrity: sha512-iXxYjXNEBwY1MH4lDSDZZUNjzPJDK7/YLwVIJq/3iBYpIQVIhaJsoJnf3clx9+NfJ8QFKyKfcvgae61zm+hgTA==} engines: {node: '>=18'} - '@sentry/cloudflare@10.40.0': - resolution: {integrity: sha512-Tr8iDSUUlmwEBvXHic/zujEZZjs6XZ6mWJ3wOyb7gtjcd9umaRQtvALLHBaGg1uQoZkLjLpDas3q1p/dS4B6rw==} + '@sentry/cloudflare@10.42.0': + resolution: {integrity: sha512-EfovCbS4Xi8+epXilN6CzplxPzk+GxJZq574LaW8HJhIRnkF8/qfJ3iuh966EgKGCnVMF7c9EQsnfgcRKe8dog==} engines: {node: '>=18'} peerDependencies: '@cloudflare/workers-types': ^4.x @@ -2885,12 +3015,12 @@ packages: '@cloudflare/workers-types': optional: true - '@sentry/core@10.40.0': - resolution: {integrity: sha512-/wrcHPp9Avmgl6WBimPjS4gj810a1wU5oX9fF1bzJfeIIbF3jTsAbv0oMbgDp0cSDnkwv2+NvcPnn3+c5J6pBA==} + '@sentry/core@10.42.0': + resolution: {integrity: sha512-L4rMrXMqUKBanpjpMT+TuAVk6xAijz6AWM6RiEYpohAr7SGcCEc1/T0+Ep1eLV8+pwWacfU27OvELIyNeOnGzA==} engines: {node: '>=18'} - '@sentry/solid@10.40.0': - resolution: {integrity: sha512-ZMnojd51pWQLrC32QDoUnRJcBBc6ftpyklSlCawjQeA0JfNyOOZAVfng1kBjk0+mhw5IKIltgCs1tpp3Vqrcuw==} + '@sentry/solid@10.42.0': + resolution: {integrity: sha512-33RGF8dW0Q4wpM4QXlJgQsd52p/4E0aEBEHWmLUGaVsU97w4KKN179vVrTjOMX0KPEYx+ozOBVjE+qsWI7E9Ig==} engines: {node: '>=18'} peerDependencies: '@solidjs/router': ^0.13.4 || ^0.14.0 || ^0.15.0 @@ -3296,8 +3426,11 @@ packages: '@types/micromatch@4.0.10': resolution: {integrity: sha512-5jOhFDElqr4DKTrTEbnW8DZ4Hz5LRUEmyrGpCMrD/NphYv3nUnaF08xmSLx1rGGnyEs/kFnhiw6dCgcDqMr5PQ==} - '@types/node@25.3.1': - resolution: {integrity: sha512-hj9YIJimBCipHVfHKRMnvmHg+wfhKc0o4mTtXh9pKBjC8TLJzz0nzGmLi5UJsYAUgSvXFHgb0V2oY10DUFtImw==} + '@types/node@25.3.5': + resolution: {integrity: sha512-oX8xrhvpiyRCQkG1MFchB09f+cXftgIXb3a7UUa4Y3wpmZPw5tyZGTLWhlESOLq1Rq6oDlc8npVU2/9xiCuXMA==} + + '@types/react@19.2.14': + resolution: {integrity: sha512-ilcTH/UniCkMdtexkoCN0bI7pMcJDvmQFPvuPvmEaYA/NSfFTAgdUSLAoVjaRJm7+6PvcM+q1zYOwS4wTYMF9w==} '@types/resolve@1.20.2': resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==} @@ -3311,6 +3444,12 @@ packages: '@types/web-bluetooth@0.0.21': resolution: {integrity: sha512-oIQLCGWtcFZy2JW77j9k8nHzAOpqMHLQejDA48XXMWH6tjCQHz5RCFz1bzsmROyL6PUm+LLnUiI4BCn221inxA==} + '@types/webidl-conversions@7.0.3': + resolution: {integrity: sha512-CiJJvcRtIgzadHCYXw7dqEnMNRjhGZlYK05Mj9OyktqV8uVT8fD2BFOB7S1uwBE3Kj2Z+4UyPmFw/Ixgw/LAlA==} + + '@types/whatwg-url@13.0.0': + resolution: {integrity: sha512-N8WXpbE6Wgri7KUSvrmQcqrMllKZ9uxkYWMt+mCSGwNc0Hsw9VQTW7ApqI4XNrx6/SaM2QQJCzMPDEXE058s+Q==} + '@types/yauzl@2.10.3': resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==} @@ -3544,233 +3683,233 @@ packages: '@xenova/transformers@2.17.2': resolution: {integrity: sha512-lZmHqzrVIkSvZdKZEx7IYY51TK0WDrC8eR0c5IMnBsO8di8are1zzw8BlLhyO2TklZKLN5UffNGs1IJwT6oOqQ==} - '@zag-js/accordion@1.34.1': - resolution: {integrity: sha512-FEk9iBwoCkbs96386MfKG7fKZ6uAnID/ppkYFs3FatTf79liJi6cQekWuOxhDPwpmbndCBNSO+eRJgsN1DWGxw==} + '@zag-js/accordion@1.35.3': + resolution: {integrity: sha512-wmw6yo5Zr6ShiKGTc5ICEOJCurWAOSGubIpGISiHi3cZ4tlxKF/vpATIUT3eq8xzdB56YK57yKCujs/WmwqqoA==} - '@zag-js/anatomy@1.34.1': - resolution: {integrity: sha512-FQuhlB5ggZvC2AKy52qITBe8Q8GCHdO+tsSY0A7kOe1C3wDnZNRCKtiNfkcIlEc3uP+alMhF/7xn09N7XXOTcQ==} + '@zag-js/anatomy@1.35.3': + resolution: {integrity: sha512-oqU9iLNNylrtJMBX5Xu4DsxnPNvtZLiobryv2oNtsDI1mi1Fca/XHghQC9K5aYT0qNsmHj1M3W5WAWTaOtPLkQ==} - '@zag-js/angle-slider@1.34.1': - resolution: {integrity: sha512-TQjzs9GZMWX4TKCmO164eWBnmw9R0EzQUkbEMSPgQ5Ue2vxxU4CCFlcn2HNlP0cz1PASk2xnMPRhcoPoRUTM+w==} + '@zag-js/angle-slider@1.35.3': + resolution: {integrity: sha512-HXRlmsbNEJSBT53fq9XQKL/vwZWwJC3nprskI7s4f/jy8a4uXPTlv7N7zuBYjew+ScTMzZah6fLWzUztBehmSg==} - '@zag-js/aria-hidden@1.34.1': - resolution: {integrity: sha512-3oO8T4ezzZI+DSDTaPZ4ZE6wdzHqywlz2Q6sqwjnsE46NcmlnZkaFgDPJCNPH56tXLsB7uE7A6KXLYxQrLf6fw==} + '@zag-js/aria-hidden@1.35.3': + resolution: {integrity: sha512-dk5POebn10WneQfLrEgbTzwolaXWpCSHL6F3jCTinW9IbOx7BXghzJD21iU5Iun+y9CorqJPW3p7LplYNUMO5Q==} - '@zag-js/async-list@1.34.1': - resolution: {integrity: sha512-Tt8dLkZGaVoX5CSmZhtg2kjzcz6uxruq29H+RLpG6mHooJt7YSjClmQIdLCgh/B/8aNDlXHir5pM/iiyGPHsqw==} + '@zag-js/async-list@1.35.3': + resolution: {integrity: sha512-SXX3wGzLK/maKS1PJ3XfLIGWbu0022f/OhcFsT1PbiHnoFZTH7h2fBhirrCBfy2TYFQ6r5uxgjkhPUNkuaeYnA==} - '@zag-js/auto-resize@1.34.1': - resolution: {integrity: sha512-jBOPBB/ILpVX1Craw/0ng2rlWDsBDTwXa9Nt/QFg2fJ0F5GYbye874/2kQQyroiEB7g2KGLgEAhmZt/7SHS8JA==} + '@zag-js/auto-resize@1.35.3': + resolution: {integrity: sha512-ufG8HSqzLd9h5rnos8aumj8iORlRskeR/gbpJu1NHrnHBWIrpuXm6KJJR2oZhTFY1BUMMk8eYIBA2QkVuiJzWA==} - '@zag-js/avatar@1.34.1': - resolution: {integrity: sha512-O7Bt02kZiTozNsEaWWgGYyTOU3wFejQIQl1Y0bYEeFbBQ2y75pmffhK9792UW6oZ+nwQ+s/0/kAMkzZWSl3qww==} + '@zag-js/avatar@1.35.3': + resolution: {integrity: sha512-lbQ2Q4Va8AAScKULOHw2tCQez+0JRYGHSMFq6i+dJmeT3dlSgRanm69ra6K2po6hM9E4v6pRe+xOVE+9QMDnuA==} - '@zag-js/carousel@1.34.1': - resolution: {integrity: sha512-aKOXJCslU8HoPp54sNv0tQraVG00fq9qL/ZwmZAzKw6G2kLtHaHtxBunQMRVrVGCYxXqsdoHWGikKT9PJWIICg==} + '@zag-js/carousel@1.35.3': + resolution: {integrity: sha512-F+b8HzUeZfB+xUkAkLG4r0Ubui8pj7pSgZhi26ZiWgsM7tsd7cD+xRMXkvPEITN5Fd5QCe3KlVBuE00w5byjmg==} - '@zag-js/cascade-select@1.34.1': - resolution: {integrity: sha512-NfGskK/4uezZWmVF/Mo4mEeG47GbRE0CrU0+l8UkWWKF4ZMjLl49hBbvyoZlJLiHiDl0KxIrixr8VWR/gAgiJQ==} + '@zag-js/cascade-select@1.35.3': + resolution: {integrity: sha512-Nifdx77hEuAdXqr1wpZSPjLXqygRhq/WvnPjGhCeSqFPpy62uT4JZ3avyjUZ4I0UhvIpkleUcXtFwQ3cSMh4ww==} - '@zag-js/checkbox@1.34.1': - resolution: {integrity: sha512-qj9paN6hcFwmQz+T7ABrlN8zVeA/11WLB2JDhno2xuJjdHDmOSWnWVxCEf8lv4nxcw3SUnJnMgFtAWLd0xJkFA==} + '@zag-js/checkbox@1.35.3': + resolution: {integrity: sha512-8XBt/Wg2zSQWqV2ZFqZBQUjYRkOYHA2O3IEi0VVYtds3S1n7Pu/HqkZT5qDw+E/SY2+X9Uyx4hO7h2XrlsiZQQ==} - '@zag-js/clipboard@1.34.1': - resolution: {integrity: sha512-O1xH2e3E+GYXubA/vtBkuE3AD81hO3N5P1weA6iHOCyDl8CAtKMZZ1xMuCTwt+wujwdvM1DT4IF+II9fBMngAw==} + '@zag-js/clipboard@1.35.3': + resolution: {integrity: sha512-obTwynBpp6c17fLHe5tg//FQ497QsyCEry+K3bTdlrivWW200wvfHxZ6RKVbKwDAwhH+ye0bI1xkYAId8j7sdA==} - '@zag-js/collapsible@1.34.1': - resolution: {integrity: sha512-1u32Zz/shcmxPbPsXuiIc5D9eIoZdpFoLuzlUzGlutBzq7zoavmMVIGmSevBEn12a6vhk/dPoiz2+OAKXi+2ww==} + '@zag-js/collapsible@1.35.3': + resolution: {integrity: sha512-IweG8JOBCerJwLO6QzTZGEMlsYUmQfQSeD0jniFguMM8vcunvGVSrM+AaL8pDbmXd+snXokaGyJpGO3vzMW6Fw==} - '@zag-js/collection@1.34.1': - resolution: {integrity: sha512-C61BL3cFyEfPCsPKeWshc8l7D3igqySPksVtmfzHhxcnlOxgVkBBpik7JF/cYk9yU6pHB6bCRzRgPDziiyOHLQ==} + '@zag-js/collection@1.35.3': + resolution: {integrity: sha512-BYoWJ4b7ma2PgiuQbRSnP603f2DlK6se5JtViUHTamZScLLLWnWHuQ6zFa1KS5kiIkbb7CFM6/bJ3WNYLch8Ig==} - '@zag-js/color-picker@1.34.1': - resolution: {integrity: sha512-ajvJoGtKvGJ3KZaoLV/wu1djg9/ahKDgyyR1fcfnFRrlpczPAejTqgan+Yazuc4ZuZ/fbAMeCfVxY2BzVoxYOQ==} + '@zag-js/color-picker@1.35.3': + resolution: {integrity: sha512-i9roSgtqeA1b4Q+jWqnxjXB//BQXMP5m1FQ4YcZVq/0yT14A53JIknchuqrh3wC3yPsJMXFqCoKg+NET2+OVig==} - '@zag-js/color-utils@1.34.1': - resolution: {integrity: sha512-8QcwmqyydxQPJBMOIsMqDHS0F2wDHmvPG2XhlgoGZD6wX/++atz/usLBPV29q53HCIowrIiCh05whWyHodKREQ==} + '@zag-js/color-utils@1.35.3': + resolution: {integrity: sha512-vxkEVgz4YdSbdaPvjiRI1VsJAdwzu/dUNvzqOaiVcPDrHr/FFgmUbv0SOFjnfSb2QWGI8EDEMn02RW9ym+BzGw==} - '@zag-js/combobox@1.34.1': - resolution: {integrity: sha512-YzqOYbfh8vDmc/ewj3DetGHt0hwYuvDV/2BdCQJ5rLtLK8iLJuTB79x8l6QJBCi93BG64E7aY7Wa7jyK+1oILQ==} + '@zag-js/combobox@1.35.3': + resolution: {integrity: sha512-s1qmttTGJTMjlDakL+uvWSEggpafKr1vhOeZCh8j+N4eFt9bLAwaffjuh/1JzWBvzovw7WoMVkizdTXPlN8oYg==} - '@zag-js/core@1.34.1': - resolution: {integrity: sha512-GjOZOL/p0tsuH/koYR+mSoegs3JXpP0ZkFuidAf0R4zqklNSdTLzhb00CZHGZcdWCExhmG18YwpjbEx8eyfV5g==} + '@zag-js/core@1.35.3': + resolution: {integrity: sha512-fGAHyqOYSEFmo52t7wI4dvbFfLyJmUlyf7wknsiUlzUHlrn3yv5PAZYZ2TibpOD1hwXIp4AoCjbiIPPZBxirZw==} - '@zag-js/date-picker@1.34.1': - resolution: {integrity: sha512-ubhpCRDf7vVXSvToJvnsnqjTB2hhbsYEaeIrwsHTFAFOETD15A5H/aC5PeiwCouLEbTQDiIoaDlOsNh57IO7XQ==} + '@zag-js/date-picker@1.35.3': + resolution: {integrity: sha512-4G10h6pzzLbd84SE2CKtqi6Z9wEBhSyx4GRSxxy3tsf5wAxnz4anRFat9CGwn2YVUYcUJpD+umYgBMPt6zGDnA==} peerDependencies: '@internationalized/date': '>=3.0.0' - '@zag-js/date-utils@1.34.1': - resolution: {integrity: sha512-UG0aooQXNWINlO8RWcBFv6aEHE1jAFKU4vNprh0nDOl61O0+j+lbV0qYushgyZ7O6aYSoI+tdb/Myv+BPqQxyg==} + '@zag-js/date-utils@1.35.3': + resolution: {integrity: sha512-1co0FPpZ6nO5dN8sZtECkMYaf+3E5zu0KSIJZpZiXb4TgsZMDyHu7K7IsiKFHk9qmhuF6AdPpNxBju91pSXMFg==} peerDependencies: '@internationalized/date': '>=3.0.0' - '@zag-js/dialog@1.34.1': - resolution: {integrity: sha512-2PfuUhC2e0ouQ2s2F9qmeThwTMGptVCAMDNMh1ZOPeVzQLvnsIQDvcYHeb62BuKgYDeoUiz3Tz/ns/sV/VI1kw==} + '@zag-js/dialog@1.35.3': + resolution: {integrity: sha512-byosV+aBHH5LoFKnjEgC7WdqJid7bP9UhgWLSC7+IXbxrif9Czg1YVp6ZlQM6Nx6uD1vnty4touI3P7D7CTKcw==} - '@zag-js/dismissable@1.34.1': - resolution: {integrity: sha512-7dj7G0Cl6Fu7IHENdLT1tFeePuq8BqxPT6xANdk66hnpVeyDKcrR3XjN+ChWpYxGIkeOfPGYsjRHx1kDiFv89g==} + '@zag-js/dismissable@1.35.3': + resolution: {integrity: sha512-XPk+lqmsZp2Z1yMb5K1yj/e7Sobv4D7zK66B1GS97lk9Xzz8vuSgsimcLy0p7RXQl3KL6H5L69inSuQa2exybQ==} - '@zag-js/dom-query@1.34.1': - resolution: {integrity: sha512-7GaxMaShtWsGgsz9jPfi+aJSQrx7aVFnCi5edGet76Tcytv0MRTqFKUcpSCWu3W3znBt8tQO07Mu1SBSNQk07Q==} + '@zag-js/dom-query@1.35.3': + resolution: {integrity: sha512-1RbFZoT4CjlHN9TUNse1++ZVOyKo45ktucTIT349o6HMsoWWKmTJDPvFkMBbmu/qY6XXn4dT+LJEp4bL3DR+Qw==} - '@zag-js/drawer@1.34.1': - resolution: {integrity: sha512-8Dc6MDxVf6t9a0VQ++7hI3jSNhnVLXF4oNSnyBNUqI4XNbxffp8vk5KWeVC7fKxgoMxnlfmipiYdS+PmyWJffQ==} + '@zag-js/drawer@1.35.3': + resolution: {integrity: sha512-DN5bwa7bDCDaUSbNzFxMc2U/WmbLcXvPSQjyOpKI6CC3VbW2kKaOnjJ5qQG+W5YBO0FpmJBtaxRV7lke4sZH2w==} - '@zag-js/editable@1.34.1': - resolution: {integrity: sha512-IXR8TE/S7uuTOY/Mj3tk8zmXlpgym9OUYZGFjohVdXeUC9INIeO27ei8mfAxY3JLqnYIyrLGD0Q7OUUj2L/vTQ==} + '@zag-js/editable@1.35.3': + resolution: {integrity: sha512-HcjeacS61vQXfNT9IalZj/+oS45yW5bIDO2NjJWV7zNe5AG29NCceUnvBhy+hrUKPnKcjfDocdW5rCL+Lvs/CQ==} - '@zag-js/file-upload@1.34.1': - resolution: {integrity: sha512-lzAo3GUyHHfhRfQvlVDx7FERcCjJajyxEMuWQzOYd10jy62oaeBFkqyF2m6O3SZ6aMAiGyzR+sXpCWf/LRnxdQ==} + '@zag-js/file-upload@1.35.3': + resolution: {integrity: sha512-oIYwnDct4ERo2mfmcxsBIJnlmpzjrzYx82SQsXWD3NGKx3cgdh2lwBX+ebItaLH1jkgzBa3z0TWxc6rfvcUXbw==} - '@zag-js/file-utils@1.34.1': - resolution: {integrity: sha512-fn6FoCg36hkFvn5MrMgs3kT9T+EADnPIV90hz2uyf1VmHq6BudYU13yhebqfY0vWHk7vGmXWkiZaemW5JkXbRA==} + '@zag-js/file-utils@1.35.3': + resolution: {integrity: sha512-Tb05RCzx4swc156hd4jLiO7z+Gxg/HQ+JCds03jgTbrFJAz2D56YaMeI7gSDc1m4Xre3nyqQpSo9AeX5nzbE/w==} - '@zag-js/floating-panel@1.34.1': - resolution: {integrity: sha512-2yreCW74MO047Yd3jjofFyJpbfd55E9TBw0Hh4W1kMPpWg8E3XnL4gWrYYKX6ycjeWNVNNvyAg1O/0qiM49fiA==} + '@zag-js/floating-panel@1.35.3': + resolution: {integrity: sha512-nTZypcS0X46Oo1kpCQTnP5UlzjhypOAj3B4dq2z/3bAOC0TntYTnFkj8PbEJtExk7364xfMyxfgZOiv7Aqq01w==} - '@zag-js/focus-trap@1.34.1': - resolution: {integrity: sha512-vfIC3diaYbdxDmKmNASZYx0RrNj6bG0InrIgQF0Kk/qI81FcK/VXQDjpXnnWC+yG2u3hG8h+6kbfgHtgoCuDjQ==} + '@zag-js/focus-trap@1.35.3': + resolution: {integrity: sha512-evErLlGFdDVCI8xipNS5k0rAvO+KFRA9g273bbfWAL1+mT54mcB/XHa85nC3QpPgMNrSh+6LUNq9fapyOGoyYg==} - '@zag-js/focus-visible@1.34.1': - resolution: {integrity: sha512-Wvl/w6JpPU8DwEfq+I82yzlBX9mEp2o2k6DZc+3Kb3x/3oP8Jr0fCXdk+qWTvKekfVvDpM2vS1fjNNLfiOaQww==} + '@zag-js/focus-visible@1.35.3': + resolution: {integrity: sha512-g4F8PRGIoFoKBrHiQ1HQh5AjCS7brFRXHvpbDNb9+T11FGlF5Turb+6OVRoNV8MmiuqMltO2I28l36YsGc//uQ==} - '@zag-js/highlight-word@1.34.1': - resolution: {integrity: sha512-pPT5xaxTfW6E8/CRzMhtRTfacd6C/XpLtSCuDV0Ps84rAjsl1yrHJBT2InaMTR0fKbZd+T9HcUFKtvAe48qQfA==} + '@zag-js/highlight-word@1.35.3': + resolution: {integrity: sha512-K+mvEBbf3SUFjQeMeJQYb3cjri3x6sPaPhcKWayalelSLB/StWEGqcpmz+a6uUYrCUAK5kEi3Hn0YLGfn0GOig==} - '@zag-js/hover-card@1.34.1': - resolution: {integrity: sha512-o5ikKq83QVs63kouL3QyRIdSjs6On9joyl2/JnlWLEhGJA4NfdMLDUwdbUOzEbQgtlj8RV0VQN09lRtqs7UBWw==} + '@zag-js/hover-card@1.35.3': + resolution: {integrity: sha512-xVoKOtvrnzhYzciZ1csgiV76IQ4DRtx1lsJeFSrfg5MH0kYWeC/pcmm3yCd2+Qh/45J7DbSXeZneqxpyiF5Vvw==} - '@zag-js/i18n-utils@1.34.1': - resolution: {integrity: sha512-LqBStUq24txCz0CFW1R9/kaSA3ZrB13DpRdQfZ+o8C8HxRokdUe8Nz0uxko8NtXgO8hput9CSs5+xKjg1buc2A==} + '@zag-js/i18n-utils@1.35.3': + resolution: {integrity: sha512-k7UcNxbnC2jvGwCoHYAkFD3ZaRSMQNVHfuy8TujZQ+ci3IJovwgWLveZoRfFbXHkTLfhmbpE2tFXBdpwOVZutg==} - '@zag-js/image-cropper@1.34.1': - resolution: {integrity: sha512-LKVaIqv98BchQOQ6R7tir3mBYODZCYMwjfsNj7YgnnsN+gh9Fie1Cy4Hy/3UMMsXXCJL8LgOWULsK9Vc8PJOzw==} + '@zag-js/image-cropper@1.35.3': + resolution: {integrity: sha512-1PH6bg8JAQESHzNqjka2TJ0QGNBGBAO6rb7AZ+9CaCCLw0pIzbUJhqPMkwd9GhdWGKGP+e7wFitnjcT4W5Js8g==} - '@zag-js/interact-outside@1.34.1': - resolution: {integrity: sha512-wQdOYVhPFyYPJUDPYXQc1tg8vdJGTG5xwTEdOGVG1DpVo87VNsdb0KjnWPZsfPQEUSkvJIXtbjopp/OLw4fFow==} + '@zag-js/interact-outside@1.35.3': + resolution: {integrity: sha512-tOcuo/IztzpU7UKXtjVrLZtXzzcbhP4n2WynKwDRkTkq3mRCp61xXJp1csIBycI3JHm/CMeAEcPdRIioxIT/Zw==} - '@zag-js/json-tree-utils@1.34.1': - resolution: {integrity: sha512-MfZZvBxexy24VJtBGM8ngsoMILiVRI/MwL2+LVJQcuRlAyKvPBC5BnTSxVpokXIiu0cCHyvzAYbXqAcBNM+gWA==} + '@zag-js/json-tree-utils@1.35.3': + resolution: {integrity: sha512-nOv2dPJf+1mxsobYiSlYt96hR1MK7iHKG1iDLoO5wLggS6GQA3ix1BerHJK0zdehoEZ71R45el5ghCG1HB9VzQ==} - '@zag-js/listbox@1.34.1': - resolution: {integrity: sha512-0KcGH8lILd1fLO49VCl3nyalesm+Nvr6/oH6qflsbn+frM4JaDcF/S6gngtKXJ8Mzx+5Qua97uAvuk047Z0I/A==} + '@zag-js/listbox@1.35.3': + resolution: {integrity: sha512-FE6FOuBr6aWtOb8U8oDvAvcUzD6JKLXAe8WngiLFG+b2yyW4nlaz2AcKRG1bjjB066UMxMo9/+2p4D0Kf5Id1Q==} - '@zag-js/live-region@1.34.1': - resolution: {integrity: sha512-0Heu0z0cBQQDA1289nm0wQM3+ybEuOSqpPffHQdRgaTtUWnG0xkw0jt8qq0A/tq2VIlwLnbNledE4dh1Y6KwhA==} + '@zag-js/live-region@1.35.3': + resolution: {integrity: sha512-64rWcfggYpyr2Fn4pdrB/lljMgm3quwn9is+vdDN85Vv3WShKWoz08T4njidm0hwcIbzas0bRqQYWDLLsAoSJQ==} - '@zag-js/marquee@1.34.1': - resolution: {integrity: sha512-SR5H7oBjjtwvO893Zu8oCzwVSHOkOSSlOuzuOkoebTGIVxHXtWukM6hS9wxgS40Tp03X1qzeI1XqiCGK1wqaaQ==} + '@zag-js/marquee@1.35.3': + resolution: {integrity: sha512-bKZVpmAJWPDORP7WOWnS+65W5ZQBQmRs8zvV33ZfCpFbkXjhRiqKSzIj223/VOc2NEDjyWagz2vioAxrFYVzww==} - '@zag-js/menu@1.34.1': - resolution: {integrity: sha512-nhVM6dNf48QqeY0qzn6n5hTk8qbBM7FwnGAUJmGRx9nrrG1SpIpQ5sCxDcOwgI/Q2vMu+2ggmIiObvZKAqZkiA==} + '@zag-js/menu@1.35.3': + resolution: {integrity: sha512-KyY0EZXkIU57Mjt+Lg+pupiePk3LcnQcB3Gl05Vva61bNjBjdKV71qwCQru/OxPZEwYgPo46L7TDIb56kfK/VQ==} - '@zag-js/navigation-menu@1.34.1': - resolution: {integrity: sha512-LwGyM0VpcZxvIvoEnnAEVV3+gGQ+SLYjhj9M1GFJrtFBlHF+dhCRS3sJ1m58RiZYAiJgt6jiNe94S+WRbXs+9g==} + '@zag-js/navigation-menu@1.35.3': + resolution: {integrity: sha512-8cCHx0X/KjEpr2BaMOxJS5LiA6fs/CNqVTF/sTTgZAv7Dm+MH0yNuKm4kpPvcLaVeBpVE09bnyCHrNKzZes+Fw==} - '@zag-js/number-input@1.34.1': - resolution: {integrity: sha512-ZcqsC7XRzutc3nDV1AJO/kwb6ycAeDGTMOL3jTQND0xPZfUb5u/YZcMxinWHLwXZZ8ZuXZeWvtiy3veCUJGCFg==} + '@zag-js/number-input@1.35.3': + resolution: {integrity: sha512-uqawVybAcLcefVEHMVONuAA5kDSDPP5TsROr5PnAyFlhM1iD85+r3KAfCueoDX5w2X4ibbu9o2tdV6zTFKD/nQ==} - '@zag-js/pagination@1.34.1': - resolution: {integrity: sha512-lnQsu1TxiLUDYiIL5mng2dA5RtyBG4WkZeMCZXhk8gCe8wBJ4jbTe3KhPBAFALV9Lq4YCrV/DyhsCNWcoXGkyg==} + '@zag-js/pagination@1.35.3': + resolution: {integrity: sha512-fKm4s5KAd12RiCI/EDmmGKjPQ+i2qS/UsJPdMe65yb/4mY5OibwV2zyHcVeFsOD4gBZpnU6kYlDAGSttmLWLlQ==} - '@zag-js/password-input@1.34.1': - resolution: {integrity: sha512-0gay9u9NqN8b4QuIpABlCtP93TbQJ8uRGurUSQwgbbG6llf+EOLiZs5f0H19MVnhbcINatv9p34Je6GAP2SBbA==} + '@zag-js/password-input@1.35.3': + resolution: {integrity: sha512-etd0gm6ELAm3y+cFhPU+TYm8khm9cL5Mg5m2DcZxu1Mqpj7JY0LsXZ8SFOdCZgTIHuMEhKBiYfnuyMAd4CJztA==} - '@zag-js/pin-input@1.34.1': - resolution: {integrity: sha512-xmXdDA2JahFD+I+avDw62WX9/tKH6ab6rkn46ciqHbGTTgSW23s/btiPRuMshdd4lnqXgQgKBE/wkVdRZzeRnA==} + '@zag-js/pin-input@1.35.3': + resolution: {integrity: sha512-ZFt+WIHMdVlSg29BrQLFq5ijabiUO3tXMhoKhjjzTSe/tLqfNeu3UxFB6y/FYpn8+Cvn6xwvhu3lgnORYmI0zQ==} - '@zag-js/popover@1.34.1': - resolution: {integrity: sha512-zIbR0weo16mxOmsjwDCjyMvYZjZjSKSx00YnRinsZw388SzFYRQoKV1eEpHsms8SD6xPIcqfGqedv3oCOBss4Q==} + '@zag-js/popover@1.35.3': + resolution: {integrity: sha512-+MIEENPsbKPxzoNuDI/C5d5ZN9uxnfZ+MBDc5C5XSgjjg9FcvMXClNq7IFM1aZi24peRXg9cMNf//lApVRT37w==} - '@zag-js/popper@1.34.1': - resolution: {integrity: sha512-e9xklP5YjfqS6sTSzezsRBdaD5ilMTQoEedAQecy16jstIAQsberctUYZVg8vRQubA9ukmv1JvaNbkVFclr13w==} + '@zag-js/popper@1.35.3': + resolution: {integrity: sha512-gpB7Xn9WtlfrUsIVbSgNQGDwgNOL/cSGt0Id3wEQKArmqVC704EWtPvXzOMMybBEdm8YW2hQrXuo+o66abI1Sg==} - '@zag-js/presence@1.34.1': - resolution: {integrity: sha512-KxbxEvZwpFAeStKFLCIc4tNZ0T9bEfdhY0f2PEfITsiu0b4s5JVu5+ClUqvhhNI1TUcn6Hah3ZvBkvQZGf9soQ==} + '@zag-js/presence@1.35.3': + resolution: {integrity: sha512-ev5E7+U9IZAGvEaflpdVLHaZl8ZaQMhGB3ypd0yKhPwXeM51obV8w3+5HjzTqHPl8TKuoHWL31YaiUBd5EuS6w==} - '@zag-js/progress@1.34.1': - resolution: {integrity: sha512-w1/wTOuxOZLt+VttcyaBef/Us2DfS3omN+1c0Cyqu61VVPAfQj1cE05K8M52H2VkSMvpTjMqW23cAfX3nfGWig==} + '@zag-js/progress@1.35.3': + resolution: {integrity: sha512-u0GxQN1AfXMAgzYOUMxKQA12DyuAP0svh2S//KvOorTSv7d5hAa8nZXi2cEv5abYsyfKJ6/bc1Z56byzW1jVZw==} - '@zag-js/qr-code@1.34.1': - resolution: {integrity: sha512-Y331dZLgEXYsM6bmRUmZi8eBbplNmlEd1yaYutyljoJ9rl/EuUtcCjLS1QoDCIFxS6egtbYBQamqCtUA0DIakw==} + '@zag-js/qr-code@1.35.3': + resolution: {integrity: sha512-t0Ehwogr49vTNtWyNdQU2tYex7uJyfAn7N/5LgD7FXw8aa+RBMWZWlqjCUvHqJ929tVMrn+LIrQnZCcwNunalA==} - '@zag-js/radio-group@1.34.1': - resolution: {integrity: sha512-dRy7Z1zE2qwyyjI68icLBkPzM+ZzL0aAklFVc7kd/ejYxZfk6SrPoMjg3u22a34J2scxHwh/LdSuQFmauj4sAA==} + '@zag-js/radio-group@1.35.3': + resolution: {integrity: sha512-kOzocjqWk3dXuRfyfsHwfw63Z99NHbc7rvVUutSsfXANXi+DFYZHuqdPUwMt+29LfaL15XTOfuGV+yUXDCgQHQ==} - '@zag-js/rating-group@1.34.1': - resolution: {integrity: sha512-ndvw9jHGYO1bYaYN4xL2z+zQimXoetPgems43YChbntOzfbSELYSXvdLG1KCll3Kti/caHgRT+yaodHcTvjN3w==} + '@zag-js/rating-group@1.35.3': + resolution: {integrity: sha512-BmhJZdbaTnd3nFWMY+nR+HF952UhWXfaXXxiBWptSLMBfAYImQTWBMrLgTHCSnVfmFATj4Gb7xQe79FQU8T5fA==} - '@zag-js/rect-utils@1.34.1': - resolution: {integrity: sha512-ms81ltfYBsabzk6tqy+kheMAUkx9IB+AUt8sATWGgqSTemBuMv/dptCJt3+WbkQjc8NveuEWmq3S6w1KJ31gaQ==} + '@zag-js/rect-utils@1.35.3': + resolution: {integrity: sha512-mt/oD3RXdyaX6ZPSd8BO13vvPBJ7QpVWieubE3O0WM3OPhU7ykDMRp/tR7cYMQrzUm04GlY9pbkmSSw2uABxlA==} - '@zag-js/remove-scroll@1.34.1': - resolution: {integrity: sha512-irnvF4cwoAidwdU4UsPQyhTivnY3V/ZBO9EW/zTJ78qm3sjkRDDZsKEVV2UstUEmvH1jcFFPp6eNoTVItsyJBg==} + '@zag-js/remove-scroll@1.35.3': + resolution: {integrity: sha512-e59z9SbEpPiw0qwNQa2cB5/h30ZCLREaHsCw1TKTANFhwg7v85k9Lq1H/G/49li1CAjmiaOU9BNGlDvbzpNETQ==} - '@zag-js/scroll-area@1.34.1': - resolution: {integrity: sha512-yP4D+j8D99kVRX9mJfPDHKS4wYVZgPs4S6qqCnVGZHTngMvrzzVtHYTzNdn+jnKHIVqYBizO3lIglAd7jQOvTw==} + '@zag-js/scroll-area@1.35.3': + resolution: {integrity: sha512-IQwdUws/AckRIHK1z/wHdHurnOeGd8h8Dmspfh3VT7NkwTnxeJ4SW9di9smuD+d25eXkJRuX5zGEDHAyx2IaPQ==} - '@zag-js/scroll-snap@1.34.1': - resolution: {integrity: sha512-pvgbJ3tjKRM1LlF14QY5riV/KT2EYGfYY4Cl5QuONqjO0ergrRd0FxDzhiwqIthgXrDZOavMucr7yqCLrjVQQA==} + '@zag-js/scroll-snap@1.35.3': + resolution: {integrity: sha512-NVa2yRm2DQnF6hTV9k7Xz7l8YCZBagZTiqSwNvWKUulKD1csjt2fpBxvUt2cK+1iQnLOey2ydhs7MMsAnXPbJA==} - '@zag-js/select@1.34.1': - resolution: {integrity: sha512-4Pc062McPgdRYwOU6v8jaqP48nBeTuSbuToHWixTVUhDkAsLDd7A8od2sKPsGHRsPOce0D259vJS5L3c0vtfig==} + '@zag-js/select@1.35.3': + resolution: {integrity: sha512-ztszGHWvlbBDE0YT5LYPH+sMd6VH1ct5pH/M9VSzIUO6C5PARkW0NwSVQ1rCQJMj4sfvSE1gC1/r7urRzqEcUQ==} - '@zag-js/signature-pad@1.34.1': - resolution: {integrity: sha512-yeYi4Tl+IgPfGA5ejbYSpHU52MBchR0S2aqT9X4kRJniCcnKLV3ZI5VOz8cYXCpYMDiWSsQnzcIIohHNHVhK2g==} + '@zag-js/signature-pad@1.35.3': + resolution: {integrity: sha512-jvtxxzAQ8fre11zWUh6HflG4Ycr5z83Wba4pONRJbUE/vNgkJQ7yJgfyUl1QTlkn8Arfg2Zwoxu9GIq80HLZWg==} - '@zag-js/slider@1.34.1': - resolution: {integrity: sha512-mzM1IhbldUdaS9aBNdAJpA2B1uF0vdIeEv5X9Fcn8xD/u+o8RMiFomunJmMDwZ8VlSnODwomopOP5UVKI9J3SQ==} + '@zag-js/slider@1.35.3': + resolution: {integrity: sha512-Th142JO4Fqla5AWhGrTW6CQicwvTw87PdVpur/WotQ7brlZIww5HipzEMh5eQJSWfwpKD4PI2bYK9V/ZE/mpXA==} - '@zag-js/solid@1.34.1': - resolution: {integrity: sha512-snZEOm5jJd6U15JaPJIQRXL+Tfb7c/xTS5rXS8/jk1GXbIEYnDN6BYWT9vqBt1jfONPiiaAdfMZG5CzAN4hlbQ==} + '@zag-js/solid@1.35.3': + resolution: {integrity: sha512-Gp6jFWwLeToD+Y0lcEwi15XIHSmJbyPhl/klxKQWWpr7+p3OAoNWwOQbxkhRU7M9hhJrYYsENfSETwG9QhMfBQ==} peerDependencies: solid-js: '>=1.1.3' - '@zag-js/splitter@1.34.1': - resolution: {integrity: sha512-Gg3KC1Moo+67/96Mo/EIz/0/I1Ib5Ui5uC9mdnAwzVdKjanEHRHSV6uCZITA4wlFKA7lQKbDwjhRo0kqsw8egw==} + '@zag-js/splitter@1.35.3': + resolution: {integrity: sha512-IsIbRwzjr5amGANEDsZDSToaSn8wHUWvS2l0XHmf3BiiguVApaZgQTlfqthVQC9hBHMOaGIXIW1CFUOrQYkvUQ==} - '@zag-js/steps@1.34.1': - resolution: {integrity: sha512-3MlrmND0MLrMXh1oXkDQkn3V4XuF5Li93wVVT7pvCT+VxnXgXUWGMT82IM2Edj/MA6DTbUqZtOEfFkcFw3aySw==} + '@zag-js/steps@1.35.3': + resolution: {integrity: sha512-TYIrqV+v9/ULhvrTRBtQFFvJQPPTWOmjFXxlIxDwozek5R4dCIyeUYt1/ChJEc2mNETocbfDVSTxRO1dwCFpwQ==} - '@zag-js/store@1.34.1': - resolution: {integrity: sha512-127OWtrFKuS9HsbZITancVrydA9CpDHxyS5V+gDA7bnsNdw8kKx1H82oMh8Ok6hkDXvilhEB+g+UIOVeQD7RwQ==} + '@zag-js/store@1.35.3': + resolution: {integrity: sha512-7kEV4T/20DU36UIfVMzuDlLhWSSEy/vabmpiB700tcdD9BBBODTiSg3ZeljW17dQbvE545vZOFEjVf/cQ5LVGA==} - '@zag-js/switch@1.34.1': - resolution: {integrity: sha512-yOibKwJ+/WZBxVBpiK7mFEFjz88rLCzAhYEr5Om52fsWPc7BbxZKBZw058e0yx5mEBXJUTXNebgp1fkmth7U9g==} + '@zag-js/switch@1.35.3': + resolution: {integrity: sha512-EP/2cJ46sd+6C5x5+89jn/9NOpM05CRESYB4RMhOnTe/WFtcS4IpiYtVHFhikdXkvJoibm67O2EHep2Pm/Xj4w==} - '@zag-js/tabs@1.34.1': - resolution: {integrity: sha512-5qAz3jyawmfwpIjd5rNe10yae3YdZSaUu9bNk8ZzJXkXu+Sf69BO6M/k32+ZtAS1i+cku7ZXluza95CxA/Oshg==} + '@zag-js/tabs@1.35.3': + resolution: {integrity: sha512-lZKlDmxE25miCikj9QZCCnL02SVV2K14KZy5bn7+XDgrWlfSNTpNTj8r5E3zGlSgio5pkTGou57ASqS7WaPDWg==} - '@zag-js/tags-input@1.34.1': - resolution: {integrity: sha512-6kgb9Ww+sgTi5kV0eoPE+uV42R2PCj4plUffNK+z4j3+km2T2jvp2/gvB6JKk0aV2NCzVzQ3lyk+Oy62sH6lyg==} + '@zag-js/tags-input@1.35.3': + resolution: {integrity: sha512-HqyoQ3DZFhByOGnDShFfxi6u0bIf7aSVTlwmAvcL+b2ZhyU6/wIMGc4WJE7BMx1NYWM/jNLHedvGExAI8R0kXQ==} - '@zag-js/timer@1.34.1': - resolution: {integrity: sha512-awQXcKCHAKS+XBJCV+TpZhSI+zRmQCtYUqVjXMv6Mj1jmB7PS/I7gAt1D7wGmMKtkBZ4vbRxe2p2qO3StlpxRA==} + '@zag-js/timer@1.35.3': + resolution: {integrity: sha512-edmgitbRgsq+msxvVB4wc17Q5d5k63zMWaLJnWjUdDGAgEtM6/HNxwGb3riv46S2U3RgYxaaHTNZ/M7EE5mvYw==} - '@zag-js/toast@1.34.1': - resolution: {integrity: sha512-Ad1QQ2aSbJUO+wDOLRAONrhhTsAm6YHwSxKnp4wMOvTw6UcBgRr2MeebrvYx/kwHa4UK/Y9L5rxoyRoTrk2mGg==} + '@zag-js/toast@1.35.3': + resolution: {integrity: sha512-whlR791GHdnMD21nNPsl2Dbql8+qu1wBZl75QzwYrjR8FlKjp8bhr3gXKzQEddcBXe9GPEFGvUs4iCyXsuTbpg==} - '@zag-js/toggle-group@1.34.1': - resolution: {integrity: sha512-QDgABKDhz8EShqZoIK4NR0Ca2qDpOYAaClHlq4loyWqBhKSt1Xtok7GaD4iwer+U/5WpkzJqIlwV2nC09dsRpA==} + '@zag-js/toggle-group@1.35.3': + resolution: {integrity: sha512-Gn6JHzkQ4tlttjZcE0ZjIdxYkFeVp9VHrcMVizjJTkGZRmQ+kPZ5G/wOsZhIrvLX3Dw6Y0NkuBcP+jDHz/o3TA==} - '@zag-js/toggle@1.34.1': - resolution: {integrity: sha512-zwKX3+VMHg5U6/b0pzHIto7TQTWVHgKpoenzSApGnoHcJMgJRLkV738uBgmiP6wGzgAX9RmUIf1jjzOdLFndaA==} + '@zag-js/toggle@1.35.3': + resolution: {integrity: sha512-aFfHKuR4sKzglhkmWLA+0RTNPs9dfeqwtc96qljawGYfAYWJXkEPYK9dFfVa+arZ7L84xBi24QSLiTg7LGSFLw==} - '@zag-js/tooltip@1.34.1': - resolution: {integrity: sha512-3IsEixpaOqZ6ZRSqEabZOp97yHx2uQFFA6Ge9FbJC+gK7clqwoqPJrg79PkBYTBvi0H7JoyRPhImWRSQES2YSA==} + '@zag-js/tooltip@1.35.3': + resolution: {integrity: sha512-/pImDGYl79MfLdvEphj3rSvNdj2tLW4GwGEncgdLM/GKwQiEUjfi/9EJOfLYP23M4lOOnoW7orehJ9xeaXOAkA==} - '@zag-js/tour@1.34.1': - resolution: {integrity: sha512-V1uw8VulpQJ6HG6OR0BSQHphnkEJLMPV9EyN2nm+d7JWKiikxLf2zlopw/CKwaBbg4JNlqo2q1K0lhzv2wBeBQ==} + '@zag-js/tour@1.35.3': + resolution: {integrity: sha512-DI2aCXmZaE9KcPZDs9itc2BO7ixLApJ/yVRfM69pXwVOrucdSeDDNPFkfbhj5XwB+9VjjZEkqWFHKntRIyPl5g==} - '@zag-js/tree-view@1.34.1': - resolution: {integrity: sha512-ExoUFplWtTyVEGITgAFR2kIaJax/zznPuWVBiWL+Avf7qn0+CCs1b1JOPeGQtqUXk9Fso67uw9BwNQFOxbQelA==} + '@zag-js/tree-view@1.35.3': + resolution: {integrity: sha512-DbHaLxSNa1goE3o3IsXxEdzp8P5dvmkk1rVWgNUUIhpA+44idEjSSNXJkHPl18Mk5blqSMVjK1EX91oqai01Vw==} - '@zag-js/types@1.34.1': - resolution: {integrity: sha512-DAg2cD5g0PvYGIC08GWa71aSyO2IEGlQCIIdOtmUSN2PdLyRi3IllNHlnDYFCkTGbb0GUunCro8FLvE9Aj2BOA==} + '@zag-js/types@1.35.3': + resolution: {integrity: sha512-Fnm3AMs1lfb55hlkip/eJeWHOjFB3gSi1JkZlkkdltG2l7y/zsHkumPSe6jIKy+DRRIFKRCyXVTatbPN27bO3w==} - '@zag-js/utils@1.34.1': - resolution: {integrity: sha512-XgNTbcxPgNkPEuH/s/WUSU3M1mnO7453P53Wvym3dte+zPmqjwf5VT1FmEw8t6YQDBiBkIEKpUnNwR2x/pmZgg==} + '@zag-js/utils@1.35.3': + resolution: {integrity: sha512-LHcC+9y6TFhDsIz9I3koYxONl2JFfx5yQDzc6ZEQO2cqzXedRcN0R9IPqNGCX7JuhGt14ctDkVCm1JWGP2J6Wg==} abbrev@3.0.1: resolution: {integrity: sha512-AO2ac6pjRB3SJmGJo+v5/aK6Omggp6fsLrs6wN9bd35ulu4cCwaAU9+7ZhXjeqHVkaHThLuzH0nZr0YpCDhygg==} @@ -3925,8 +4064,12 @@ packages: resolution: {integrity: sha512-ooviqdwwgfIfNmDwo94wlshcdzfO64XV0Cg6oDsDYBJfITDz1EngD2z7DkbvCWn+XIMsIqW27sEVF6qcpJrRcg==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - axios@1.13.5: - resolution: {integrity: sha512-cz4ur7Vb0xS4/KUN0tPWe44eqxrIu31me+fbang3ijiNscE129POzipJJA6zniq2C/Z6sJCjMimjS8Lc/GAs8Q==} + aws-ssl-profiles@1.1.2: + resolution: {integrity: sha512-NZKeq9AfyQvEeNlN0zSYAaWrmBffJh3IELMZfRpJVWgrpEbtEpnjvzqBPf+mxoI287JohRDoa+/nsfqqiZmF6g==} + engines: {node: '>= 6.0.0'} + + axios@1.13.6: + resolution: {integrity: sha512-ChTCHMouEe2kn713WHbQGcuYrr6fXTBiu460OTwWrWob16g1bXn4vtz07Ope7ewMozJAnEquLk5lWQWtBig9DQ==} axobject-query@4.1.0: resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==} @@ -3986,8 +4129,8 @@ packages: bare-buffer: optional: true - bare-os@3.7.0: - resolution: {integrity: sha512-64Rcwj8qlnTZU8Ps6JJEdSmxBEUGgI7g8l+lMtsJLl4IsfTcHMTfJ188u2iGV6P6YPRZrtv72B2kjn+hp+Yv3g==} + bare-os@3.7.1: + resolution: {integrity: sha512-ebvMaS5BgZKmJlvuWh14dg9rbUI84QeV3WlWn6Ph6lFI8jJoh7ADtVTyD2c93euwbe+zgi0DVrl4YmqXeM9aIA==} engines: {bare: '>=1.14.0'} bare-path@3.0.0: @@ -4019,8 +4162,8 @@ packages: resolution: {integrity: sha512-VoMINM2rqJwJgfdHq6RiUudKt2BV+FY5ZFezP/ypmwayk68+NzzAQy4XXLlqsGD4MCzq3DrmNFD/uUmBJuGoXw==} engines: {node: '>=10.0.0'} - better-auth@1.4.19: - resolution: {integrity: sha512-3RlZJcA0+NH25wYD85vpIGwW9oSTuEmLIaGbT8zg41w/Pa2hVWHKedjoUHHJtnzkBXzDb+CShkLnSw7IThDdqQ==} + better-auth@1.5.4: + resolution: {integrity: sha512-ReykcEKx6Kp9560jG1wtlDBnftA7L7xb3ZZdDWm5yGXKKe2pUf+oBjH0fqekrkRII0m4XBVQbQ0mOrFv+3FdYg==} peerDependencies: '@lynx-js/react': '*' '@prisma/client': ^5.0.0 || ^6.0.0 || ^7.0.0 @@ -4081,8 +4224,8 @@ packages: vue: optional: true - better-call@1.1.8: - resolution: {integrity: sha512-XMQ2rs6FNXasGNfMjzbyroSwKwYbZ/T3IxruSS6U2MJRsSYh3wYtG3o6H00ZlKZ/C/UPOAD97tqgQJNsxyeTXw==} + better-call@1.3.2: + resolution: {integrity: sha512-4cZIfrerDsNTn3cm+MhLbUePN0gdwkhSXEuG7r/zuQ8c/H7iU0/jSK5TD3FW7U0MgKHce/8jGpPYNO4Ve+4NBw==} peerDependencies: zod: ^4.0.0 peerDependenciesMeta: @@ -4131,8 +4274,8 @@ packages: brace-expansion@2.0.2: resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==} - brace-expansion@5.0.3: - resolution: {integrity: sha512-fy6KJm2RawA5RcHkLa1z/ScpBeA762UF9KmZQxwIbDtRJrgLzM10depAiEQ+CXYcoiqW1/m96OAAoke2nE9EeA==} + brace-expansion@5.0.4: + resolution: {integrity: sha512-h+DEnpVvxmfVefa4jFbCf5HdH5YMDXRsmKflpf1pILZWRFlTbJpxeU55nJl4Smt5HQaGzg1o6RHFPJaOqnmBDg==} engines: {node: 18 || 20 || >=22} braces@3.0.3: @@ -4144,6 +4287,10 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true + bson@7.2.0: + resolution: {integrity: sha512-YCEo7KjMlbNlyHhz7zAZNDpIpQbd+wOEHJYezv0nMYTn4x31eIUM2yomNNubclAt63dObUzKHWsBLJ9QcZNSnQ==} + engines: {node: '>=20.19.0'} + btoa@1.2.1: resolution: {integrity: sha512-SB4/MIGlsiVkMcHmT+pSmIPoNDoHg+7cMzmt3Uxt628MTz2487DKSqK/fuhFBrkuqrYv5UCEnACpF4dTFNKc/g==} engines: {node: '>= 0.4.0'} @@ -4181,6 +4328,14 @@ packages: resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} engines: {node: '>= 0.8'} + c12@3.1.0: + resolution: {integrity: sha512-uWoS8OU1MEIsOv8p/5a82c3H31LsWVR5qiyXVfBNOzfffjUWtPnhAb4BYI2uG2HfGmZmFjCtui5XNWaps+iFuw==} + peerDependencies: + magicast: ^0.3.5 + peerDependenciesMeta: + magicast: + optional: true + c12@3.3.3: resolution: {integrity: sha512-750hTRvgBy5kcMNPdh95Qo+XUBeGo8C7nsKSmedDmaQI+E0r82DwHeM6vBewDe4rGFbnxoa4V9pw+sPh5+Iz8Q==} peerDependencies: @@ -4209,8 +4364,8 @@ packages: resolution: {integrity: sha512-8WB3Jcas3swSvjIeA2yvCJ+Miyz5l1ZmB6HFb9R1317dt9LCQoswg/BGrmAmkWVEszSrrg4RwmO46qIm2OEnSA==} engines: {node: '>=16'} - caniuse-lite@1.0.30001774: - resolution: {integrity: sha512-DDdwPGz99nmIEv216hKSgLD+D4ikHQHjBC/seF98N9CPqRX4M5mSxT9eTV6oyisnJcuzxtZy4n17yKKQYmYQOA==} + caniuse-lite@1.0.30001777: + resolution: {integrity: sha512-tmN+fJxroPndC74efCdp12j+0rk0RHwV5Jwa1zWaFVyw2ZxAuPeG8ZgWC3Wz7uSjT3qMRQ5XHZ4COgQmsCMJAQ==} ccount@2.0.1: resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} @@ -4253,8 +4408,11 @@ packages: peerDependencies: chevrotain: ^11.0.0 - chevrotain@11.1.1: - resolution: {integrity: sha512-f0yv5CPKaFxfsPTBzX7vGuim4oIC1/gcS7LUGdBSwl2dU6+FON6LVUksdOo1qJjoUvXNn45urgh8C+0a24pACQ==} + chevrotain@10.5.0: + resolution: {integrity: sha512-Pkv5rBY3+CsHOYfV5g/Vs5JY9WTHHDEKOlohI2XeygaZhUeqhAlldZ8Hz9cRmxu709bvS08YzxHdTPHhffc13A==} + + chevrotain@11.1.2: + resolution: {integrity: sha512-opLQzEVriiH1uUQ4Kctsd49bRoFDXGGSC4GUqj7pGyxM3RehRhvTlZJc1FL/Flew2p5uwxa1tUDWKzI4wNM8pg==} chokidar@4.0.3: resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} @@ -4308,8 +4466,8 @@ packages: resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==} engines: {node: '>=6'} - cli-truncate@5.1.1: - resolution: {integrity: sha512-SroPvNHxUnk+vIW/dOSfNqdy1sPEFkrTk6TUtqLCnBlo3N7TNYYkzzN7uSD6+jVjrdO4+p8nH7JzH6cIvUem6A==} + cli-truncate@5.2.0: + resolution: {integrity: sha512-xRwvIOMGrfOAnM1JYtqQImuaNtDEv9v6oIYAs4LIHwTiKee8uwvIi363igssOC0O5U04i4AlENs79LQLu9tEMw==} engines: {node: '>=20'} clipboardy@4.0.0: @@ -4451,8 +4609,8 @@ packages: cose-base@2.2.0: resolution: {integrity: sha512-AzlgcsCbUMymkADOJtQm3wO9S3ltPfYOFD5033keQn9NJzIbtnZj+UdBJe7DYml/8TdbtHJW3j58SOnKhWY/5g==} - cosmiconfig@9.0.0: - resolution: {integrity: sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==} + cosmiconfig@9.0.1: + resolution: {integrity: sha512-hr4ihw+DBqcvrsEDioRO31Z17x71pUYoNe/4h6Z0wB72p7MU7/9gH8Q3s12NFhHPfYBBOV3qyfUxmr/Yn3shnQ==} engines: {node: '>=14'} peerDependencies: typescript: '>=4.9.5' @@ -4460,8 +4618,8 @@ packages: typescript: optional: true - countup.js@2.9.0: - resolution: {integrity: sha512-llqrvyXztRFPp6+i8jx25phHWcVWhrHO4Nlt0uAOSKHB8778zzQswa4MU3qKBvkXfJKftRYFJuVHez67lyKdHg==} + countup.js@2.10.0: + resolution: {integrity: sha512-QQpZx7oYxsR+OeITlZe46fY/OQjV11oBqjY8wgIXzLU2jIz8GzOrbMhqKLysGY8bWI3T1ZNrYkwGzKb4JNgyzg==} crc-32@1.2.2: resolution: {integrity: sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==} @@ -4486,8 +4644,8 @@ packages: css-select@5.2.2: resolution: {integrity: sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==} - css-tree@3.1.0: - resolution: {integrity: sha512-0eW44TGN5SQXU1mWSkKwFstI/22X2bG1nYzZTYMAWjylYURhse752YgbE4Cx46AC+bAvI+/dYTPRk1LqSUnu6w==} + css-tree@3.2.1: + resolution: {integrity: sha512-X7sjQzceUhu1u7Y/ylrRZFU2FS6LRiFVp6rKLPg23y3x3c3DOKAwuXGDp+PAGjh6CSnCjYeAul8pcT8bAl+lSA==} engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0} css-what@6.2.2: @@ -4733,6 +4891,10 @@ packages: deep-is@0.1.4: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + deepmerge-ts@7.1.5: + resolution: {integrity: sha512-HOJkrhaYsweh+W+e74Yn7YStZOilkoPb6fycpwNLKzSPtruFs48nYis0zy5yJz1+ktUhHxoRDJ27RQAWLIJVJw==} + engines: {node: '>=16.0.0'} + deepmerge@4.3.1: resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} engines: {node: '>=0.10.0'} @@ -4796,8 +4958,8 @@ packages: devlop@1.1.0: resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==} - devtools-protocol@0.0.1566079: - resolution: {integrity: sha512-MJfAEA1UfVhSs7fbSQOG4czavUp1ajfg6prlAN0+cmfa2zNjaIbvq8VneP7do1WAQQIvgNJWSMeP6UyI90gIlQ==} + devtools-protocol@0.0.1581282: + resolution: {integrity: sha512-nv7iKtNZQshSW2hKzYNr46nM/Cfh5SEvE2oV0/SEGgc9XupIY5ggf84Cz8eJIkBce7S3bmTAauFD6aysMpnqsQ==} dexie@4.3.0: resolution: {integrity: sha512-5EeoQpJvMKHe6zWt/FSIIuRa3CWlZeIl6zKXt+Lz7BU6RoRRLgX9dZEynRfXrkLcldKYCBiz7xekTEylnie1Ug==} @@ -4822,8 +4984,9 @@ packages: resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==} engines: {node: '>= 4'} - dompurify@3.3.1: - resolution: {integrity: sha512-qkdCKzLNtrgPFP1Vo+98FRzJnBRGe4ffyCea9IwHB1fyxPOeNTHpLKYGd4Uk9xvNoH0ZoOjwZxNptyMwqrId1Q==} + dompurify@3.3.2: + resolution: {integrity: sha512-6obghkliLdmKa56xdbLOpUZ43pAR6xFy1uOrxBaIDjT+yaRuuybLjGS9eVBoSR/UPU5fq3OXClEHLJNGvbxKpQ==} + engines: {node: '>=20'} domutils@3.2.2: resolution: {integrity: sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==} @@ -4949,13 +5112,16 @@ packages: ee-first@1.1.1: resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} + effect@3.18.4: + resolution: {integrity: sha512-b1LXQJLe9D11wfnOKAk3PKxuqYshQ0Heez+y5pnkd3jLj1yx9QhM72zZ9uUrOQyNvrs2GZZd/3maL0ZV18YuDA==} + ejs@3.1.10: resolution: {integrity: sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==} engines: {node: '>=0.10.0'} hasBin: true - electron-to-chromium@1.5.302: - resolution: {integrity: sha512-sM6HAN2LyK82IyPBpznDRqlTQAtuSaO+ShzFiWTvoMJLHyZ+Y39r8VMfHzwbU8MVBzQ4Wdn85+wlZl2TLGIlwg==} + electron-to-chromium@1.5.307: + resolution: {integrity: sha512-5z3uFKBWjiNR44nFcYdkcXjKMbg5KXNdciu7mhTPo9tB7NbqSNP2sSnGR+fqknZSCwKkBN+oxiiajWs4dT6ORg==} emoji-regex-xs@1.0.0: resolution: {integrity: sha512-LRlerrMYoIDrT6jgpeZ2YYl/L8EulRTt5hQcYjy5AInh7HWXKimpqx68aknBFpGL2+/IcogTcaydJEgaTmOpDg==} @@ -4969,6 +5135,10 @@ packages: emoji-regex@9.2.2: resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + empathic@2.0.0: + resolution: {integrity: sha512-i6UzDscO/XfAcNYD75CfICkmfLedpyPDdozrLMmQc5ORaQcdMoc21OnlEylMIqI7U8eniKrPMxxtj8k0vhmJhA==} + engines: {node: '>=14'} + encodeurl@2.0.0: resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==} engines: {node: '>= 0.8'} @@ -4976,8 +5146,8 @@ packages: end-of-stream@1.4.5: resolution: {integrity: sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==} - enhanced-resolve@5.19.0: - resolution: {integrity: sha512-phv3E1Xl4tQOShqSte26C7Fl84EwUdZsyOuSSk9qtAGyyQs2s3jJzComh+Abf4g187lUUAvH+H26omrqia2aGg==} + enhanced-resolve@5.20.0: + resolution: {integrity: sha512-/ce7+jQ1PQ6rVXwe+jKEg5hW5ciicHwIQUagZkp6IufBoY3YDgdTTY1azVs0qoRgVmvsNB+rbjLJxDAeHHtwsQ==} engines: {node: '>=10.13.0'} entities@4.5.0: @@ -5032,8 +5202,8 @@ packages: resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} engines: {node: '>= 0.4'} - es-toolkit@1.44.0: - resolution: {integrity: sha512-6penXeZalaV88MM3cGkFZZfOoLGWshWWfdy0tWw/RlVVyhvMaWSBTOvXNeiW3e5FwdS5ePW0LGEu17zT139ktg==} + es-toolkit@1.45.1: + resolution: {integrity: sha512-/jhoOj/Fx+A+IIyDNOvO3TItGmlMKhtX8ISAHKE90c4b/k1tqaqEZ+uUqfpU8DMnW5cgNJv606zS55jGvza0Xw==} esbuild-register@3.6.0: resolution: {integrity: sha512-H2/S7Pm8a9CL1uhp9OvjwrBh5Pvx0H8qVOxNu8Wed9Y7qv56MPtq+GGM8RJpq6glYJn9Wspr8uw7l55uyinNeg==} @@ -5132,8 +5302,8 @@ packages: resolution: {integrity: sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} - eslint@9.39.3: - resolution: {integrity: sha512-VmQ+sifHUbI/IcSopBCF/HO3YiHQx/AVd3UVyYL6weuwW+HvON9VYn5l6Zl1WZzPWXPNZrSQpxwkkZ/VuvJZzg==} + eslint@9.39.4: + resolution: {integrity: sha512-XoMjdBOwe/esVgEvLmNsD3IRHkm7fbKIUGvrleloJXUZgDHig2IPWNniv+GwjyJXzuNqVjlr5+4yVUZjycJwfQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} hasBin: true peerDependencies: @@ -5221,8 +5391,8 @@ packages: resolution: {integrity: sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==} engines: {node: '>=12.0.0'} - express-rate-limit@8.2.1: - resolution: {integrity: sha512-PCZEIEIxqwhzw4KF0n7QF4QqruVTcF73O5kFKUnGOyjbCCgizBBiFaYpd/fnBLUMPw/BWw9OsiN7GgrNYr7j6g==} + express-rate-limit@8.3.0: + resolution: {integrity: sha512-KJzBawY6fB9FiZGdE/0aftepZ91YlaGIrV8vgblRM3J8X+dHx/aiowJWwkx6LIGyuqGiANsjSwwrbb8mifOJ4Q==} engines: {node: '>= 16'} peerDependencies: express: '>= 4.11' @@ -5243,6 +5413,10 @@ packages: resolution: {integrity: sha512-CGnyrvbhPlWYMngksqrSSUT1BAVP49dZocrHuK0SvtR0D5TMs5wP0o3j7jexDJW01KSadjBp1M/71o/KR3nD1w==} engines: {node: '>=18'} + fast-check@3.23.2: + resolution: {integrity: sha512-h5+1OzzfCC3Ef7VbtKdcv7zsstUQwUDlYpUTvjeUsJAssPgLn7QzbboPtL5ro04Mq0rPOsMzl7q5hIbRs2wD1A==} + engines: {node: '>=8.0.0'} + fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} @@ -5313,8 +5487,8 @@ packages: flatbuffers@1.12.0: resolution: {integrity: sha512-c7CZADjRcl6j0PlvFy0ZqXQ67qSEZfrVPynmnL+2zPc+NtMvrF8Y0QceMo7QqnSPc7+uWjUIAbvCQ5WIKlMVdQ==} - flatted@3.3.3: - resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==} + flatted@3.3.4: + resolution: {integrity: sha512-3+mMldrTAPdta5kjX2G2J7iX4zxtnwpdA8Tr2ZSjkyPSanvbZAcy6flmtnXbEybHrDcU9641lxrMfFuUxVz9vA==} focus-trap@7.8.0: resolution: {integrity: sha512-/yNdlIkpWbM0ptxno3ONTuf+2g318kh2ez3KSeZN5dZ8YC6AAmgeWz+GasYYiBJPFaYcSAPeu4GfhUaChzIJXA==} @@ -5370,6 +5544,9 @@ packages: engines: {node: '>= 18.0.0'} hasBin: true + generate-function@2.3.1: + resolution: {integrity: sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==} + gensync@1.0.0-beta.2: resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} engines: {node: '>=6.9.0'} @@ -5458,6 +5635,12 @@ packages: graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + grammex@3.1.12: + resolution: {integrity: sha512-6ufJOsSA7LcQehIJNCO7HIBykfM7DXQual0Ny780/DEcJIpBlHRvcqEBWGPYd7hrXL2GJ3oJI1MIhaXjWmLQOQ==} + + graphmatch@1.1.1: + resolution: {integrity: sha512-5ykVn/EXM1hF0XCaWh05VbYvEiOL2lY1kBxZtaYsyvjp7cmWOU1XsAdfQBwClraEofXDT197lFbXOEVMHpvQOg==} + guid-typescript@1.0.9: resolution: {integrity: sha512-Y8T4vYhEfwJOTbouREvG+3XDsjr8E3kIr7uf+JZ0BYloFsttiHU0WfvANVsR7TxNUJa/WpCnw/Ino/p+DeBhBQ==} @@ -5504,8 +5687,12 @@ packages: resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} hasBin: true - hono@4.12.3: - resolution: {integrity: sha512-SFsVSjp8sj5UumXOOFlkZOG6XS9SJDKw0TbwFeV+AJ8xlST8kxK5Z/5EYa111UY8732lK2S/xB653ceuaoGwpg==} + hono@4.11.4: + resolution: {integrity: sha512-U7tt8JsyrxSRKspfhtLET79pU8K+tInj5QZXs1jSugO1Vq5dFj3kmZsRldo29mTBfcjDRVRXrEZ6LS63Cog9ZA==} + engines: {node: '>=16.9.0'} + + hono@4.12.5: + resolution: {integrity: sha512-3qq+FUBtlTHhtYxbxheZgY8NIFnkkC/MR8u5TTsr7YZ3wixryQ3cCwn3iZbg8p8B88iDBBAYSfZDS75t8MN7Vg==} engines: {node: '>=16.9.0'} hookable@5.5.3: @@ -5544,6 +5731,9 @@ packages: resolution: {integrity: sha512-S9wWkJ/VSY9/k4qcjG318bqJNruzE4HySUhFYknwmu6LBP97KLLfwNf+n4V1BHurvFNkSKLFnK/RsuUnRTf9Vw==} engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'} + http-status-codes@2.3.0: + resolution: {integrity: sha512-RJ8XvFvpPM/Dmc5SV+dC4y5PCeOhT3x1Hq0NU3rjGeg5a/CqlhZ7uudknPwZFz4aeAXDcbAyaeP7GAo9lvngtA==} + https-proxy-agent@7.0.6: resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==} engines: {node: '>= 14'} @@ -5630,14 +5820,10 @@ packages: resolution: {integrity: sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==} engines: {node: '>=12'} - ioredis@5.9.3: - resolution: {integrity: sha512-VI5tMCdeoxZWU5vjHWsiE/Su76JGhBvWF1MJnV9ZtGltHk9BmD48oDq8Tj8haZ85aceXZMxLNDQZRVo5QKNgXA==} + ioredis@5.10.0: + resolution: {integrity: sha512-HVBe9OFuqs+Z6n64q09PQvP1/R4Bm+30PAyyD4wIEqssh3v9L21QjCVk4kRLucMBcDokJTcLjsGeVRlq/nH6DA==} engines: {node: '>=12.22.0'} - ip-address@10.0.1: - resolution: {integrity: sha512-NWv9YLW4PoW2B7xtzaS3NCot75m6nK7Icdv0o3lfMceJVRfSoQwqD4wEH5rLwoKJwUiZ/rfpiVBhnaF0FK4HoA==} - engines: {node: '>= 12'} - ip-address@10.1.0: resolution: {integrity: sha512-XXADHxXmvT9+CRxhXg56LJovE+bmWnEWB78LB83VZTprKTmaC5QfruXocxzTZ2Kl0DNwKuBdlIhjL8LeY8Sf8Q==} engines: {node: '>= 12'} @@ -5720,6 +5906,9 @@ packages: is-promise@4.0.0: resolution: {integrity: sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==} + is-property@1.0.2: + resolution: {integrity: sha512-Ks/IoX00TtClbGQr4TWXemAnktAQvYB7HzcCxDGqEZU6oCmb2INHuOoKxbtR+HFkmYWBKv/dOZtGRiAjDhj92g==} + is-reference@1.2.1: resolution: {integrity: sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==} @@ -5783,8 +5972,8 @@ packages: resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==} hasBin: true - jose@6.1.3: - resolution: {integrity: sha512-0TpaTfihd4QMNwrz/ob2Bp7X04yuxJkjRGi4aKmOqwhov54i6u79oCv7T+C7lo70MKH6BesI3vscD1yb/yzKXQ==} + jose@6.2.0: + resolution: {integrity: sha512-xsfE1TcSCbUdo6U07tR0mvhg0flGxU8tPLbF03mirl2ukGQENhUg4ubGYQnhVH0b5stLlPM+WOqDkEl1R1y5sQ==} js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} @@ -5837,8 +6026,8 @@ packages: resolution: {integrity: sha512-eQQBjBnsVtGacsG9uJNB8qOr3yA8rga4wAaGG1qRcBzSIvfhERLrWxMAM1hp5fcS6Abo8M4+bUBTekYR0qTPQw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - katex@0.16.33: - resolution: {integrity: sha512-q3N5u+1sY9Bu7T4nlXoiRBXWfwSefNGoKeOwekV+gw0cAXQlz2Ww6BLcmBxVDeXBMUDQv6fK5bcNaJLxob3ZQA==} + katex@0.16.37: + resolution: {integrity: sha512-TIGjO2cCGYono+uUzgkE7RFF329mLLWGuHUlSr6cwIVj9O8f0VQZ783rsanmJpFUo32vvtj7XT04NGRPh+SZFg==} hasBin: true kebab-case@1.0.2: @@ -5964,6 +6153,10 @@ packages: resolution: {integrity: sha512-l51N2r93WmGUye3WuFoN5k10zyvrVs0qfKBhyC5ogUQ6Ew6JUSswh78mbSO+IU3nTWsyOArqPCcShdQSadghBQ==} engines: {node: '>= 12.0.0'} + lilconfig@2.1.0: + resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} + engines: {node: '>=10'} + lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} @@ -6004,12 +6197,18 @@ packages: lodash.merge@4.6.2: resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + lodash@4.17.21: + resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + lodash@4.17.23: resolution: {integrity: sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==} long@4.0.0: resolution: {integrity: sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==} + long@5.3.2: + resolution: {integrity: sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==} + loupe@3.2.1: resolution: {integrity: sha512-CdzqowRJCeLU72bHvWqwRBBlLcMEtIvGrlvef74kMnV2AolS9Y8xUv1I0U/MNAWMhBlKIoyuEgoJ0t/bbwHbLQ==} @@ -6027,6 +6226,10 @@ packages: resolution: {integrity: sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==} engines: {node: '>=12'} + lru.min@1.1.4: + resolution: {integrity: sha512-DqC6n3QQ77zdFpCMASA1a3Jlb64Hv2N2DciFGkO/4L9+q/IpIAuRlKOvCXabtRW6cQf8usbmM6BE/TOPysCdIA==} + engines: {bun: '>=1.0.0', deno: '>=1.30.0', node: '>=8.0.0'} + lz-string@1.5.0: resolution: {integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==} hasBin: true @@ -6055,13 +6258,16 @@ packages: mdast-util-to-hast@13.2.1: resolution: {integrity: sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA==} - mdn-data@2.12.2: - resolution: {integrity: sha512-IEn+pegP1aManZuckezWCO+XZQDplx1366JoVhTpMpBB1sPey/SbveZQUosKiKiGYjg1wH4pMlNgXbCiYgihQA==} + mdn-data@2.27.1: + resolution: {integrity: sha512-9Yubnt3e8A0OKwxYSXyhLymGW4sCufcLG6VdiDdUGVkPhpqLxlvP5vl1983gQjJl3tqbrM731mjaZaP68AgosQ==} media-typer@1.1.0: resolution: {integrity: sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==} engines: {node: '>= 0.8'} + memory-pager@1.5.0: + resolution: {integrity: sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==} + merge-anything@5.1.7: resolution: {integrity: sha512-eRtbOb1N5iyH0tkQDAoQ4Ipsp/5qSR79Dzrz8hEPxRX10RWWR/iQXdoKmBSRCThY1Fh5EhISDtpSc93fpxUniQ==} engines: {node: '>=12.13'} @@ -6151,8 +6357,8 @@ packages: engines: {node: '>=18.0.0'} hasBin: true - miniflare@4.20260305.0: - resolution: {integrity: sha512-jVhtKJtiwaZa3rI+WgoLvSJmEazDsoUmAPYRUmEe2VO6VSbvkhbnDRm+dsPbYRatgNIExwrpqG1rv96jHiSb0w==} + miniflare@4.20260301.1: + resolution: {integrity: sha512-fqkHx0QMKswRH9uqQQQOU/RoaS3Wjckxy3CUX3YGJr0ZIMu7ObvI+NovdYi6RIsSPthNtq+3TPmRNxjeRiasog==} engines: {node: '>=18.0.0'} hasBin: true @@ -6171,8 +6377,8 @@ packages: resolution: {integrity: sha512-7o1wEA2RyMP7Iu7GNba9vc0RWWGACJOCZBJX2GJWip0ikV+wcOsgVuY9uE8CPiyQhkGFSlhuSkZPavN7u1c2Fw==} engines: {node: '>=10'} - minimatch@9.0.8: - resolution: {integrity: sha512-reYkDYtj/b19TeqbNZCV4q9t+Yxylf/rYBsLb42SXJatTv4/ylq5lEiAmhA/IToxO7NI2UzNMghHoHuaqDkAjw==} + minimatch@9.0.9: + resolution: {integrity: sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==} engines: {node: '>=16 || 14 >=14.17'} minimist@1.2.8: @@ -6199,8 +6405,39 @@ packages: resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} hasBin: true - mlly@1.8.0: - resolution: {integrity: sha512-l8D9ODSRWLe2KHJSifWGwBqpTZXIXTeo8mlKjY+E2HAakaTeNpqAyBZ8GSqLzHgw4XmHmC8whvpjJNMbFZN7/g==} + mlly@1.8.1: + resolution: {integrity: sha512-SnL6sNutTwRWWR/vcmCYHSADjiEesp5TGQQ0pXyLhW5IoeibRlF/CbSLailbB3CNqJUk9cVJ9dUDnbD7GrcHBQ==} + + mongodb-connection-string-url@7.0.1: + resolution: {integrity: sha512-h0AZ9A7IDVwwHyMxmdMXKy+9oNlF0zFoahHiX3vQ8e3KFcSP3VmsmfvtRSuLPxmyv2vjIDxqty8smTgie/SNRQ==} + engines: {node: '>=20.19.0'} + + mongodb@7.1.0: + resolution: {integrity: sha512-kMfnKunbolQYwCIyrkxNJFB4Ypy91pYqua5NargS/f8ODNSJxT03ZU3n1JqL4mCzbSih8tvmMEMLpKTT7x5gCg==} + engines: {node: '>=20.19.0'} + peerDependencies: + '@aws-sdk/credential-providers': ^3.806.0 + '@mongodb-js/zstd': ^7.0.0 + gcp-metadata: ^7.0.1 + kerberos: ^7.0.0 + mongodb-client-encryption: '>=7.0.0 <7.1.0' + snappy: ^7.3.2 + socks: ^2.8.6 + peerDependenciesMeta: + '@aws-sdk/credential-providers': + optional: true + '@mongodb-js/zstd': + optional: true + gcp-metadata: + optional: true + kerberos: + optional: true + mongodb-client-encryption: + optional: true + snappy: + optional: true + socks: + optional: true mrmime@2.0.1: resolution: {integrity: sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==} @@ -6212,6 +6449,14 @@ packages: ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + mysql2@3.15.3: + resolution: {integrity: sha512-FBrGau0IXmuqg4haEZRBfHNWB5mUARw6hNwPDXXGg0XzVJ50mr/9hb267lvpVMnhZ1FON3qNd4Xfcez1rbFwSg==} + engines: {node: '>= 8.0'} + + named-placeholders@1.1.6: + resolution: {integrity: sha512-Tz09sEL2EEuv5fFowm419c1+a/jSMiBjI9gHxVLrVdbUkkNUUfjsVYs9pVZu5oCon/kmRh9TfLEObFtkVxmY0w==} + engines: {node: '>=8.0.0'} + nanoid@3.3.11: resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} @@ -6281,8 +6526,8 @@ packages: node-mock-http@1.0.4: resolution: {integrity: sha512-8DY+kFsDkNXy1sJglUfuODx1/opAGJGyrTuFqEoN90oRc2Vk0ZbD4K2qmKXBBEhZQzdKHIVfEJpDU8Ak2NJEvQ==} - node-releases@2.0.27: - resolution: {integrity: sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==} + node-releases@2.0.36: + resolution: {integrity: sha512-TdC8FSgHz8Mwtw9g5L4gR/Sh9XhSP/0DEkQxfEFXOpiul5IiHgHan2VhYYb6agDSfp4KuvltmGApc8HMgUrIkA==} non-layered-tidy-tree-layout@2.0.2: resolution: {integrity: sha512-gkXMxRzUH+PB0ax9dUN0yYF0S25BqeAYqhgMaLUFmpXLEk7Fcu8f4emJuOAY0V8kjDICxROIKsTAKsV/v355xw==} @@ -6519,10 +6764,14 @@ packages: points-on-path@0.2.1: resolution: {integrity: sha512-25ClnWWuw7JbWZcgqY/gJ4FQWadKxGWk+3kR/7kD0tCaDtPPMj7oHu2ToLaVhfpnHrZzYby2w6tUA0eOIuUg8g==} - postcss@8.5.6: - resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} + postcss@8.5.8: + resolution: {integrity: sha512-OW/rX8O/jXnm82Ey1k44pObPtdblfiuWnrd8X7GJ7emImCOstunGbXUpp7HdBrFQX6rJzn3sPT397Wp5aCwCHg==} engines: {node: ^10 || ^12 || >=14} + postgres@3.4.7: + resolution: {integrity: sha512-Jtc2612XINuBjIl/QTWsV5UvE8UHuNblcO3vVADSrKsrc6RqGX6lOW1cEo3CM2v0XG4Nat8nI+YM7/f26VxXLw==} + engines: {node: '>=12'} + postmark@4.0.7: resolution: {integrity: sha512-DjNniUl1XNCGUKhCR98ePd5gv16rlUAVKKaU9TUqnE3hDSqfT9XDulu1idjagQmdyGscqnRtXk/puAEiYMeevg==} @@ -6607,6 +6856,19 @@ packages: resolution: {integrity: sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + prisma@7.4.2: + resolution: {integrity: sha512-2bP8Ruww3Q95Z2eH4Yqh4KAENRsj/SxbdknIVBfd6DmjPwmpsC4OVFMLOeHt6tM3Amh8ebjvstrUz3V/hOe1dA==} + engines: {node: ^20.19 || ^22.12 || >=24.0} + hasBin: true + peerDependencies: + better-sqlite3: '>=9.0.0' + typescript: '>=5.4.0' + peerDependenciesMeta: + better-sqlite3: + optional: true + typescript: + optional: true + process-nextick-args@2.0.1: resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} @@ -6618,6 +6880,9 @@ packages: resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==} engines: {node: '>=0.4.0'} + proper-lockfile@4.1.2: + resolution: {integrity: sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA==} + property-information@7.1.0: resolution: {integrity: sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==} @@ -6642,22 +6907,25 @@ packages: proxy-memoize@3.0.1: resolution: {integrity: sha512-VDdG/VYtOgdGkWJx7y0o7p+zArSf2383Isci8C+BP3YXgMYDoPd3cCBjw0JdWb6YBb9sFiOPbAADDVTPJnh+9g==} - pump@3.0.3: - resolution: {integrity: sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==} + pump@3.0.4: + resolution: {integrity: sha512-VS7sjc6KR7e1ukRFhQSY5LM2uBWAUPiOPa/A3mkKmiMwSmRFUITt0xuj+/lesgnCv+dPIEYlkzrcyXgquIHMcA==} punycode@2.3.1: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} - puppeteer-core@24.37.5: - resolution: {integrity: sha512-ybL7iE78YPN4T6J+sPLO7r0lSByp/0NN6PvfBEql219cOnttoTFzCWKiBOjstXSqi/OKpwae623DWAsL7cn2MQ==} + puppeteer-core@24.38.0: + resolution: {integrity: sha512-zB3S/tksIhgi2gZRndUe07AudBz5SXOB7hqG0kEa9/YXWrGwlVlYm3tZtwKgfRftBzbmLQl5iwHkQQl04n/mWw==} engines: {node: '>=18'} - puppeteer@24.37.5: - resolution: {integrity: sha512-3PAOIQLceyEmn1Fi76GkGO2EVxztv5OtdlB1m8hMUZL3f8KDHnlvXbvCXv+Ls7KzF1R0KdKBqLuT/Hhrok12hQ==} + puppeteer@24.38.0: + resolution: {integrity: sha512-abnJOBVoL9PQTLKSbYGm9mjNFyIPaTVj77J/6cS370dIQtcZMpx8wyZoAuBzR71Aoon6yvI71NEVFUsl3JU82g==} engines: {node: '>=18'} hasBin: true + pure-rand@6.1.0: + resolution: {integrity: sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==} + qs@6.15.0: resolution: {integrity: sha512-mAZTtNCeetKMH+pSjrb76NAM8V9a05I9aBZOHztWy/UqcJdQYNsf59vrRKWnojAT9Y+GbIvoTBC++CPHqpDBhQ==} engines: {node: '>=0.6'} @@ -6768,6 +7036,9 @@ packages: resolution: {integrity: sha512-sZuz1dYW/ZsfG17WSAG7eS85r5a0dDsvg+7BiiYR5o6lKCAtUrEwdmRmaGF6rwVj3LcmAeYkOWKEPlbPzN3Y3A==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + regexp-to-ast@0.5.0: + resolution: {integrity: sha512-tlbJqcMHnPKI9zSrystikWKwHkBqu2a/Sgw01h3zFjvYrMxEDYHzzoMZnUrbIfpTFEsoRnnviOXNCzFiSc54Qw==} + regexp-tree@0.1.27: resolution: {integrity: sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA==} hasBin: true @@ -6776,6 +7047,9 @@ packages: resolution: {integrity: sha512-NZQZdC5wOE/H3UT28fVGL+ikOZcEzfMGk/c3iN9UGxzWHMa1op7274oyiUVrAG4B2EuFhus8SvkaYnhvW92p9Q==} hasBin: true + remeda@2.33.4: + resolution: {integrity: sha512-ygHswjlc/opg2VrtiYvUOPLjxjtdKvjGz1/plDhkG66hjNjFr1xmfrs2ClNFo/E6TyUFiwYNh53bKV26oBoMGQ==} + require-directory@2.1.1: resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} engines: {node: '>=0.10.0'} @@ -6807,6 +7081,10 @@ packages: resolution: {integrity: sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + retry@0.12.0: + resolution: {integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==} + engines: {node: '>= 4'} + reusify@1.1.0: resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} @@ -6827,8 +7105,8 @@ packages: engines: {node: ^20.19.0 || >=22.12.0} hasBin: true - rollup-plugin-visualizer@6.0.5: - resolution: {integrity: sha512-9+HlNgKCVbJDs8tVtjQ43US12eqaiHyyiLMdBwQ7vSZPiHMysGNo2E88TAp1si5wx8NAoYriI2A5kuKfIakmJg==} + rollup-plugin-visualizer@6.0.11: + resolution: {integrity: sha512-TBwVHVY7buHjIKVLqr9scTVFwqZqMXINcCphPwIWKPDCOBIa+jCQfafvbjRJDZgXdq/A996Dy6yGJ/+/NtAXDQ==} engines: {node: '>=18'} hasBin: true peerDependencies: @@ -6911,6 +7189,9 @@ packages: resolution: {integrity: sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ==} engines: {node: '>= 18'} + seq-queue@0.0.5: + resolution: {integrity: sha512-hr3Wtp/GZIc/6DAGPDcV4/9WoZhjrkXsi5B/07QgX8tsdc6ilr7BFM6PM6rbdAX1kFSDYeZGLipIZZKyQP0O5Q==} + serialize-javascript@6.0.2: resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==} @@ -6935,8 +7216,8 @@ packages: resolution: {integrity: sha512-xRXBn0pPqQTVQiC8wyQrKs2MOlX24zQ0POGaj0kultvoOCstBQM5yvOhAVSUwOMjQtTvsPWoNCHfPGwaaQJhTw==} engines: {node: '>= 18'} - set-cookie-parser@2.7.2: - resolution: {integrity: sha512-oeM1lpU/UvhTxw+g3cIfxXHyJRc/uidd3yK1P242gzHds0udQBYzs3y8j4gCCW+ZJ7ad0yctld8RYO+bdurlvw==} + set-cookie-parser@3.0.1: + resolution: {integrity: sha512-n7Z7dXZhJbwuAHhNzkTti6Aw9QDDjZtm3JTpTGATIdNzdQz5GuFs22w90BcvF4INfnrL5xrX3oGsuqO5Dx3A1Q==} setprototypeof@1.2.0: resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} @@ -7017,10 +7298,6 @@ packages: resolution: {integrity: sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==} engines: {node: '>=14.16'} - slice-ansi@7.1.2: - resolution: {integrity: sha512-iOBWFgUX7caIZiuutICxVgX1SdxwAVFFKwt1EvMYYec/NWO5meOJ6K5uQxhrYBdQJne4KxiqZc+KptFOWFSI9w==} - engines: {node: '>=18'} - slice-ansi@8.0.0: resolution: {integrity: sha512-stxByr12oeeOyY2BlviTNQlYV5xOj47GirPr4yA1hE9JCtxfQN0+tVbkxwCtYDQWhEKWFHsEK48ORg5jrouCAg==} engines: {node: '>=20'} @@ -7089,10 +7366,17 @@ packages: space-separated-tokens@2.0.2: resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==} + sparse-bitfield@3.0.3: + resolution: {integrity: sha512-kvzhi7vqKTfkh0PZU+2D2PIllw2ymqJKujUcyPMd9Y75Nv4nPbGJZXNhxsgdQab2BmlDct1YnfQCguEvHr7VsQ==} + speakingurl@14.0.1: resolution: {integrity: sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==} engines: {node: '>=0.10.0'} + sqlstring@2.3.3: + resolution: {integrity: sha512-qC9iz2FlN7DQl3+wjwn3802RTyjCx7sDvfQEXchwa6CWOx07/WVfh91gBmQ9fahw8snwGEWU3xGzOt4tFyHLxg==} + engines: {node: '>= 0.6'} + stack-trace@1.0.0-pre2: resolution: {integrity: sha512-2ztBJRek8IVofG9DBJqdy2N5kulaacX30Nz7xmkYF6ale9WBVmIy6mFBchvGX7Vx/MyjBhx+Rcxqrj+dbOnQ6A==} engines: {node: '>=16'} @@ -7180,8 +7464,8 @@ packages: strip-literal@3.1.0: resolution: {integrity: sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg==} - stripe@20.4.0: - resolution: {integrity: sha512-F/aN1IQ9vHmlyLNi3DkiIbyzQb6gyBG0uYFd/VrEVQSc9BLtlgknPUx0EvzZdBMRLFuRaPFIFd7Mxwtg7Pbwzw==} + stripe@20.4.1: + resolution: {integrity: sha512-axCguHItc8Sxt0HC6aSkdVRPffjYPV7EQqZRb2GkIa8FzWDycE7nHJM19C6xAIynH1Qp1/BHiopSi96jGBxT0w==} engines: {node: '>=16'} peerDependencies: '@types/node': '>=16' @@ -7246,18 +7530,18 @@ packages: tar-fs@2.1.4: resolution: {integrity: sha512-mDAjwmZdh7LTT6pNleZ05Yt65HC3E+NiQzl672vQG38jIrehtJk/J3mNwIg+vShQPcLF/LV7CMnDW6vjj6sfYQ==} - tar-fs@3.1.1: - resolution: {integrity: sha512-LZA0oaPOc2fVo82Txf3gw+AkEd38szODlptMYejQUhndHMLQ9M059uXR+AfS7DNo0NpINvSqDsvyaCrBVkptWg==} + tar-fs@3.1.2: + resolution: {integrity: sha512-QGxxTxxyleAdyM3kpFs14ymbYmNFrfY+pHj7Z8FgtbZ7w2//VAgLMac7sT6nRpIHjppXO2AwwEOg0bPFVRcmXw==} tar-stream@2.2.0: resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==} engines: {node: '>=6'} - tar-stream@3.1.7: - resolution: {integrity: sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==} + tar-stream@3.1.8: + resolution: {integrity: sha512-U6QpVRyCGHva435KoNWy9PRoi2IFYCgtEhq9nmrPPpbRacPs9IH4aJ3gbrFC8dPcXvdSZ4XXfXT5Fshbp2MtlQ==} - tar@7.5.9: - resolution: {integrity: sha512-BTLcK0xsDh2+PUe9F6c2TlRp4zOOBMTkoQHQIWSIzI0R7KG46uEwq4OPk2W7bZcprBMsuaeFsqwYr7pjh6CuHg==} + tar@7.5.10: + resolution: {integrity: sha512-8mOPs1//5q/rlkNSPcCegA6hiHJYDmSLEI8aMH/CdSQJNWztHC9WHNam5zdQlfpTwB9Xp7IBEsHfV5LKMJGVAw==} engines: {node: '>=18'} teex@1.0.1: @@ -7321,11 +7605,11 @@ packages: resolution: {integrity: sha512-azl+t0z7pw/z958Gy9svOTuzqIk6xq+NSheJzn5MMWtWTFywIacg2wUlzKFGtt3cthx0r2SxMK0yzJOR0IES7Q==} engines: {node: '>=14.0.0'} - tldts-core@7.0.23: - resolution: {integrity: sha512-0g9vrtDQLrNIiCj22HSe9d4mLVG3g5ph5DZ8zCKBr4OtrspmNB6ss7hVyzArAeE88ceZocIEGkyW1Ime7fxPtQ==} + tldts-core@7.0.25: + resolution: {integrity: sha512-ZjCZK0rppSBu7rjHYDYsEaMOIbbT+nWF57hKkv4IUmZWBNrBWBOjIElc0mKRgLM8bm7x/BBlof6t2gi/Oq/Asw==} - tldts@7.0.23: - resolution: {integrity: sha512-ASdhgQIBSay0R/eXggAkQ53G4nTJqTXqC2kbaBbdDwM7SkjyZyO0OaaN1/FH7U/yCeqOHDwFO5j8+Os/IS1dXw==} + tldts@7.0.25: + resolution: {integrity: sha512-keinCnPbwXEUG3ilrWQZU+CqcTTzHq9m2HhoUP2l7Xmi8l1LuijAXLpAJ5zRW+ifKTNscs4NdCkfkDCBYm352w==} hasBin: true to-regex-range@5.0.1: @@ -7350,6 +7634,10 @@ packages: tr46@0.0.3: resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + tr46@5.1.1: + resolution: {integrity: sha512-hdF5ZgjTqgAntKkklYw0R03MG2x/bSzTtkxmIRw/sTNV8YXsCJ1tfLAX23lhxhHJlEf3CRCOCGGWw3vI3GaSPw==} + engines: {node: '>=18'} + tr46@6.0.0: resolution: {integrity: sha512-bLVMLPtstlZ4iMQHpFHTR7GAGj2jxi8Dg0s2h2MafAE4uSWF98FC/3MomU51iQAMf8/qDUbKWf5GxuvvVcXEhw==} engines: {node: '>=20'} @@ -7382,38 +7670,38 @@ packages: tunnel-agent@0.6.0: resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==} - turbo-darwin-64@2.8.11: - resolution: {integrity: sha512-XKaCWaz4OCt77oYYvGCIRpvYD4c/aNaKjRkUpv+e8rN3RZb+5Xsyew4yRO+gaHdMIUhQznXNXfHlhs+/p7lIhA==} + turbo-darwin-64@2.8.14: + resolution: {integrity: sha512-9sFi7n2lLfEsGWi5OEoA/eTtQU2BPKtzSYKqufMtDeRmqMT9vKjbv9gJCRkllSVE9BOXA0qXC3diyX8V8rKIKw==} cpu: [x64] os: [darwin] - turbo-darwin-arm64@2.8.11: - resolution: {integrity: sha512-VvynLHGUNvQ9k7GZjRPSsRcK4VkioTfFb7O7liAk4nHKjEcMdls7GqxzjVWgJiKz3hWmQGaP9hRa9UUnhVWCxA==} + turbo-darwin-arm64@2.8.14: + resolution: {integrity: sha512-aS4yJuy6A1PCLws+PJpZP0qCURG8Y5iVx13z/WAbKyeDTY6W6PiGgcEllSaeLGxyn++382ztN/EZH85n2zZ6VQ==} cpu: [arm64] os: [darwin] - turbo-linux-64@2.8.11: - resolution: {integrity: sha512-cbSn37dcm+EmkQ7DD0euy7xV7o2el4GAOr1XujvkAyKjjNvQ+6QIUeDgQcwAx3D17zPpDvfDMJY2dLQadWnkmQ==} + turbo-linux-64@2.8.14: + resolution: {integrity: sha512-XC6wPUDJkakjhNLaS0NrHDMiujRVjH+naEAwvKLArgqRaFkNxjmyNDRM4eu3soMMFmjym6NTxYaF74rvET+Orw==} cpu: [x64] os: [linux] - turbo-linux-arm64@2.8.11: - resolution: {integrity: sha512-+trymp2s2aBrhS04l6qFxcExzZ8ffndevuUB9c5RCeqsVpZeiWuGQlWNm5XjOmzoMayxRARZ5ma7yiWbGMiLqQ==} + turbo-linux-arm64@2.8.14: + resolution: {integrity: sha512-ChfE7isyVNjZrVSPDwcfqcHLG/FuIBbOFxnt1FM8vSuBGzHAs8AlTdwFNIxlEMJfZ8Ad9mdMxdmsCUPIWiQ6cg==} cpu: [arm64] os: [linux] - turbo-windows-64@2.8.11: - resolution: {integrity: sha512-3kJjFSM4yw1n9Uzmi+XkAUgCae19l/bH6RJ442xo7mnZm0tpOjo33F+FYHoSVpIWVMd0HG0LDccyafPSdylQbA==} + turbo-windows-64@2.8.14: + resolution: {integrity: sha512-FTbIeQL1ycLFW2t9uQNMy+bRSzi3Xhwun/e7ZhFBdM+U0VZxxrtfYEBM9CHOejlfqomk6Jh7aRz0sJoqYn39Hg==} cpu: [x64] os: [win32] - turbo-windows-arm64@2.8.11: - resolution: {integrity: sha512-JOM4uF2vuLsJUvibdR6X9QqdZr6BhC6Nhlrw4LKFPsXZZI/9HHLoqAiYRpE4MuzIwldCH/jVySnWXrI1SKto0g==} + turbo-windows-arm64@2.8.14: + resolution: {integrity: sha512-KgZX12cTyhY030qS7ieT8zRkhZZE2VWJasDFVUSVVn17nR7IShpv68/7j5UqJNeRLIGF1XPK0phsP5V5yw3how==} cpu: [arm64] os: [win32] - turbo@2.8.11: - resolution: {integrity: sha512-H+rwSHHPLoyPOSoHdmI1zY0zy0GGj1Dmr7SeJW+nZiWLz2nex8EJ+fkdVabxXFMNEux+aywI4Sae8EqhmnOv4A==} + turbo@2.8.14: + resolution: {integrity: sha512-UCTxeMNYT1cKaHiIFdLCQ7ulI+jw5i5uOnJOrRXsgUD7G3+OjlUjwVd7JfeVt2McWSVGjYA3EVW/v1FSsJ5DtA==} hasBin: true type-check@0.4.0: @@ -7476,8 +7764,8 @@ packages: resolution: {integrity: sha512-wH590V9VNgYH9g3lH9wWjTrUoKsjLF6sGLjhR4sH1LWpLmCOH0Zf7PukhDA8BiS7KHe4oPNkcTHqYkj7SOGUOw==} engines: {node: '>=20'} - unimport@5.6.0: - resolution: {integrity: sha512-8rqAmtJV8o60x46kBAJKtHpJDJWkA2xcBqWKPI14MgUb05o1pnpnCnXSxedUXyeq7p8fR5g3pTo2BaswZ9lD9A==} + unimport@5.7.0: + resolution: {integrity: sha512-njnL6sp8lEA8QQbZrt+52p/g4X0rw3bnGGmUcJnt1jeG8+iiqO779aGz0PirCtydAIVcuTBRlJ52F0u46z309Q==} engines: {node: '>=18.12.0'} unist-util-is@6.0.1: @@ -7599,6 +7887,14 @@ packages: resolution: {integrity: sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A==} hasBin: true + valibot@1.2.0: + resolution: {integrity: sha512-mm1rxUsmOxzrwnX5arGS+U4T25RdvpPjPN4yR0u9pUBov9+zGVtO84tif1eY4r6zWxVxu3KzIyknJy3rxfRZZg==} + peerDependencies: + typescript: '>=5' + peerDependenciesMeta: + typescript: + optional: true + vary@1.1.2: resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} engines: {node: '>= 0.8'} @@ -7870,6 +8166,10 @@ packages: webidl-conversions@3.0.1: resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + webidl-conversions@7.0.0: + resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==} + engines: {node: '>=12'} + webidl-conversions@8.0.1: resolution: {integrity: sha512-BMhLD/Sw+GbJC21C/UgyaZX41nPt8bUTg+jWyDeg7e7YN4xOM05YPSIXceACnXVtqyEw/LMClUQMtMZ+PGGpqQ==} engines: {node: '>=20'} @@ -7885,6 +8185,10 @@ packages: resolution: {integrity: sha512-sXcNcHOC51uPGF0P/D4NVtrkjSU2fNsm9iog4ZvZJsL3rjoDAzXZhkm2MWt1y+PUdggKAYVoMAIYcs78wJ51Cw==} engines: {node: '>=20'} + whatwg-url@14.2.0: + resolution: {integrity: sha512-De72GdQZzNTUBBChsXueQUnPKDkg/5A5zp7pFDuQAj5UFoENpiACU0wlCvzpAGnTkj++ihpKwKyYewn/XNUbKw==} + engines: {node: '>=18'} + whatwg-url@15.1.0: resolution: {integrity: sha512-2ytDk0kiEj/yu90JOAp44PVPUkO9+jVhyf+SybKlRHSDlvOOZhdPIrr7xTH64l4WixO2cP+wQIcgujkGBPPz6g==} engines: {node: '>=20'} @@ -7924,8 +8228,8 @@ packages: engines: {node: '>=16'} hasBin: true - workerd@1.20260305.0: - resolution: {integrity: sha512-JkhfCLU+w+KbQmZ9k49IcDYc78GBo7eG8Mir8E2+KVjR7otQAmpcLlsous09YLh8WQ3Bt3Mi6/WMStvMAPukeA==} + workerd@1.20260301.1: + resolution: {integrity: sha512-oterQ1IFd3h7PjCfT4znSFOkJCvNQ6YMOyZ40YsnO3nrSpgB4TbJVYWFOnyJAw71/RQuupfVqZZWKvsy8GO3fw==} engines: {node: '>=16'} hasBin: true @@ -7940,12 +8244,12 @@ packages: '@cloudflare/workers-types': optional: true - wrangler@4.69.0: - resolution: {integrity: sha512-EmVfIM65I5b4ITHe3Y9R7zQyf4NUBQ1leStakMlWiVR9n6VlDwuEltyQI2l3i0JciDnWyR3uqe+T6C08ivniTQ==} + wrangler@4.71.0: + resolution: {integrity: sha512-j6pSGAncOLNQDRzqtp0EqzYj52CldDP7uz/C9cxVrIgqa5p+cc0b4pIwnapZZAGv9E1Loa3tmPD0aXonH7KTkw==} engines: {node: '>=20.0.0'} hasBin: true peerDependencies: - '@cloudflare/workers-types': ^4.20260305.0 + '@cloudflare/workers-types': ^4.20260226.1 peerDependenciesMeta: '@cloudflare/workers-types': optional: true @@ -8074,6 +8378,9 @@ packages: youch@4.1.0-beta.10: resolution: {integrity: sha512-rLfVLB4FgQneDr0dv1oddCVZmKjcJ6yX6mS4pU82Mq/Dt9a3cLZQ62pDBL4AUO+uVrCvtWz3ZFUL2HFAFJ/BXQ==} + zeptomatch@2.1.0: + resolution: {integrity: sha512-KiGErG2J0G82LSpniV0CtIzjlJ10E04j02VOudJsPyPwNZgGnRKQy7I1R7GMyg/QswnE4l7ohSGrQbQbjXPPDA==} + zimmerframe@1.1.4: resolution: {integrity: sha512-B58NGBEoc8Y9MWWCQGl/gq9xBCe4IiKM0a2x7GZdQKOW5Exr8S1W24J6OgM1njK8xCRGvAJIL/MxXHf6SkmQKQ==} @@ -8226,73 +8533,73 @@ snapshots: package-manager-detector: 1.6.0 tinyexec: 1.0.2 - '@ark-ui/solid@5.32.0(solid-js@1.9.11)': + '@ark-ui/solid@5.34.1(solid-js@1.9.11)': dependencies: '@internationalized/date': 3.11.0 - '@zag-js/accordion': 1.34.1 - '@zag-js/anatomy': 1.34.1 - '@zag-js/angle-slider': 1.34.1 - '@zag-js/async-list': 1.34.1 - '@zag-js/auto-resize': 1.34.1 - '@zag-js/avatar': 1.34.1 - '@zag-js/carousel': 1.34.1 - '@zag-js/cascade-select': 1.34.1 - '@zag-js/checkbox': 1.34.1 - '@zag-js/clipboard': 1.34.1 - '@zag-js/collapsible': 1.34.1 - '@zag-js/collection': 1.34.1 - '@zag-js/color-picker': 1.34.1 - '@zag-js/color-utils': 1.34.1 - '@zag-js/combobox': 1.34.1 - '@zag-js/core': 1.34.1 - '@zag-js/date-picker': 1.34.1(@internationalized/date@3.11.0) - '@zag-js/date-utils': 1.34.1(@internationalized/date@3.11.0) - '@zag-js/dialog': 1.34.1 - '@zag-js/dom-query': 1.34.1 - '@zag-js/drawer': 1.34.1 - '@zag-js/editable': 1.34.1 - '@zag-js/file-upload': 1.34.1 - '@zag-js/file-utils': 1.34.1 - '@zag-js/floating-panel': 1.34.1 - '@zag-js/focus-trap': 1.34.1 - '@zag-js/highlight-word': 1.34.1 - '@zag-js/hover-card': 1.34.1 - '@zag-js/i18n-utils': 1.34.1 - '@zag-js/image-cropper': 1.34.1 - '@zag-js/json-tree-utils': 1.34.1 - '@zag-js/listbox': 1.34.1 - '@zag-js/marquee': 1.34.1 - '@zag-js/menu': 1.34.1 - '@zag-js/navigation-menu': 1.34.1 - '@zag-js/number-input': 1.34.1 - '@zag-js/pagination': 1.34.1 - '@zag-js/password-input': 1.34.1 - '@zag-js/pin-input': 1.34.1 - '@zag-js/popover': 1.34.1 - '@zag-js/presence': 1.34.1 - '@zag-js/progress': 1.34.1 - '@zag-js/qr-code': 1.34.1 - '@zag-js/radio-group': 1.34.1 - '@zag-js/rating-group': 1.34.1 - '@zag-js/scroll-area': 1.34.1 - '@zag-js/select': 1.34.1 - '@zag-js/signature-pad': 1.34.1 - '@zag-js/slider': 1.34.1 - '@zag-js/solid': 1.34.1(solid-js@1.9.11) - '@zag-js/splitter': 1.34.1 - '@zag-js/steps': 1.34.1 - '@zag-js/switch': 1.34.1 - '@zag-js/tabs': 1.34.1 - '@zag-js/tags-input': 1.34.1 - '@zag-js/timer': 1.34.1 - '@zag-js/toast': 1.34.1 - '@zag-js/toggle': 1.34.1 - '@zag-js/toggle-group': 1.34.1 - '@zag-js/tooltip': 1.34.1 - '@zag-js/tour': 1.34.1 - '@zag-js/tree-view': 1.34.1 - '@zag-js/types': 1.34.1 - '@zag-js/utils': 1.34.1 + '@zag-js/accordion': 1.35.3 + '@zag-js/anatomy': 1.35.3 + '@zag-js/angle-slider': 1.35.3 + '@zag-js/async-list': 1.35.3 + '@zag-js/auto-resize': 1.35.3 + '@zag-js/avatar': 1.35.3 + '@zag-js/carousel': 1.35.3 + '@zag-js/cascade-select': 1.35.3 + '@zag-js/checkbox': 1.35.3 + '@zag-js/clipboard': 1.35.3 + '@zag-js/collapsible': 1.35.3 + '@zag-js/collection': 1.35.3 + '@zag-js/color-picker': 1.35.3 + '@zag-js/color-utils': 1.35.3 + '@zag-js/combobox': 1.35.3 + '@zag-js/core': 1.35.3 + '@zag-js/date-picker': 1.35.3(@internationalized/date@3.11.0) + '@zag-js/date-utils': 1.35.3(@internationalized/date@3.11.0) + '@zag-js/dialog': 1.35.3 + '@zag-js/dom-query': 1.35.3 + '@zag-js/drawer': 1.35.3 + '@zag-js/editable': 1.35.3 + '@zag-js/file-upload': 1.35.3 + '@zag-js/file-utils': 1.35.3 + '@zag-js/floating-panel': 1.35.3 + '@zag-js/focus-trap': 1.35.3 + '@zag-js/highlight-word': 1.35.3 + '@zag-js/hover-card': 1.35.3 + '@zag-js/i18n-utils': 1.35.3 + '@zag-js/image-cropper': 1.35.3 + '@zag-js/json-tree-utils': 1.35.3 + '@zag-js/listbox': 1.35.3 + '@zag-js/marquee': 1.35.3 + '@zag-js/menu': 1.35.3 + '@zag-js/navigation-menu': 1.35.3 + '@zag-js/number-input': 1.35.3 + '@zag-js/pagination': 1.35.3 + '@zag-js/password-input': 1.35.3 + '@zag-js/pin-input': 1.35.3 + '@zag-js/popover': 1.35.3 + '@zag-js/presence': 1.35.3 + '@zag-js/progress': 1.35.3 + '@zag-js/qr-code': 1.35.3 + '@zag-js/radio-group': 1.35.3 + '@zag-js/rating-group': 1.35.3 + '@zag-js/scroll-area': 1.35.3 + '@zag-js/select': 1.35.3 + '@zag-js/signature-pad': 1.35.3 + '@zag-js/slider': 1.35.3 + '@zag-js/solid': 1.35.3(solid-js@1.9.11) + '@zag-js/splitter': 1.35.3 + '@zag-js/steps': 1.35.3 + '@zag-js/switch': 1.35.3 + '@zag-js/tabs': 1.35.3 + '@zag-js/tags-input': 1.35.3 + '@zag-js/timer': 1.35.3 + '@zag-js/toast': 1.35.3 + '@zag-js/toggle': 1.35.3 + '@zag-js/toggle-group': 1.35.3 + '@zag-js/tooltip': 1.35.3 + '@zag-js/tour': 1.35.3 + '@zag-js/tree-view': 1.35.3 + '@zag-js/types': 1.35.3 + '@zag-js/utils': 1.35.3 solid-js: 1.9.11 '@asamuzakjp/css-color@4.1.2': @@ -8307,13 +8614,13 @@ snapshots: dependencies: '@asamuzakjp/nwsapi': 2.3.9 bidi-js: 1.0.3 - css-tree: 3.1.0 + css-tree: 3.2.1 is-potential-custom-element-name: 1.0.1 lru-cache: 11.2.6 '@asamuzakjp/nwsapi@2.3.9': {} - '@asteasolutions/zod-to-openapi@8.4.1(zod@4.3.6)': + '@asteasolutions/zod-to-openapi@8.4.3(zod@4.3.6)': dependencies: openapi3-ts: 4.5.0 zod: 4.3.6 @@ -8464,33 +8771,65 @@ snapshots: '@babel/helper-string-parser': 7.27.1 '@babel/helper-validator-identifier': 7.28.5 - '@better-auth/core@1.4.19(@better-auth/utils@0.3.0)(@better-fetch/fetch@1.1.21)(better-call@1.1.8(zod@4.3.6))(jose@6.1.3)(kysely@0.28.11)(nanostores@1.1.1)': + '@better-auth/core@1.5.4(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(@cloudflare/workers-types@4.20260307.1)(better-call@1.3.2(zod@4.3.6))(jose@6.2.0)(kysely@0.28.11)(nanostores@1.1.1)': dependencies: - '@better-auth/utils': 0.3.0 + '@better-auth/utils': 0.3.1 '@better-fetch/fetch': 1.1.21 '@standard-schema/spec': 1.1.0 - better-call: 1.1.8(zod@4.3.6) - jose: 6.1.3 + better-call: 1.3.2(zod@4.3.6) + jose: 6.2.0 kysely: 0.28.11 nanostores: 1.1.1 zod: 4.3.6 + optionalDependencies: + '@cloudflare/workers-types': 4.20260307.1 + + '@better-auth/drizzle-adapter@1.5.4(@better-auth/core@1.5.4(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(@cloudflare/workers-types@4.20260307.1)(better-call@1.3.2(zod@4.3.6))(jose@6.2.0)(kysely@0.28.11)(nanostores@1.1.1))(@better-auth/utils@0.3.1)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260307.1)(@electric-sql/pglite@0.3.15)(@opentelemetry/api@1.9.0)(@prisma/client@7.4.2(prisma@7.4.2(@types/react@19.2.14)(better-sqlite3@12.6.2)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(typescript@5.9.3))(@types/better-sqlite3@7.6.13)(better-sqlite3@12.6.2)(gel@2.2.0)(kysely@0.28.11)(mysql2@3.15.3)(postgres@3.4.7)(prisma@7.4.2(@types/react@19.2.14)(better-sqlite3@12.6.2)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(typescript@5.9.3)))': + dependencies: + '@better-auth/core': 1.5.4(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(@cloudflare/workers-types@4.20260307.1)(better-call@1.3.2(zod@4.3.6))(jose@6.2.0)(kysely@0.28.11)(nanostores@1.1.1) + '@better-auth/utils': 0.3.1 + drizzle-orm: 0.45.1(@cloudflare/workers-types@4.20260307.1)(@electric-sql/pglite@0.3.15)(@opentelemetry/api@1.9.0)(@prisma/client@7.4.2(prisma@7.4.2(@types/react@19.2.14)(better-sqlite3@12.6.2)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(typescript@5.9.3))(@types/better-sqlite3@7.6.13)(better-sqlite3@12.6.2)(gel@2.2.0)(kysely@0.28.11)(mysql2@3.15.3)(postgres@3.4.7)(prisma@7.4.2(@types/react@19.2.14)(better-sqlite3@12.6.2)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(typescript@5.9.3)) - '@better-auth/stripe@1.4.19(@better-auth/core@1.4.19(@better-auth/utils@0.3.0)(@better-fetch/fetch@1.1.21)(better-call@1.1.8(zod@4.3.6))(jose@6.1.3)(kysely@0.28.11)(nanostores@1.1.1))(better-auth@1.4.19(better-sqlite3@12.6.2)(drizzle-kit@0.31.9)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260305.0)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.6.2)(gel@2.2.0)(kysely@0.28.11))(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(solid-js@1.9.11)(svelte@5.46.1)(vitest@3.2.0(@types/node@25.3.1)(jiti@2.6.1)(jsdom@27.4.0(@noble/hashes@2.0.1))(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))(vue@3.5.29(typescript@5.9.3)))(better-call@1.1.8(zod@4.3.6))(stripe@20.4.0(@types/node@25.3.1))': + '@better-auth/kysely-adapter@1.5.4(@better-auth/core@1.5.4(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(@cloudflare/workers-types@4.20260307.1)(better-call@1.3.2(zod@4.3.6))(jose@6.2.0)(kysely@0.28.11)(nanostores@1.1.1))(@better-auth/utils@0.3.1)(kysely@0.28.11)': dependencies: - '@better-auth/core': 1.4.19(@better-auth/utils@0.3.0)(@better-fetch/fetch@1.1.21)(better-call@1.1.8(zod@4.3.6))(jose@6.1.3)(kysely@0.28.11)(nanostores@1.1.1) - better-auth: 1.4.19(better-sqlite3@12.6.2)(drizzle-kit@0.31.9)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260305.0)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.6.2)(gel@2.2.0)(kysely@0.28.11))(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(solid-js@1.9.11)(svelte@5.46.1)(vitest@3.2.0(@types/node@25.3.1)(jiti@2.6.1)(jsdom@27.4.0(@noble/hashes@2.0.1))(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))(vue@3.5.29(typescript@5.9.3)) - better-call: 1.1.8(zod@4.3.6) + '@better-auth/core': 1.5.4(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(@cloudflare/workers-types@4.20260307.1)(better-call@1.3.2(zod@4.3.6))(jose@6.2.0)(kysely@0.28.11)(nanostores@1.1.1) + '@better-auth/utils': 0.3.1 + kysely: 0.28.11 + + '@better-auth/memory-adapter@1.5.4(@better-auth/core@1.5.4(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(@cloudflare/workers-types@4.20260307.1)(better-call@1.3.2(zod@4.3.6))(jose@6.2.0)(kysely@0.28.11)(nanostores@1.1.1))(@better-auth/utils@0.3.1)': + dependencies: + '@better-auth/core': 1.5.4(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(@cloudflare/workers-types@4.20260307.1)(better-call@1.3.2(zod@4.3.6))(jose@6.2.0)(kysely@0.28.11)(nanostores@1.1.1) + '@better-auth/utils': 0.3.1 + + '@better-auth/mongo-adapter@1.5.4(@better-auth/core@1.5.4(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(@cloudflare/workers-types@4.20260307.1)(better-call@1.3.2(zod@4.3.6))(jose@6.2.0)(kysely@0.28.11)(nanostores@1.1.1))(@better-auth/utils@0.3.1)(mongodb@7.1.0(socks@2.8.7))': + dependencies: + '@better-auth/core': 1.5.4(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(@cloudflare/workers-types@4.20260307.1)(better-call@1.3.2(zod@4.3.6))(jose@6.2.0)(kysely@0.28.11)(nanostores@1.1.1) + '@better-auth/utils': 0.3.1 + mongodb: 7.1.0(socks@2.8.7) + + '@better-auth/prisma-adapter@1.5.4(@better-auth/core@1.5.4(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(@cloudflare/workers-types@4.20260307.1)(better-call@1.3.2(zod@4.3.6))(jose@6.2.0)(kysely@0.28.11)(nanostores@1.1.1))(@better-auth/utils@0.3.1)(@prisma/client@7.4.2(prisma@7.4.2(@types/react@19.2.14)(better-sqlite3@12.6.2)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(typescript@5.9.3))(prisma@7.4.2(@types/react@19.2.14)(better-sqlite3@12.6.2)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(typescript@5.9.3))': + dependencies: + '@better-auth/core': 1.5.4(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(@cloudflare/workers-types@4.20260307.1)(better-call@1.3.2(zod@4.3.6))(jose@6.2.0)(kysely@0.28.11)(nanostores@1.1.1) + '@better-auth/utils': 0.3.1 + '@prisma/client': 7.4.2(prisma@7.4.2(@types/react@19.2.14)(better-sqlite3@12.6.2)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(typescript@5.9.3) + prisma: 7.4.2(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.5.2)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(typescript@5.9.3) + + '@better-auth/stripe@1.5.4(@better-auth/core@1.5.4(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(@cloudflare/workers-types@4.20260307.1)(better-call@1.3.2(zod@4.3.6))(jose@6.2.0)(kysely@0.28.11)(nanostores@1.1.1))(better-auth@1.5.4(61d6557326f155d0f9393fbb3d05c0cd))(better-call@1.3.2(zod@4.3.6))(stripe@20.4.1(@types/node@25.3.5))': + dependencies: + '@better-auth/core': 1.5.4(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(@cloudflare/workers-types@4.20260307.1)(better-call@1.3.2(zod@4.3.6))(jose@6.2.0)(kysely@0.28.11)(nanostores@1.1.1) + better-auth: 1.5.4(61d6557326f155d0f9393fbb3d05c0cd) + better-call: 1.3.2(zod@4.3.6) defu: 6.1.4 - stripe: 20.4.0(@types/node@25.3.1) + stripe: 20.4.1(@types/node@25.3.5) zod: 4.3.6 - '@better-auth/telemetry@1.4.19(@better-auth/core@1.4.19(@better-auth/utils@0.3.0)(@better-fetch/fetch@1.1.21)(better-call@1.1.8(zod@4.3.6))(jose@6.1.3)(kysely@0.28.11)(nanostores@1.1.1))': + '@better-auth/telemetry@1.5.4(@better-auth/core@1.5.4(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(@cloudflare/workers-types@4.20260307.1)(better-call@1.3.2(zod@4.3.6))(jose@6.2.0)(kysely@0.28.11)(nanostores@1.1.1))': dependencies: - '@better-auth/core': 1.4.19(@better-auth/utils@0.3.0)(@better-fetch/fetch@1.1.21)(better-call@1.1.8(zod@4.3.6))(jose@6.1.3)(kysely@0.28.11)(nanostores@1.1.1) - '@better-auth/utils': 0.3.0 + '@better-auth/core': 1.5.4(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(@cloudflare/workers-types@4.20260307.1)(better-call@1.3.2(zod@4.3.6))(jose@6.2.0)(kysely@0.28.11)(nanostores@1.1.1) + '@better-auth/utils': 0.3.1 '@better-fetch/fetch': 1.1.21 - '@better-auth/utils@0.3.0': {} + '@better-auth/utils@0.3.1': {} '@better-fetch/fetch@1.1.21': {} @@ -8499,22 +8838,37 @@ snapshots: '@braintree/sanitize-url@7.1.2': {} - '@chevrotain/cst-dts-gen@11.1.1': + '@chevrotain/cst-dts-gen@10.5.0': dependencies: - '@chevrotain/gast': 11.1.1 - '@chevrotain/types': 11.1.1 + '@chevrotain/gast': 10.5.0 + '@chevrotain/types': 10.5.0 + lodash: 4.17.21 + + '@chevrotain/cst-dts-gen@11.1.2': + dependencies: + '@chevrotain/gast': 11.1.2 + '@chevrotain/types': 11.1.2 lodash-es: 4.17.23 - '@chevrotain/gast@11.1.1': + '@chevrotain/gast@10.5.0': + dependencies: + '@chevrotain/types': 10.5.0 + lodash: 4.17.21 + + '@chevrotain/gast@11.1.2': dependencies: - '@chevrotain/types': 11.1.1 + '@chevrotain/types': 11.1.2 lodash-es: 4.17.23 - '@chevrotain/regexp-to-ast@11.1.1': {} + '@chevrotain/regexp-to-ast@11.1.2': {} - '@chevrotain/types@11.1.1': {} + '@chevrotain/types@10.5.0': {} - '@chevrotain/utils@11.1.1': {} + '@chevrotain/types@11.1.2': {} + + '@chevrotain/utils@10.5.0': {} + + '@chevrotain/utils@11.1.2': {} '@cloudflare/kv-asset-handler@0.4.1': dependencies: @@ -8522,11 +8876,11 @@ snapshots: '@cloudflare/kv-asset-handler@0.4.2': {} - '@cloudflare/unenv-preset@2.14.0(unenv@2.0.0-rc.24)(workerd@1.20260305.0)': + '@cloudflare/unenv-preset@2.15.0(unenv@2.0.0-rc.24)(workerd@1.20260301.1)': dependencies: unenv: 2.0.0-rc.24 optionalDependencies: - workerd: 1.20260305.0 + workerd: 1.20260301.1 '@cloudflare/unenv-preset@2.7.13(unenv@2.0.0-rc.24)(workerd@1.20251217.0)': dependencies: @@ -8534,7 +8888,7 @@ snapshots: optionalDependencies: workerd: 1.20251217.0 - '@cloudflare/vitest-pool-workers@0.11.1(@cloudflare/workers-types@4.20260305.0)(@vitest/runner@4.0.18)(@vitest/snapshot@4.0.18)(vitest@3.2.0(@types/node@25.3.1)(jiti@2.6.1)(jsdom@27.4.0(@noble/hashes@2.0.1))(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))': + '@cloudflare/vitest-pool-workers@0.11.1(@cloudflare/workers-types@4.20260307.1)(@vitest/runner@4.0.18)(@vitest/snapshot@4.0.18)(vitest@3.2.0(@types/node@25.3.5)(jiti@2.6.1)(jsdom@27.4.0(@noble/hashes@2.0.1))(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))': dependencies: '@vitest/runner': 4.0.18 '@vitest/snapshot': 4.0.18 @@ -8544,8 +8898,8 @@ snapshots: esbuild: 0.27.0 miniflare: 4.20251217.0 semver: 7.7.4 - vitest: 3.2.0(@types/node@25.3.1)(jiti@2.6.1)(jsdom@27.4.0(@noble/hashes@2.0.1))(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) - wrangler: 4.56.0(@cloudflare/workers-types@4.20260305.0) + vitest: 3.2.0(@types/node@25.3.5)(jiti@2.6.1)(jsdom@27.4.0(@noble/hashes@2.0.1))(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + wrangler: 4.56.0(@cloudflare/workers-types@4.20260307.1) zod: 3.25.76 transitivePeerDependencies: - '@cloudflare/workers-types' @@ -8555,34 +8909,34 @@ snapshots: '@cloudflare/workerd-darwin-64@1.20251217.0': optional: true - '@cloudflare/workerd-darwin-64@1.20260305.0': + '@cloudflare/workerd-darwin-64@1.20260301.1': optional: true '@cloudflare/workerd-darwin-arm64@1.20251217.0': optional: true - '@cloudflare/workerd-darwin-arm64@1.20260305.0': + '@cloudflare/workerd-darwin-arm64@1.20260301.1': optional: true '@cloudflare/workerd-linux-64@1.20251217.0': optional: true - '@cloudflare/workerd-linux-64@1.20260305.0': + '@cloudflare/workerd-linux-64@1.20260301.1': optional: true '@cloudflare/workerd-linux-arm64@1.20251217.0': optional: true - '@cloudflare/workerd-linux-arm64@1.20260305.0': + '@cloudflare/workerd-linux-arm64@1.20260301.1': optional: true '@cloudflare/workerd-windows-64@1.20251217.0': optional: true - '@cloudflare/workerd-windows-64@1.20260305.0': + '@cloudflare/workerd-windows-64@1.20260301.1': optional: true - '@cloudflare/workers-types@4.20260305.0': {} + '@cloudflare/workers-types@4.20260307.1': {} '@cspotcode/source-map-support@0.8.1': dependencies: @@ -8606,7 +8960,7 @@ snapshots: dependencies: '@csstools/css-tokenizer': 4.0.0 - '@csstools/css-syntax-patches-for-csstree@1.0.28': {} + '@csstools/css-syntax-patches-for-csstree@1.1.0': {} '@csstools/css-tokenizer@4.0.0': {} @@ -8643,17 +8997,27 @@ snapshots: '@drizzle-team/brocli@0.10.2': {} - '@embedpdf/core@2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3))': + '@electric-sql/pglite-socket@0.0.20(@electric-sql/pglite@0.3.15)': + dependencies: + '@electric-sql/pglite': 0.3.15 + + '@electric-sql/pglite-tools@0.2.20(@electric-sql/pglite@0.3.15)': + dependencies: + '@electric-sql/pglite': 0.3.15 + + '@electric-sql/pglite@0.3.15': {} + + '@embedpdf/core@2.8.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3))': dependencies: - '@embedpdf/engines': 2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) - '@embedpdf/models': 2.7.0 + '@embedpdf/engines': 2.8.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) + '@embedpdf/models': 2.8.0 preact: 10.28.4 react: 19.2.4 react-dom: 19.2.3(react@19.2.4) svelte: 5.46.1 vue: 3.5.29(typescript@5.9.3) - '@embedpdf/engines@2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3))': + '@embedpdf/engines@2.8.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3))': dependencies: '@embedpdf/fonts-arabic': 1.0.0 '@embedpdf/fonts-hebrew': 1.0.0 @@ -8662,8 +9026,8 @@ snapshots: '@embedpdf/fonts-latin': 1.0.0 '@embedpdf/fonts-sc': 1.0.0 '@embedpdf/fonts-tc': 1.0.0 - '@embedpdf/models': 2.7.0 - '@embedpdf/pdfium': 2.7.0 + '@embedpdf/models': 2.8.0 + '@embedpdf/pdfium': 2.8.0 preact: 10.28.4 react: 19.2.4 react-dom: 19.2.3(react@19.2.4) @@ -8684,276 +9048,276 @@ snapshots: '@embedpdf/fonts-tc@1.0.0': {} - '@embedpdf/models@2.7.0': {} + '@embedpdf/models@2.8.0': {} - '@embedpdf/pdfium@2.7.0': {} + '@embedpdf/pdfium@2.8.0': {} - '@embedpdf/plugin-annotation@2.7.0(f91e72ac9819744cb003db79e9d0556d)': + '@embedpdf/plugin-annotation@2.8.0(a402eff97e44b8a035d7f545c7158135)': dependencies: - '@embedpdf/core': 2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) - '@embedpdf/models': 2.7.0 - '@embedpdf/plugin-history': 2.7.0(@embedpdf/core@2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) - '@embedpdf/plugin-interaction-manager': 2.7.0(@embedpdf/core@2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) - '@embedpdf/plugin-selection': 2.7.0(@embedpdf/core@2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(@embedpdf/plugin-interaction-manager@2.7.0(@embedpdf/core@2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) - '@embedpdf/utils': 2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) + '@embedpdf/core': 2.8.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) + '@embedpdf/models': 2.8.0 + '@embedpdf/plugin-history': 2.8.0(@embedpdf/core@2.8.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) + '@embedpdf/plugin-interaction-manager': 2.8.0(@embedpdf/core@2.8.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) + '@embedpdf/plugin-selection': 2.8.0(@embedpdf/core@2.8.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(@embedpdf/plugin-interaction-manager@2.8.0(@embedpdf/core@2.8.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) + '@embedpdf/utils': 2.8.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) preact: 10.28.4 react: 19.2.4 react-dom: 19.2.3(react@19.2.4) svelte: 5.46.1 vue: 3.5.29(typescript@5.9.3) - '@embedpdf/plugin-capture@2.7.0(@embedpdf/core@2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(@embedpdf/plugin-interaction-manager@2.7.0(@embedpdf/core@2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(@embedpdf/plugin-render@2.7.0(@embedpdf/core@2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3))': + '@embedpdf/plugin-capture@2.8.0(@embedpdf/core@2.8.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(@embedpdf/plugin-interaction-manager@2.8.0(@embedpdf/core@2.8.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(@embedpdf/plugin-render@2.8.0(@embedpdf/core@2.8.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3))': dependencies: - '@embedpdf/core': 2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) - '@embedpdf/models': 2.7.0 - '@embedpdf/plugin-interaction-manager': 2.7.0(@embedpdf/core@2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) - '@embedpdf/plugin-render': 2.7.0(@embedpdf/core@2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) + '@embedpdf/core': 2.8.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) + '@embedpdf/models': 2.8.0 + '@embedpdf/plugin-interaction-manager': 2.8.0(@embedpdf/core@2.8.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) + '@embedpdf/plugin-render': 2.8.0(@embedpdf/core@2.8.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) preact: 10.28.4 react: 19.2.4 react-dom: 19.2.3(react@19.2.4) svelte: 5.46.1 vue: 3.5.29(typescript@5.9.3) - '@embedpdf/plugin-commands@2.7.0(@embedpdf/core@2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3))': + '@embedpdf/plugin-commands@2.8.0(@embedpdf/core@2.8.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3))': dependencies: - '@embedpdf/core': 2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) - '@embedpdf/models': 2.7.0 + '@embedpdf/core': 2.8.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) + '@embedpdf/models': 2.8.0 preact: 10.28.4 react: 19.2.4 react-dom: 19.2.3(react@19.2.4) svelte: 5.46.1 vue: 3.5.29(typescript@5.9.3) - '@embedpdf/plugin-document-manager@2.7.0(@embedpdf/core@2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3))': + '@embedpdf/plugin-document-manager@2.8.0(@embedpdf/core@2.8.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3))': dependencies: - '@embedpdf/core': 2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) - '@embedpdf/models': 2.7.0 + '@embedpdf/core': 2.8.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) + '@embedpdf/models': 2.8.0 preact: 10.28.4 react: 19.2.4 react-dom: 19.2.3(react@19.2.4) svelte: 5.46.1 vue: 3.5.29(typescript@5.9.3) - '@embedpdf/plugin-export@2.7.0(@embedpdf/core@2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3))': + '@embedpdf/plugin-export@2.8.0(@embedpdf/core@2.8.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3))': dependencies: - '@embedpdf/core': 2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) - '@embedpdf/models': 2.7.0 + '@embedpdf/core': 2.8.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) + '@embedpdf/models': 2.8.0 preact: 10.28.4 react: 19.2.4 react-dom: 19.2.3(react@19.2.4) svelte: 5.46.1 vue: 3.5.29(typescript@5.9.3) - '@embedpdf/plugin-fullscreen@2.7.0(@embedpdf/core@2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3))': + '@embedpdf/plugin-fullscreen@2.8.0(@embedpdf/core@2.8.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3))': dependencies: - '@embedpdf/core': 2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) - '@embedpdf/models': 2.7.0 + '@embedpdf/core': 2.8.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) + '@embedpdf/models': 2.8.0 preact: 10.28.4 react: 19.2.4 react-dom: 19.2.3(react@19.2.4) svelte: 5.46.1 vue: 3.5.29(typescript@5.9.3) - '@embedpdf/plugin-history@2.7.0(@embedpdf/core@2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3))': + '@embedpdf/plugin-history@2.8.0(@embedpdf/core@2.8.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3))': dependencies: - '@embedpdf/core': 2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) - '@embedpdf/models': 2.7.0 + '@embedpdf/core': 2.8.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) + '@embedpdf/models': 2.8.0 preact: 10.28.4 react: 19.2.4 react-dom: 19.2.3(react@19.2.4) svelte: 5.46.1 vue: 3.5.29(typescript@5.9.3) - '@embedpdf/plugin-i18n@2.7.0(@embedpdf/core@2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3))': + '@embedpdf/plugin-i18n@2.8.0(@embedpdf/core@2.8.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3))': dependencies: - '@embedpdf/core': 2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) - '@embedpdf/models': 2.7.0 + '@embedpdf/core': 2.8.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) + '@embedpdf/models': 2.8.0 preact: 10.28.4 react: 19.2.4 react-dom: 19.2.3(react@19.2.4) svelte: 5.46.1 vue: 3.5.29(typescript@5.9.3) - '@embedpdf/plugin-interaction-manager@2.7.0(@embedpdf/core@2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3))': + '@embedpdf/plugin-interaction-manager@2.8.0(@embedpdf/core@2.8.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3))': dependencies: - '@embedpdf/core': 2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) - '@embedpdf/models': 2.7.0 + '@embedpdf/core': 2.8.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) + '@embedpdf/models': 2.8.0 preact: 10.28.4 react: 19.2.4 react-dom: 19.2.3(react@19.2.4) svelte: 5.46.1 vue: 3.5.29(typescript@5.9.3) - '@embedpdf/plugin-pan@2.7.0(@embedpdf/core@2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(@embedpdf/plugin-interaction-manager@2.7.0(@embedpdf/core@2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(@embedpdf/plugin-viewport@2.7.0(@embedpdf/core@2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3))': + '@embedpdf/plugin-pan@2.8.0(@embedpdf/core@2.8.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(@embedpdf/plugin-interaction-manager@2.8.0(@embedpdf/core@2.8.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(@embedpdf/plugin-viewport@2.8.0(@embedpdf/core@2.8.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3))': dependencies: - '@embedpdf/core': 2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) - '@embedpdf/models': 2.7.0 - '@embedpdf/plugin-interaction-manager': 2.7.0(@embedpdf/core@2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) - '@embedpdf/plugin-viewport': 2.7.0(@embedpdf/core@2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) + '@embedpdf/core': 2.8.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) + '@embedpdf/models': 2.8.0 + '@embedpdf/plugin-interaction-manager': 2.8.0(@embedpdf/core@2.8.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) + '@embedpdf/plugin-viewport': 2.8.0(@embedpdf/core@2.8.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) preact: 10.28.4 react: 19.2.4 react-dom: 19.2.3(react@19.2.4) svelte: 5.46.1 vue: 3.5.29(typescript@5.9.3) - '@embedpdf/plugin-print@2.7.0(@embedpdf/core@2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3))': + '@embedpdf/plugin-print@2.8.0(@embedpdf/core@2.8.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3))': dependencies: - '@embedpdf/core': 2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) - '@embedpdf/models': 2.7.0 + '@embedpdf/core': 2.8.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) + '@embedpdf/models': 2.8.0 preact: 10.28.4 react: 19.2.4 react-dom: 19.2.3(react@19.2.4) svelte: 5.46.1 vue: 3.5.29(typescript@5.9.3) - '@embedpdf/plugin-redaction@2.7.0(5f456a3f53bec2768d3935038fafaf9c)': + '@embedpdf/plugin-redaction@2.8.0(4de63f8d21781097e5d675cdbaf73f71)': dependencies: - '@embedpdf/core': 2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) - '@embedpdf/models': 2.7.0 - '@embedpdf/plugin-annotation': 2.7.0(f91e72ac9819744cb003db79e9d0556d) - '@embedpdf/plugin-history': 2.7.0(@embedpdf/core@2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) - '@embedpdf/plugin-interaction-manager': 2.7.0(@embedpdf/core@2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) - '@embedpdf/plugin-selection': 2.7.0(@embedpdf/core@2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(@embedpdf/plugin-interaction-manager@2.7.0(@embedpdf/core@2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) - '@embedpdf/utils': 2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) + '@embedpdf/core': 2.8.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) + '@embedpdf/models': 2.8.0 + '@embedpdf/plugin-annotation': 2.8.0(a402eff97e44b8a035d7f545c7158135) + '@embedpdf/plugin-history': 2.8.0(@embedpdf/core@2.8.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) + '@embedpdf/plugin-interaction-manager': 2.8.0(@embedpdf/core@2.8.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) + '@embedpdf/plugin-selection': 2.8.0(@embedpdf/core@2.8.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(@embedpdf/plugin-interaction-manager@2.8.0(@embedpdf/core@2.8.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) + '@embedpdf/utils': 2.8.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) preact: 10.28.4 react: 19.2.4 react-dom: 19.2.3(react@19.2.4) svelte: 5.46.1 vue: 3.5.29(typescript@5.9.3) - '@embedpdf/plugin-render@2.7.0(@embedpdf/core@2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3))': + '@embedpdf/plugin-render@2.8.0(@embedpdf/core@2.8.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3))': dependencies: - '@embedpdf/core': 2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) - '@embedpdf/models': 2.7.0 + '@embedpdf/core': 2.8.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) + '@embedpdf/models': 2.8.0 preact: 10.28.4 react: 19.2.4 react-dom: 19.2.3(react@19.2.4) svelte: 5.46.1 vue: 3.5.29(typescript@5.9.3) - '@embedpdf/plugin-rotate@2.7.0(@embedpdf/core@2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3))': + '@embedpdf/plugin-rotate@2.8.0(@embedpdf/core@2.8.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3))': dependencies: - '@embedpdf/core': 2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) - '@embedpdf/models': 2.7.0 + '@embedpdf/core': 2.8.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) + '@embedpdf/models': 2.8.0 preact: 10.28.4 react: 19.2.4 react-dom: 19.2.3(react@19.2.4) svelte: 5.46.1 vue: 3.5.29(typescript@5.9.3) - '@embedpdf/plugin-scroll@2.7.0(@embedpdf/core@2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(@embedpdf/plugin-viewport@2.7.0(@embedpdf/core@2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3))': + '@embedpdf/plugin-scroll@2.8.0(@embedpdf/core@2.8.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(@embedpdf/plugin-viewport@2.8.0(@embedpdf/core@2.8.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3))': dependencies: - '@embedpdf/core': 2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) - '@embedpdf/models': 2.7.0 - '@embedpdf/plugin-viewport': 2.7.0(@embedpdf/core@2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) + '@embedpdf/core': 2.8.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) + '@embedpdf/models': 2.8.0 + '@embedpdf/plugin-viewport': 2.8.0(@embedpdf/core@2.8.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) preact: 10.28.4 react: 19.2.4 react-dom: 19.2.3(react@19.2.4) svelte: 5.46.1 vue: 3.5.29(typescript@5.9.3) - '@embedpdf/plugin-search@2.7.0(@embedpdf/core@2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3))': + '@embedpdf/plugin-search@2.8.0(@embedpdf/core@2.8.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3))': dependencies: - '@embedpdf/core': 2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) - '@embedpdf/models': 2.7.0 + '@embedpdf/core': 2.8.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) + '@embedpdf/models': 2.8.0 preact: 10.28.4 react: 19.2.4 react-dom: 19.2.3(react@19.2.4) svelte: 5.46.1 vue: 3.5.29(typescript@5.9.3) - '@embedpdf/plugin-selection@2.7.0(@embedpdf/core@2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(@embedpdf/plugin-interaction-manager@2.7.0(@embedpdf/core@2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3))': + '@embedpdf/plugin-selection@2.8.0(@embedpdf/core@2.8.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(@embedpdf/plugin-interaction-manager@2.8.0(@embedpdf/core@2.8.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3))': dependencies: - '@embedpdf/core': 2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) - '@embedpdf/models': 2.7.0 - '@embedpdf/plugin-interaction-manager': 2.7.0(@embedpdf/core@2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) - '@embedpdf/utils': 2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) + '@embedpdf/core': 2.8.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) + '@embedpdf/models': 2.8.0 + '@embedpdf/plugin-interaction-manager': 2.8.0(@embedpdf/core@2.8.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) + '@embedpdf/utils': 2.8.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) preact: 10.28.4 react: 19.2.4 react-dom: 19.2.3(react@19.2.4) svelte: 5.46.1 vue: 3.5.29(typescript@5.9.3) - '@embedpdf/plugin-spread@2.7.0(@embedpdf/core@2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3))': + '@embedpdf/plugin-spread@2.8.0(@embedpdf/core@2.8.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3))': dependencies: - '@embedpdf/core': 2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) - '@embedpdf/models': 2.7.0 + '@embedpdf/core': 2.8.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) + '@embedpdf/models': 2.8.0 preact: 10.28.4 react: 19.2.4 react-dom: 19.2.3(react@19.2.4) svelte: 5.46.1 vue: 3.5.29(typescript@5.9.3) - '@embedpdf/plugin-thumbnail@2.7.0(@embedpdf/core@2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(@embedpdf/plugin-render@2.7.0(@embedpdf/core@2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3))': + '@embedpdf/plugin-thumbnail@2.8.0(@embedpdf/core@2.8.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(@embedpdf/plugin-render@2.8.0(@embedpdf/core@2.8.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3))': dependencies: - '@embedpdf/core': 2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) - '@embedpdf/models': 2.7.0 - '@embedpdf/plugin-render': 2.7.0(@embedpdf/core@2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) + '@embedpdf/core': 2.8.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) + '@embedpdf/models': 2.8.0 + '@embedpdf/plugin-render': 2.8.0(@embedpdf/core@2.8.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) preact: 10.28.4 react: 19.2.4 react-dom: 19.2.3(react@19.2.4) svelte: 5.46.1 vue: 3.5.29(typescript@5.9.3) - '@embedpdf/plugin-tiling@2.7.0(5a96f8242ae086e623dd61223674fb9c)': + '@embedpdf/plugin-tiling@2.8.0(a2178b18b2fd24a91650f4cf7697ee26)': dependencies: - '@embedpdf/core': 2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) - '@embedpdf/models': 2.7.0 - '@embedpdf/plugin-render': 2.7.0(@embedpdf/core@2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) - '@embedpdf/plugin-scroll': 2.7.0(@embedpdf/core@2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(@embedpdf/plugin-viewport@2.7.0(@embedpdf/core@2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) - '@embedpdf/plugin-viewport': 2.7.0(@embedpdf/core@2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) + '@embedpdf/core': 2.8.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) + '@embedpdf/models': 2.8.0 + '@embedpdf/plugin-render': 2.8.0(@embedpdf/core@2.8.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) + '@embedpdf/plugin-scroll': 2.8.0(@embedpdf/core@2.8.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(@embedpdf/plugin-viewport@2.8.0(@embedpdf/core@2.8.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) + '@embedpdf/plugin-viewport': 2.8.0(@embedpdf/core@2.8.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) preact: 10.28.4 react: 19.2.4 react-dom: 19.2.3(react@19.2.4) svelte: 5.46.1 vue: 3.5.29(typescript@5.9.3) - '@embedpdf/plugin-ui@2.7.0(5a96f8242ae086e623dd61223674fb9c)': + '@embedpdf/plugin-ui@2.8.0(a2178b18b2fd24a91650f4cf7697ee26)': dependencies: - '@embedpdf/core': 2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) - '@embedpdf/models': 2.7.0 - '@embedpdf/plugin-render': 2.7.0(@embedpdf/core@2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) - '@embedpdf/plugin-scroll': 2.7.0(@embedpdf/core@2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(@embedpdf/plugin-viewport@2.7.0(@embedpdf/core@2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) - '@embedpdf/plugin-viewport': 2.7.0(@embedpdf/core@2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) + '@embedpdf/core': 2.8.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) + '@embedpdf/models': 2.8.0 + '@embedpdf/plugin-render': 2.8.0(@embedpdf/core@2.8.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) + '@embedpdf/plugin-scroll': 2.8.0(@embedpdf/core@2.8.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(@embedpdf/plugin-viewport@2.8.0(@embedpdf/core@2.8.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) + '@embedpdf/plugin-viewport': 2.8.0(@embedpdf/core@2.8.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) preact: 10.28.4 react: 19.2.4 react-dom: 19.2.3(react@19.2.4) svelte: 5.46.1 vue: 3.5.29(typescript@5.9.3) - '@embedpdf/plugin-view-manager@2.7.0(@embedpdf/core@2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3))': + '@embedpdf/plugin-view-manager@2.8.0(@embedpdf/core@2.8.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3))': dependencies: - '@embedpdf/core': 2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) - '@embedpdf/models': 2.7.0 + '@embedpdf/core': 2.8.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) + '@embedpdf/models': 2.8.0 preact: 10.28.4 react: 19.2.4 react-dom: 19.2.3(react@19.2.4) svelte: 5.46.1 vue: 3.5.29(typescript@5.9.3) - '@embedpdf/plugin-viewport@2.7.0(@embedpdf/core@2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3))': + '@embedpdf/plugin-viewport@2.8.0(@embedpdf/core@2.8.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3))': dependencies: - '@embedpdf/core': 2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) - '@embedpdf/models': 2.7.0 + '@embedpdf/core': 2.8.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) + '@embedpdf/models': 2.8.0 preact: 10.28.4 react: 19.2.4 react-dom: 19.2.3(react@19.2.4) svelte: 5.46.1 vue: 3.5.29(typescript@5.9.3) - '@embedpdf/plugin-zoom@2.7.0(68cdd6270a43970eb3cc490f0b97d81a)': + '@embedpdf/plugin-zoom@2.8.0(8fba2ba33b2b9290d7f6d6cffabe8012)': dependencies: - '@embedpdf/core': 2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) - '@embedpdf/models': 2.7.0 - '@embedpdf/plugin-scroll': 2.7.0(@embedpdf/core@2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(@embedpdf/plugin-viewport@2.7.0(@embedpdf/core@2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) - '@embedpdf/plugin-viewport': 2.7.0(@embedpdf/core@2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) + '@embedpdf/core': 2.8.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) + '@embedpdf/models': 2.8.0 + '@embedpdf/plugin-scroll': 2.8.0(@embedpdf/core@2.8.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(@embedpdf/plugin-viewport@2.8.0(@embedpdf/core@2.8.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) + '@embedpdf/plugin-viewport': 2.8.0(@embedpdf/core@2.8.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)))(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3)) preact: 10.28.4 react: 19.2.4 react-dom: 19.2.3(react@19.2.4) svelte: 5.46.1 vue: 3.5.29(typescript@5.9.3) - '@embedpdf/utils@2.7.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3))': + '@embedpdf/utils@2.8.0(preact@10.28.4)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(svelte@5.46.1)(vue@3.5.29(typescript@5.9.3))': dependencies: preact: 10.28.4 react: 19.2.4 @@ -9356,14 +9720,14 @@ snapshots: '@esbuild/win32-x64@0.27.3': optional: true - '@eslint-community/eslint-utils@4.9.1(eslint@9.39.3(jiti@2.6.1))': + '@eslint-community/eslint-utils@4.9.1(eslint@9.39.4(jiti@2.6.1))': dependencies: - eslint: 9.39.3(jiti@2.6.1) + eslint: 9.39.4(jiti@2.6.1) eslint-visitor-keys: 3.4.3 '@eslint-community/regexpp@4.12.2': {} - '@eslint/config-array@0.21.1': + '@eslint/config-array@0.21.2': dependencies: '@eslint/object-schema': 2.1.7 debug: 4.4.3 @@ -9379,7 +9743,7 @@ snapshots: dependencies: '@types/json-schema': 7.0.15 - '@eslint/eslintrc@3.3.4': + '@eslint/eslintrc@3.3.5': dependencies: ajv: 6.14.0 debug: 4.4.3 @@ -9393,7 +9757,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@eslint/js@9.39.3': {} + '@eslint/js@9.39.4': {} '@eslint/object-schema@2.1.7': {} @@ -9402,36 +9766,40 @@ snapshots: '@eslint/core': 0.17.0 levn: 0.4.1 - '@exodus/bytes@1.14.1(@noble/hashes@2.0.1)': + '@exodus/bytes@1.15.0(@noble/hashes@2.0.1)': optionalDependencies: '@noble/hashes': 2.0.1 - '@floating-ui/core@1.7.4': + '@floating-ui/core@1.7.5': dependencies: - '@floating-ui/utils': 0.2.10 + '@floating-ui/utils': 0.2.11 - '@floating-ui/dom@1.7.5': + '@floating-ui/dom@1.7.6': dependencies: - '@floating-ui/core': 1.7.4 - '@floating-ui/utils': 0.2.10 + '@floating-ui/core': 1.7.5 + '@floating-ui/utils': 0.2.11 - '@floating-ui/utils@0.2.10': {} + '@floating-ui/utils@0.2.11': {} - '@hono/node-server@1.19.9(hono@4.12.3)': + '@hono/node-server@1.19.11(hono@4.12.5)': dependencies: - hono: 4.12.3 + hono: 4.12.5 - '@hono/zod-openapi@1.2.2(hono@4.12.3)(zod@4.3.6)': + '@hono/node-server@1.19.9(hono@4.11.4)': dependencies: - '@asteasolutions/zod-to-openapi': 8.4.1(zod@4.3.6) - '@hono/zod-validator': 0.7.6(hono@4.12.3)(zod@4.3.6) - hono: 4.12.3 + hono: 4.11.4 + + '@hono/zod-openapi@1.2.2(hono@4.12.5)(zod@4.3.6)': + dependencies: + '@asteasolutions/zod-to-openapi': 8.4.3(zod@4.3.6) + '@hono/zod-validator': 0.7.6(hono@4.12.5)(zod@4.3.6) + hono: 4.12.5 openapi3-ts: 4.5.0 zod: 4.3.6 - '@hono/zod-validator@0.7.6(hono@4.12.3)(zod@4.3.6)': + '@hono/zod-validator@0.7.6(hono@4.12.5)(zod@4.3.6)': dependencies: - hono: 4.12.3 + hono: 4.12.5 zod: 4.3.6 '@huggingface/jinja@0.2.2': {} @@ -9447,7 +9815,7 @@ snapshots: '@humanwhocodes/retry@0.4.3': {} - '@iconify-json/simple-icons@1.2.71': + '@iconify-json/simple-icons@1.2.72': dependencies: '@iconify/types': 2.0.0 @@ -9457,9 +9825,9 @@ snapshots: dependencies: '@antfu/install-pkg': 1.1.0 '@iconify/types': 2.0.0 - mlly: 1.8.0 + mlly: 1.8.1 - '@img/colour@1.0.0': {} + '@img/colour@1.1.0': {} '@img/sharp-darwin-arm64@0.33.5': optionalDependencies: @@ -9638,7 +10006,7 @@ snapshots: dependencies: '@swc/helpers': 0.5.19 - '@ioredis/commands@1.5.0': {} + '@ioredis/commands@1.5.1': {} '@isaacs/balanced-match@4.0.1': {} @@ -9698,7 +10066,7 @@ snapshots: node-fetch: 2.7.0 nopt: 8.1.0 semver: 7.7.4 - tar: 7.5.9 + tar: 7.5.10 transitivePeerDependencies: - encoding - supports-color @@ -9720,7 +10088,7 @@ snapshots: '@modelcontextprotocol/sdk@1.27.1(zod@4.3.6)': dependencies: - '@hono/node-server': 1.19.9(hono@4.12.3) + '@hono/node-server': 1.19.11(hono@4.12.5) ajv: 8.18.0 ajv-formats: 3.0.1(ajv@8.18.0) content-type: 1.0.5 @@ -9729,9 +10097,9 @@ snapshots: eventsource: 3.0.7 eventsource-parser: 3.0.6 express: 5.2.1 - express-rate-limit: 8.2.1(express@5.2.1) - hono: 4.12.3 - jose: 6.1.3 + express-rate-limit: 8.3.0(express@5.2.1) + hono: 4.12.5 + jose: 6.2.0 json-schema-typed: 8.0.2 pkce-challenge: 5.0.1 raw-body: 3.0.2 @@ -9740,6 +10108,15 @@ snapshots: transitivePeerDependencies: - supports-color + '@mongodb-js/saslprep@1.4.6': + dependencies: + sparse-bitfield: 3.0.3 + + '@mrleebo/prisma-ast@0.13.1': + dependencies: + chevrotain: 10.5.0 + lilconfig: 2.1.0 + '@napi-rs/wasm-runtime@1.1.1': dependencies: '@emnapi/core': 1.8.1 @@ -9864,18 +10241,18 @@ snapshots: '@poppinss/exception@1.2.3': {} - '@preact/preset-vite@2.10.3(@babel/core@7.29.0)(preact@10.28.4)(rollup@4.59.0)(vite@7.3.1(@types/node@25.3.1)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))': + '@preact/preset-vite@2.10.3(@babel/core@7.29.0)(preact@10.28.4)(rollup@4.59.0)(vite@7.3.1(@types/node@25.3.5)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))': dependencies: '@babel/core': 7.29.0 '@babel/plugin-transform-react-jsx': 7.28.6(@babel/core@7.29.0) '@babel/plugin-transform-react-jsx-development': 7.27.1(@babel/core@7.29.0) - '@prefresh/vite': 2.4.12(preact@10.28.4)(vite@7.3.1(@types/node@25.3.1)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)) + '@prefresh/vite': 2.4.12(preact@10.28.4)(vite@7.3.1(@types/node@25.3.5)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)) '@rollup/pluginutils': 5.3.0(rollup@4.59.0) babel-plugin-transform-hook-names: 1.0.2(@babel/core@7.29.0) debug: 4.4.3 picocolors: 1.1.1 - vite: 7.3.1(@types/node@25.3.1)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) - vite-prerender-plugin: 0.5.12(vite@7.3.1(@types/node@25.3.1)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)) + vite: 7.3.1(@types/node@25.3.5)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + vite-prerender-plugin: 0.5.12(vite@7.3.1(@types/node@25.3.5)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)) transitivePeerDependencies: - preact - rollup @@ -9889,7 +10266,7 @@ snapshots: '@prefresh/utils@1.2.1': {} - '@prefresh/vite@2.4.12(preact@10.28.4)(vite@7.3.1(@types/node@25.3.1)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))': + '@prefresh/vite@2.4.12(preact@10.28.4)(vite@7.3.1(@types/node@25.3.5)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))': dependencies: '@babel/core': 7.29.0 '@prefresh/babel-plugin': 0.5.3 @@ -9897,10 +10274,85 @@ snapshots: '@prefresh/utils': 1.2.1 '@rollup/pluginutils': 4.2.1 preact: 10.28.4 - vite: 7.3.1(@types/node@25.3.1)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + vite: 7.3.1(@types/node@25.3.5)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) transitivePeerDependencies: - supports-color + '@prisma/client-runtime-utils@7.4.2': {} + + '@prisma/client@7.4.2(prisma@7.4.2(@types/react@19.2.14)(better-sqlite3@12.6.2)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(typescript@5.9.3)': + dependencies: + '@prisma/client-runtime-utils': 7.4.2 + optionalDependencies: + prisma: 7.4.2(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.5.2)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(typescript@5.9.3) + typescript: 5.9.3 + + '@prisma/config@7.4.2(magicast@0.5.2)': + dependencies: + c12: 3.1.0(magicast@0.5.2) + deepmerge-ts: 7.1.5 + effect: 3.18.4 + empathic: 2.0.0 + transitivePeerDependencies: + - magicast + + '@prisma/debug@7.2.0': {} + + '@prisma/debug@7.4.2': {} + + '@prisma/dev@0.20.0(typescript@5.9.3)': + dependencies: + '@electric-sql/pglite': 0.3.15 + '@electric-sql/pglite-socket': 0.0.20(@electric-sql/pglite@0.3.15) + '@electric-sql/pglite-tools': 0.2.20(@electric-sql/pglite@0.3.15) + '@hono/node-server': 1.19.9(hono@4.11.4) + '@mrleebo/prisma-ast': 0.13.1 + '@prisma/get-platform': 7.2.0 + '@prisma/query-plan-executor': 7.2.0 + foreground-child: 3.3.1 + get-port-please: 3.2.0 + hono: 4.11.4 + http-status-codes: 2.3.0 + pathe: 2.0.3 + proper-lockfile: 4.1.2 + remeda: 2.33.4 + std-env: 3.10.0 + valibot: 1.2.0(typescript@5.9.3) + zeptomatch: 2.1.0 + transitivePeerDependencies: + - typescript + + '@prisma/engines-version@7.5.0-10.94a226be1cf2967af2541cca5529f0f7ba866919': {} + + '@prisma/engines@7.4.2': + dependencies: + '@prisma/debug': 7.4.2 + '@prisma/engines-version': 7.5.0-10.94a226be1cf2967af2541cca5529f0f7ba866919 + '@prisma/fetch-engine': 7.4.2 + '@prisma/get-platform': 7.4.2 + + '@prisma/fetch-engine@7.4.2': + dependencies: + '@prisma/debug': 7.4.2 + '@prisma/engines-version': 7.5.0-10.94a226be1cf2967af2541cca5529f0f7ba866919 + '@prisma/get-platform': 7.4.2 + + '@prisma/get-platform@7.2.0': + dependencies: + '@prisma/debug': 7.2.0 + + '@prisma/get-platform@7.4.2': + dependencies: + '@prisma/debug': 7.4.2 + + '@prisma/query-plan-executor@7.2.0': {} + + '@prisma/studio-core@0.13.1(@types/react@19.2.14)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)': + dependencies: + '@types/react': 19.2.14 + react: 19.2.4 + react-dom: 19.2.3(react@19.2.4) + '@protobufjs/aspromise@1.1.2': {} '@protobufjs/base64@1.1.2': {} @@ -9931,7 +10383,7 @@ snapshots: progress: 2.0.3 proxy-agent: 6.5.0 semver: 7.7.4 - tar-fs: 3.1.1 + tar-fs: 3.1.2 yargs: 17.7.2 transitivePeerDependencies: - bare-abort-controller @@ -9990,7 +10442,7 @@ snapshots: optionalDependencies: rollup: 4.59.0 - '@rollup/plugin-commonjs@29.0.0(rollup@4.59.0)': + '@rollup/plugin-commonjs@29.0.2(rollup@4.59.0)': dependencies: '@rollup/pluginutils': 5.3.0(rollup@4.59.0) commondir: 1.0.1 @@ -10129,45 +10581,45 @@ snapshots: '@rollup/rollup-win32-x64-msvc@4.59.0': optional: true - '@sentry-internal/browser-utils@10.40.0': + '@sentry-internal/browser-utils@10.42.0': dependencies: - '@sentry/core': 10.40.0 + '@sentry/core': 10.42.0 - '@sentry-internal/feedback@10.40.0': + '@sentry-internal/feedback@10.42.0': dependencies: - '@sentry/core': 10.40.0 + '@sentry/core': 10.42.0 - '@sentry-internal/replay-canvas@10.40.0': + '@sentry-internal/replay-canvas@10.42.0': dependencies: - '@sentry-internal/replay': 10.40.0 - '@sentry/core': 10.40.0 + '@sentry-internal/replay': 10.42.0 + '@sentry/core': 10.42.0 - '@sentry-internal/replay@10.40.0': + '@sentry-internal/replay@10.42.0': dependencies: - '@sentry-internal/browser-utils': 10.40.0 - '@sentry/core': 10.40.0 + '@sentry-internal/browser-utils': 10.42.0 + '@sentry/core': 10.42.0 - '@sentry/browser@10.40.0': + '@sentry/browser@10.42.0': dependencies: - '@sentry-internal/browser-utils': 10.40.0 - '@sentry-internal/feedback': 10.40.0 - '@sentry-internal/replay': 10.40.0 - '@sentry-internal/replay-canvas': 10.40.0 - '@sentry/core': 10.40.0 + '@sentry-internal/browser-utils': 10.42.0 + '@sentry-internal/feedback': 10.42.0 + '@sentry-internal/replay': 10.42.0 + '@sentry-internal/replay-canvas': 10.42.0 + '@sentry/core': 10.42.0 - '@sentry/cloudflare@10.40.0(@cloudflare/workers-types@4.20260305.0)': + '@sentry/cloudflare@10.42.0(@cloudflare/workers-types@4.20260307.1)': dependencies: '@opentelemetry/api': 1.9.0 - '@sentry/core': 10.40.0 + '@sentry/core': 10.42.0 optionalDependencies: - '@cloudflare/workers-types': 4.20260305.0 + '@cloudflare/workers-types': 4.20260307.1 - '@sentry/core@10.40.0': {} + '@sentry/core@10.42.0': {} - '@sentry/solid@10.40.0(@solidjs/router@0.15.4(solid-js@1.9.11))(solid-js@1.9.11)': + '@sentry/solid@10.42.0(@solidjs/router@0.15.4(solid-js@1.9.11))(solid-js@1.9.11)': dependencies: - '@sentry/browser': 10.40.0 - '@sentry/core': 10.40.0 + '@sentry/browser': 10.42.0 + '@sentry/core': 10.42.0 solid-js: 1.9.11 optionalDependencies: '@solidjs/router': 0.15.4(solid-js@1.9.11) @@ -10265,11 +10717,11 @@ snapshots: dependencies: solid-js: 1.9.11 - '@solidjs/start@1.3.2(@testing-library/jest-dom@6.9.1)(solid-js@1.9.11)(vinxi@0.5.11(@types/node@25.3.1)(better-sqlite3@12.6.2)(db0@0.3.4(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260305.0)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.6.2)(gel@2.2.0)(kysely@0.28.11)))(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260305.0)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.6.2)(gel@2.2.0)(kysely@0.28.11))(ioredis@5.9.3)(jiti@2.6.1)(lightningcss@1.31.1)(rolldown@1.0.0-beta.51)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))(vite@7.3.1(@types/node@25.3.1)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))': + '@solidjs/start@1.3.2(@testing-library/jest-dom@6.9.1)(solid-js@1.9.11)(vinxi@0.5.11(8957e57c08f05dd579cfce7ceebb1280))(vite@7.3.1(@types/node@25.3.5)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))': dependencies: - '@tanstack/server-functions-plugin': 1.121.21(vite@7.3.1(@types/node@25.3.1)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)) - '@vinxi/plugin-directives': 0.5.1(vinxi@0.5.11(@types/node@25.3.1)(better-sqlite3@12.6.2)(db0@0.3.4(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260305.0)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.6.2)(gel@2.2.0)(kysely@0.28.11)))(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260305.0)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.6.2)(gel@2.2.0)(kysely@0.28.11))(ioredis@5.9.3)(jiti@2.6.1)(lightningcss@1.31.1)(rolldown@1.0.0-beta.51)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)) - '@vinxi/server-components': 0.5.1(vinxi@0.5.11(@types/node@25.3.1)(better-sqlite3@12.6.2)(db0@0.3.4(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260305.0)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.6.2)(gel@2.2.0)(kysely@0.28.11)))(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260305.0)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.6.2)(gel@2.2.0)(kysely@0.28.11))(ioredis@5.9.3)(jiti@2.6.1)(lightningcss@1.31.1)(rolldown@1.0.0-beta.51)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)) + '@tanstack/server-functions-plugin': 1.121.21(vite@7.3.1(@types/node@25.3.5)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)) + '@vinxi/plugin-directives': 0.5.1(vinxi@0.5.11(8957e57c08f05dd579cfce7ceebb1280)) + '@vinxi/server-components': 0.5.1(vinxi@0.5.11(8957e57c08f05dd579cfce7ceebb1280)) cookie-es: 2.0.0 defu: 6.1.4 error-stack-parser: 2.1.4 @@ -10281,8 +10733,8 @@ snapshots: source-map-js: 1.2.1 terracotta: 1.1.0(solid-js@1.9.11) tinyglobby: 0.2.15 - vinxi: 0.5.11(@types/node@25.3.1)(better-sqlite3@12.6.2)(db0@0.3.4(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260305.0)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.6.2)(gel@2.2.0)(kysely@0.28.11)))(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260305.0)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.6.2)(gel@2.2.0)(kysely@0.28.11))(ioredis@5.9.3)(jiti@2.6.1)(lightningcss@1.31.1)(rolldown@1.0.0-beta.51)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) - vite-plugin-solid: 2.11.10(@testing-library/jest-dom@6.9.1)(solid-js@1.9.11)(vite@7.3.1(@types/node@25.3.1)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)) + vinxi: 0.5.11(8957e57c08f05dd579cfce7ceebb1280) + vite-plugin-solid: 2.11.10(@testing-library/jest-dom@6.9.1)(solid-js@1.9.11)(vite@7.3.1(@types/node@25.3.5)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)) transitivePeerDependencies: - '@testing-library/jest-dom' - solid-js @@ -10311,7 +10763,7 @@ snapshots: '@tailwindcss/node@4.2.1': dependencies: '@jridgewell/remapping': 2.3.5 - enhanced-resolve: 5.19.0 + enhanced-resolve: 5.20.0 jiti: 2.6.1 lightningcss: 1.31.1 magic-string: 0.30.21 @@ -10369,14 +10821,14 @@ snapshots: '@tailwindcss/oxide-win32-arm64-msvc': 4.2.1 '@tailwindcss/oxide-win32-x64-msvc': 4.2.1 - '@tailwindcss/vite@4.2.1(vite@7.3.1(@types/node@25.3.1)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))': + '@tailwindcss/vite@4.2.1(vite@7.3.1(@types/node@25.3.5)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))': dependencies: '@tailwindcss/node': 4.2.1 '@tailwindcss/oxide': 4.2.1 tailwindcss: 4.2.1 - vite: 7.3.1(@types/node@25.3.1)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + vite: 7.3.1(@types/node@25.3.5)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) - '@tanstack/directive-functions-plugin@1.121.21(vite@7.3.1(@types/node@25.3.1)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))': + '@tanstack/directive-functions-plugin@1.121.21(vite@7.3.1(@types/node@25.3.5)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))': dependencies: '@babel/code-frame': 7.26.2 '@babel/core': 7.29.0 @@ -10385,7 +10837,7 @@ snapshots: '@tanstack/router-utils': 1.161.4 babel-dead-code-elimination: 1.0.12 tiny-invariant: 1.3.3 - vite: 7.3.1(@types/node@25.3.1)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + vite: 7.3.1(@types/node@25.3.5)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) transitivePeerDependencies: - supports-color @@ -10407,7 +10859,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@tanstack/server-functions-plugin@1.121.21(vite@7.3.1(@types/node@25.3.1)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))': + '@tanstack/server-functions-plugin@1.121.21(vite@7.3.1(@types/node@25.3.5)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))': dependencies: '@babel/code-frame': 7.26.2 '@babel/core': 7.29.0 @@ -10416,7 +10868,7 @@ snapshots: '@babel/template': 7.28.6 '@babel/traverse': 7.29.0 '@babel/types': 7.29.0 - '@tanstack/directive-functions-plugin': 1.121.21(vite@7.3.1(@types/node@25.3.1)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)) + '@tanstack/directive-functions-plugin': 1.121.21(vite@7.3.1(@types/node@25.3.5)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)) babel-dead-code-elimination: 1.0.12 tiny-invariant: 1.3.3 transitivePeerDependencies: @@ -10493,7 +10945,7 @@ snapshots: '@types/better-sqlite3@7.6.13': dependencies: - '@types/node': 25.3.1 + '@types/node': 25.3.5 '@types/braces@3.0.5': {} @@ -10650,10 +11102,14 @@ snapshots: dependencies: '@types/braces': 3.0.5 - '@types/node@25.3.1': + '@types/node@25.3.5': dependencies: undici-types: 7.18.2 + '@types/react@19.2.14': + dependencies: + csstype: 3.2.3 + '@types/resolve@1.20.2': {} '@types/trusted-types@2.0.7': @@ -10663,19 +11119,25 @@ snapshots: '@types/web-bluetooth@0.0.21': {} + '@types/webidl-conversions@7.0.3': {} + + '@types/whatwg-url@13.0.0': + dependencies: + '@types/webidl-conversions': 7.0.3 + '@types/yauzl@2.10.3': dependencies: - '@types/node': 25.3.1 + '@types/node': 25.3.5 optional: true - '@typescript-eslint/parser@8.56.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/parser@8.56.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3)': dependencies: '@typescript-eslint/scope-manager': 8.56.1 '@typescript-eslint/types': 8.56.1 '@typescript-eslint/typescript-estree': 8.56.1(typescript@5.9.3) '@typescript-eslint/visitor-keys': 8.56.1 debug: 4.4.3 - eslint: 9.39.3(jiti@2.6.1) + eslint: 9.39.4(jiti@2.6.1) typescript: 5.9.3 transitivePeerDependencies: - supports-color @@ -10715,13 +11177,13 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.56.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/utils@8.56.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3)': dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.3(jiti@2.6.1)) + '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.4(jiti@2.6.1)) '@typescript-eslint/scope-manager': 8.56.1 '@typescript-eslint/types': 8.56.1 '@typescript-eslint/typescript-estree': 8.56.1(typescript@5.9.3) - eslint: 9.39.3(jiti@2.6.1) + eslint: 9.39.4(jiti@2.6.1) typescript: 5.9.3 transitivePeerDependencies: - supports-color @@ -10764,7 +11226,7 @@ snapshots: h3: 1.15.3 http-shutdown: 1.2.2 jiti: 1.21.7 - mlly: 1.8.0 + mlly: 1.8.1 node-forge: 1.3.3 pathe: 1.1.2 std-env: 3.10.0 @@ -10772,7 +11234,7 @@ snapshots: untun: 0.1.3 uqr: 0.1.2 - '@vinxi/plugin-directives@0.5.1(vinxi@0.5.11(@types/node@25.3.1)(better-sqlite3@12.6.2)(db0@0.3.4(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260305.0)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.6.2)(gel@2.2.0)(kysely@0.28.11)))(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260305.0)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.6.2)(gel@2.2.0)(kysely@0.28.11))(ioredis@5.9.3)(jiti@2.6.1)(lightningcss@1.31.1)(rolldown@1.0.0-beta.51)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))': + '@vinxi/plugin-directives@0.5.1(vinxi@0.5.11(8957e57c08f05dd579cfce7ceebb1280))': dependencies: '@babel/parser': 7.29.0 acorn: 8.16.0 @@ -10783,22 +11245,22 @@ snapshots: magicast: 0.2.11 recast: 0.23.11 tslib: 2.8.1 - vinxi: 0.5.11(@types/node@25.3.1)(better-sqlite3@12.6.2)(db0@0.3.4(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260305.0)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.6.2)(gel@2.2.0)(kysely@0.28.11)))(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260305.0)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.6.2)(gel@2.2.0)(kysely@0.28.11))(ioredis@5.9.3)(jiti@2.6.1)(lightningcss@1.31.1)(rolldown@1.0.0-beta.51)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + vinxi: 0.5.11(8957e57c08f05dd579cfce7ceebb1280) - '@vinxi/server-components@0.5.1(vinxi@0.5.11(@types/node@25.3.1)(better-sqlite3@12.6.2)(db0@0.3.4(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260305.0)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.6.2)(gel@2.2.0)(kysely@0.28.11)))(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260305.0)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.6.2)(gel@2.2.0)(kysely@0.28.11))(ioredis@5.9.3)(jiti@2.6.1)(lightningcss@1.31.1)(rolldown@1.0.0-beta.51)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))': + '@vinxi/server-components@0.5.1(vinxi@0.5.11(8957e57c08f05dd579cfce7ceebb1280))': dependencies: - '@vinxi/plugin-directives': 0.5.1(vinxi@0.5.11(@types/node@25.3.1)(better-sqlite3@12.6.2)(db0@0.3.4(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260305.0)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.6.2)(gel@2.2.0)(kysely@0.28.11)))(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260305.0)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.6.2)(gel@2.2.0)(kysely@0.28.11))(ioredis@5.9.3)(jiti@2.6.1)(lightningcss@1.31.1)(rolldown@1.0.0-beta.51)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)) + '@vinxi/plugin-directives': 0.5.1(vinxi@0.5.11(8957e57c08f05dd579cfce7ceebb1280)) acorn: 8.16.0 acorn-loose: 8.5.2 acorn-typescript: 1.4.13(acorn@8.16.0) astring: 1.9.0 magicast: 0.2.11 recast: 0.23.11 - vinxi: 0.5.11(@types/node@25.3.1)(better-sqlite3@12.6.2)(db0@0.3.4(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260305.0)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.6.2)(gel@2.2.0)(kysely@0.28.11)))(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260305.0)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.6.2)(gel@2.2.0)(kysely@0.28.11))(ioredis@5.9.3)(jiti@2.6.1)(lightningcss@1.31.1)(rolldown@1.0.0-beta.51)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + vinxi: 0.5.11(8957e57c08f05dd579cfce7ceebb1280) - '@vitejs/plugin-vue@5.2.4(vite@5.4.21(@types/node@25.3.1)(lightningcss@1.31.1)(terser@5.46.0))(vue@3.5.29(typescript@5.9.3))': + '@vitejs/plugin-vue@5.2.4(vite@5.4.21(@types/node@25.3.5)(lightningcss@1.31.1)(terser@5.46.0))(vue@3.5.29(typescript@5.9.3))': dependencies: - vite: 5.4.21(@types/node@25.3.1)(lightningcss@1.31.1)(terser@5.46.0) + vite: 5.4.21(@types/node@25.3.5)(lightningcss@1.31.1)(terser@5.46.0) vue: 3.5.29(typescript@5.9.3) '@vitest/expect@3.2.0': @@ -10818,21 +11280,21 @@ snapshots: chai: 6.2.2 tinyrainbow: 3.0.3 - '@vitest/mocker@3.2.0(vite@7.3.1(@types/node@25.3.1)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))': + '@vitest/mocker@3.2.0(vite@7.3.1(@types/node@25.3.5)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))': dependencies: '@vitest/spy': 3.2.0 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - vite: 7.3.1(@types/node@25.3.1)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + vite: 7.3.1(@types/node@25.3.5)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) - '@vitest/mocker@4.0.18(vite@7.3.1(@types/node@25.3.1)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))': + '@vitest/mocker@4.0.18(vite@7.3.1(@types/node@25.3.5)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))': dependencies: '@vitest/spy': 4.0.18 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - vite: 7.3.1(@types/node@25.3.1)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + vite: 7.3.1(@types/node@25.3.5)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) '@vitest/pretty-format@3.2.0': dependencies: @@ -10878,12 +11340,12 @@ snapshots: dependencies: '@vitest/utils': 4.0.18 fflate: 0.8.2 - flatted: 3.3.3 + flatted: 3.3.4 pathe: 2.0.3 sirv: 3.0.2 tinyglobby: 0.2.15 tinyrainbow: 3.0.3 - vitest: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.3.1)(@vitest/ui@4.0.18)(jiti@2.6.1)(jsdom@27.4.0(@noble/hashes@2.0.1))(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + vitest: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.3.5)(@vitest/ui@4.0.18)(jiti@2.6.1)(jsdom@27.4.0(@noble/hashes@2.0.1))(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) '@vitest/utils@3.2.0': dependencies: @@ -10918,7 +11380,7 @@ snapshots: '@vue/shared': 3.5.29 estree-walker: 2.0.2 magic-string: 0.30.21 - postcss: 8.5.6 + postcss: 8.5.8 source-map-js: 1.2.1 '@vue/compiler-ssr@3.5.29': @@ -10977,13 +11439,13 @@ snapshots: transitivePeerDependencies: - typescript - '@vueuse/integrations@12.8.2(axios@1.13.5)(change-case@5.4.4)(focus-trap@7.8.0)(typescript@5.9.3)': + '@vueuse/integrations@12.8.2(axios@1.13.6)(change-case@5.4.4)(focus-trap@7.8.0)(typescript@5.9.3)': dependencies: '@vueuse/core': 12.8.2(typescript@5.9.3) '@vueuse/shared': 12.8.2(typescript@5.9.3) vue: 3.5.29(typescript@5.9.3) optionalDependencies: - axios: 1.13.5 + axios: 1.13.6 change-case: 5.4.4 focus-trap: 7.8.0 transitivePeerDependencies: @@ -11009,561 +11471,561 @@ snapshots: - bare-buffer - react-native-b4a - '@zag-js/accordion@1.34.1': + '@zag-js/accordion@1.35.3': dependencies: - '@zag-js/anatomy': 1.34.1 - '@zag-js/core': 1.34.1 - '@zag-js/dom-query': 1.34.1 - '@zag-js/types': 1.34.1 - '@zag-js/utils': 1.34.1 + '@zag-js/anatomy': 1.35.3 + '@zag-js/core': 1.35.3 + '@zag-js/dom-query': 1.35.3 + '@zag-js/types': 1.35.3 + '@zag-js/utils': 1.35.3 - '@zag-js/anatomy@1.34.1': {} + '@zag-js/anatomy@1.35.3': {} - '@zag-js/angle-slider@1.34.1': + '@zag-js/angle-slider@1.35.3': dependencies: - '@zag-js/anatomy': 1.34.1 - '@zag-js/core': 1.34.1 - '@zag-js/dom-query': 1.34.1 - '@zag-js/rect-utils': 1.34.1 - '@zag-js/types': 1.34.1 - '@zag-js/utils': 1.34.1 + '@zag-js/anatomy': 1.35.3 + '@zag-js/core': 1.35.3 + '@zag-js/dom-query': 1.35.3 + '@zag-js/rect-utils': 1.35.3 + '@zag-js/types': 1.35.3 + '@zag-js/utils': 1.35.3 - '@zag-js/aria-hidden@1.34.1': + '@zag-js/aria-hidden@1.35.3': dependencies: - '@zag-js/dom-query': 1.34.1 + '@zag-js/dom-query': 1.35.3 - '@zag-js/async-list@1.34.1': + '@zag-js/async-list@1.35.3': dependencies: - '@zag-js/core': 1.34.1 - '@zag-js/utils': 1.34.1 + '@zag-js/core': 1.35.3 + '@zag-js/utils': 1.35.3 - '@zag-js/auto-resize@1.34.1': + '@zag-js/auto-resize@1.35.3': dependencies: - '@zag-js/dom-query': 1.34.1 + '@zag-js/dom-query': 1.35.3 - '@zag-js/avatar@1.34.1': + '@zag-js/avatar@1.35.3': dependencies: - '@zag-js/anatomy': 1.34.1 - '@zag-js/core': 1.34.1 - '@zag-js/dom-query': 1.34.1 - '@zag-js/types': 1.34.1 - '@zag-js/utils': 1.34.1 + '@zag-js/anatomy': 1.35.3 + '@zag-js/core': 1.35.3 + '@zag-js/dom-query': 1.35.3 + '@zag-js/types': 1.35.3 + '@zag-js/utils': 1.35.3 - '@zag-js/carousel@1.34.1': + '@zag-js/carousel@1.35.3': dependencies: - '@zag-js/anatomy': 1.34.1 - '@zag-js/core': 1.34.1 - '@zag-js/dom-query': 1.34.1 - '@zag-js/scroll-snap': 1.34.1 - '@zag-js/types': 1.34.1 - '@zag-js/utils': 1.34.1 + '@zag-js/anatomy': 1.35.3 + '@zag-js/core': 1.35.3 + '@zag-js/dom-query': 1.35.3 + '@zag-js/scroll-snap': 1.35.3 + '@zag-js/types': 1.35.3 + '@zag-js/utils': 1.35.3 - '@zag-js/cascade-select@1.34.1': + '@zag-js/cascade-select@1.35.3': dependencies: - '@zag-js/anatomy': 1.34.1 - '@zag-js/collection': 1.34.1 - '@zag-js/core': 1.34.1 - '@zag-js/dismissable': 1.34.1 - '@zag-js/dom-query': 1.34.1 - '@zag-js/focus-visible': 1.34.1 - '@zag-js/popper': 1.34.1 - '@zag-js/rect-utils': 1.34.1 - '@zag-js/types': 1.34.1 - '@zag-js/utils': 1.34.1 + '@zag-js/anatomy': 1.35.3 + '@zag-js/collection': 1.35.3 + '@zag-js/core': 1.35.3 + '@zag-js/dismissable': 1.35.3 + '@zag-js/dom-query': 1.35.3 + '@zag-js/focus-visible': 1.35.3 + '@zag-js/popper': 1.35.3 + '@zag-js/rect-utils': 1.35.3 + '@zag-js/types': 1.35.3 + '@zag-js/utils': 1.35.3 - '@zag-js/checkbox@1.34.1': + '@zag-js/checkbox@1.35.3': dependencies: - '@zag-js/anatomy': 1.34.1 - '@zag-js/core': 1.34.1 - '@zag-js/dom-query': 1.34.1 - '@zag-js/focus-visible': 1.34.1 - '@zag-js/types': 1.34.1 - '@zag-js/utils': 1.34.1 + '@zag-js/anatomy': 1.35.3 + '@zag-js/core': 1.35.3 + '@zag-js/dom-query': 1.35.3 + '@zag-js/focus-visible': 1.35.3 + '@zag-js/types': 1.35.3 + '@zag-js/utils': 1.35.3 - '@zag-js/clipboard@1.34.1': + '@zag-js/clipboard@1.35.3': dependencies: - '@zag-js/anatomy': 1.34.1 - '@zag-js/core': 1.34.1 - '@zag-js/dom-query': 1.34.1 - '@zag-js/types': 1.34.1 - '@zag-js/utils': 1.34.1 + '@zag-js/anatomy': 1.35.3 + '@zag-js/core': 1.35.3 + '@zag-js/dom-query': 1.35.3 + '@zag-js/types': 1.35.3 + '@zag-js/utils': 1.35.3 - '@zag-js/collapsible@1.34.1': + '@zag-js/collapsible@1.35.3': dependencies: - '@zag-js/anatomy': 1.34.1 - '@zag-js/core': 1.34.1 - '@zag-js/dom-query': 1.34.1 - '@zag-js/types': 1.34.1 - '@zag-js/utils': 1.34.1 + '@zag-js/anatomy': 1.35.3 + '@zag-js/core': 1.35.3 + '@zag-js/dom-query': 1.35.3 + '@zag-js/types': 1.35.3 + '@zag-js/utils': 1.35.3 - '@zag-js/collection@1.34.1': + '@zag-js/collection@1.35.3': dependencies: - '@zag-js/utils': 1.34.1 + '@zag-js/utils': 1.35.3 - '@zag-js/color-picker@1.34.1': + '@zag-js/color-picker@1.35.3': dependencies: - '@zag-js/anatomy': 1.34.1 - '@zag-js/color-utils': 1.34.1 - '@zag-js/core': 1.34.1 - '@zag-js/dismissable': 1.34.1 - '@zag-js/dom-query': 1.34.1 - '@zag-js/popper': 1.34.1 - '@zag-js/types': 1.34.1 - '@zag-js/utils': 1.34.1 + '@zag-js/anatomy': 1.35.3 + '@zag-js/color-utils': 1.35.3 + '@zag-js/core': 1.35.3 + '@zag-js/dismissable': 1.35.3 + '@zag-js/dom-query': 1.35.3 + '@zag-js/popper': 1.35.3 + '@zag-js/types': 1.35.3 + '@zag-js/utils': 1.35.3 - '@zag-js/color-utils@1.34.1': + '@zag-js/color-utils@1.35.3': dependencies: - '@zag-js/utils': 1.34.1 + '@zag-js/utils': 1.35.3 - '@zag-js/combobox@1.34.1': + '@zag-js/combobox@1.35.3': dependencies: - '@zag-js/anatomy': 1.34.1 - '@zag-js/aria-hidden': 1.34.1 - '@zag-js/collection': 1.34.1 - '@zag-js/core': 1.34.1 - '@zag-js/dismissable': 1.34.1 - '@zag-js/dom-query': 1.34.1 - '@zag-js/focus-visible': 1.34.1 - '@zag-js/popper': 1.34.1 - '@zag-js/types': 1.34.1 - '@zag-js/utils': 1.34.1 + '@zag-js/anatomy': 1.35.3 + '@zag-js/aria-hidden': 1.35.3 + '@zag-js/collection': 1.35.3 + '@zag-js/core': 1.35.3 + '@zag-js/dismissable': 1.35.3 + '@zag-js/dom-query': 1.35.3 + '@zag-js/focus-visible': 1.35.3 + '@zag-js/popper': 1.35.3 + '@zag-js/types': 1.35.3 + '@zag-js/utils': 1.35.3 - '@zag-js/core@1.34.1': + '@zag-js/core@1.35.3': dependencies: - '@zag-js/dom-query': 1.34.1 - '@zag-js/utils': 1.34.1 + '@zag-js/dom-query': 1.35.3 + '@zag-js/utils': 1.35.3 - '@zag-js/date-picker@1.34.1(@internationalized/date@3.11.0)': + '@zag-js/date-picker@1.35.3(@internationalized/date@3.11.0)': dependencies: '@internationalized/date': 3.11.0 - '@zag-js/anatomy': 1.34.1 - '@zag-js/core': 1.34.1 - '@zag-js/date-utils': 1.34.1(@internationalized/date@3.11.0) - '@zag-js/dismissable': 1.34.1 - '@zag-js/dom-query': 1.34.1 - '@zag-js/live-region': 1.34.1 - '@zag-js/popper': 1.34.1 - '@zag-js/types': 1.34.1 - '@zag-js/utils': 1.34.1 - - '@zag-js/date-utils@1.34.1(@internationalized/date@3.11.0)': + '@zag-js/anatomy': 1.35.3 + '@zag-js/core': 1.35.3 + '@zag-js/date-utils': 1.35.3(@internationalized/date@3.11.0) + '@zag-js/dismissable': 1.35.3 + '@zag-js/dom-query': 1.35.3 + '@zag-js/live-region': 1.35.3 + '@zag-js/popper': 1.35.3 + '@zag-js/types': 1.35.3 + '@zag-js/utils': 1.35.3 + + '@zag-js/date-utils@1.35.3(@internationalized/date@3.11.0)': dependencies: '@internationalized/date': 3.11.0 - '@zag-js/dialog@1.34.1': + '@zag-js/dialog@1.35.3': dependencies: - '@zag-js/anatomy': 1.34.1 - '@zag-js/aria-hidden': 1.34.1 - '@zag-js/core': 1.34.1 - '@zag-js/dismissable': 1.34.1 - '@zag-js/dom-query': 1.34.1 - '@zag-js/focus-trap': 1.34.1 - '@zag-js/remove-scroll': 1.34.1 - '@zag-js/types': 1.34.1 - '@zag-js/utils': 1.34.1 + '@zag-js/anatomy': 1.35.3 + '@zag-js/aria-hidden': 1.35.3 + '@zag-js/core': 1.35.3 + '@zag-js/dismissable': 1.35.3 + '@zag-js/dom-query': 1.35.3 + '@zag-js/focus-trap': 1.35.3 + '@zag-js/remove-scroll': 1.35.3 + '@zag-js/types': 1.35.3 + '@zag-js/utils': 1.35.3 - '@zag-js/dismissable@1.34.1': + '@zag-js/dismissable@1.35.3': dependencies: - '@zag-js/dom-query': 1.34.1 - '@zag-js/interact-outside': 1.34.1 - '@zag-js/utils': 1.34.1 + '@zag-js/dom-query': 1.35.3 + '@zag-js/interact-outside': 1.35.3 + '@zag-js/utils': 1.35.3 - '@zag-js/dom-query@1.34.1': + '@zag-js/dom-query@1.35.3': dependencies: - '@zag-js/types': 1.34.1 + '@zag-js/types': 1.35.3 - '@zag-js/drawer@1.34.1': + '@zag-js/drawer@1.35.3': dependencies: - '@zag-js/anatomy': 1.34.1 - '@zag-js/aria-hidden': 1.34.1 - '@zag-js/core': 1.34.1 - '@zag-js/dismissable': 1.34.1 - '@zag-js/dom-query': 1.34.1 - '@zag-js/focus-trap': 1.34.1 - '@zag-js/remove-scroll': 1.34.1 - '@zag-js/types': 1.34.1 - '@zag-js/utils': 1.34.1 + '@zag-js/anatomy': 1.35.3 + '@zag-js/aria-hidden': 1.35.3 + '@zag-js/core': 1.35.3 + '@zag-js/dismissable': 1.35.3 + '@zag-js/dom-query': 1.35.3 + '@zag-js/focus-trap': 1.35.3 + '@zag-js/remove-scroll': 1.35.3 + '@zag-js/types': 1.35.3 + '@zag-js/utils': 1.35.3 - '@zag-js/editable@1.34.1': + '@zag-js/editable@1.35.3': dependencies: - '@zag-js/anatomy': 1.34.1 - '@zag-js/core': 1.34.1 - '@zag-js/dom-query': 1.34.1 - '@zag-js/interact-outside': 1.34.1 - '@zag-js/types': 1.34.1 - '@zag-js/utils': 1.34.1 + '@zag-js/anatomy': 1.35.3 + '@zag-js/core': 1.35.3 + '@zag-js/dom-query': 1.35.3 + '@zag-js/interact-outside': 1.35.3 + '@zag-js/types': 1.35.3 + '@zag-js/utils': 1.35.3 - '@zag-js/file-upload@1.34.1': + '@zag-js/file-upload@1.35.3': dependencies: - '@zag-js/anatomy': 1.34.1 - '@zag-js/core': 1.34.1 - '@zag-js/dom-query': 1.34.1 - '@zag-js/file-utils': 1.34.1 - '@zag-js/i18n-utils': 1.34.1 - '@zag-js/types': 1.34.1 - '@zag-js/utils': 1.34.1 + '@zag-js/anatomy': 1.35.3 + '@zag-js/core': 1.35.3 + '@zag-js/dom-query': 1.35.3 + '@zag-js/file-utils': 1.35.3 + '@zag-js/i18n-utils': 1.35.3 + '@zag-js/types': 1.35.3 + '@zag-js/utils': 1.35.3 - '@zag-js/file-utils@1.34.1': + '@zag-js/file-utils@1.35.3': dependencies: - '@zag-js/i18n-utils': 1.34.1 + '@zag-js/i18n-utils': 1.35.3 - '@zag-js/floating-panel@1.34.1': + '@zag-js/floating-panel@1.35.3': dependencies: - '@zag-js/anatomy': 1.34.1 - '@zag-js/core': 1.34.1 - '@zag-js/dom-query': 1.34.1 - '@zag-js/popper': 1.34.1 - '@zag-js/rect-utils': 1.34.1 - '@zag-js/store': 1.34.1 - '@zag-js/types': 1.34.1 - '@zag-js/utils': 1.34.1 + '@zag-js/anatomy': 1.35.3 + '@zag-js/core': 1.35.3 + '@zag-js/dom-query': 1.35.3 + '@zag-js/popper': 1.35.3 + '@zag-js/rect-utils': 1.35.3 + '@zag-js/store': 1.35.3 + '@zag-js/types': 1.35.3 + '@zag-js/utils': 1.35.3 - '@zag-js/focus-trap@1.34.1': + '@zag-js/focus-trap@1.35.3': dependencies: - '@zag-js/dom-query': 1.34.1 + '@zag-js/dom-query': 1.35.3 - '@zag-js/focus-visible@1.34.1': + '@zag-js/focus-visible@1.35.3': dependencies: - '@zag-js/dom-query': 1.34.1 + '@zag-js/dom-query': 1.35.3 - '@zag-js/highlight-word@1.34.1': {} + '@zag-js/highlight-word@1.35.3': {} - '@zag-js/hover-card@1.34.1': + '@zag-js/hover-card@1.35.3': dependencies: - '@zag-js/anatomy': 1.34.1 - '@zag-js/core': 1.34.1 - '@zag-js/dismissable': 1.34.1 - '@zag-js/dom-query': 1.34.1 - '@zag-js/popper': 1.34.1 - '@zag-js/types': 1.34.1 - '@zag-js/utils': 1.34.1 + '@zag-js/anatomy': 1.35.3 + '@zag-js/core': 1.35.3 + '@zag-js/dismissable': 1.35.3 + '@zag-js/dom-query': 1.35.3 + '@zag-js/popper': 1.35.3 + '@zag-js/types': 1.35.3 + '@zag-js/utils': 1.35.3 - '@zag-js/i18n-utils@1.34.1': + '@zag-js/i18n-utils@1.35.3': dependencies: - '@zag-js/dom-query': 1.34.1 + '@zag-js/dom-query': 1.35.3 - '@zag-js/image-cropper@1.34.1': + '@zag-js/image-cropper@1.35.3': dependencies: - '@zag-js/anatomy': 1.34.1 - '@zag-js/core': 1.34.1 - '@zag-js/dom-query': 1.34.1 - '@zag-js/types': 1.34.1 - '@zag-js/utils': 1.34.1 + '@zag-js/anatomy': 1.35.3 + '@zag-js/core': 1.35.3 + '@zag-js/dom-query': 1.35.3 + '@zag-js/types': 1.35.3 + '@zag-js/utils': 1.35.3 - '@zag-js/interact-outside@1.34.1': + '@zag-js/interact-outside@1.35.3': dependencies: - '@zag-js/dom-query': 1.34.1 - '@zag-js/utils': 1.34.1 + '@zag-js/dom-query': 1.35.3 + '@zag-js/utils': 1.35.3 - '@zag-js/json-tree-utils@1.34.1': {} + '@zag-js/json-tree-utils@1.35.3': {} - '@zag-js/listbox@1.34.1': + '@zag-js/listbox@1.35.3': dependencies: - '@zag-js/anatomy': 1.34.1 - '@zag-js/collection': 1.34.1 - '@zag-js/core': 1.34.1 - '@zag-js/dom-query': 1.34.1 - '@zag-js/focus-visible': 1.34.1 - '@zag-js/types': 1.34.1 - '@zag-js/utils': 1.34.1 + '@zag-js/anatomy': 1.35.3 + '@zag-js/collection': 1.35.3 + '@zag-js/core': 1.35.3 + '@zag-js/dom-query': 1.35.3 + '@zag-js/focus-visible': 1.35.3 + '@zag-js/types': 1.35.3 + '@zag-js/utils': 1.35.3 - '@zag-js/live-region@1.34.1': {} + '@zag-js/live-region@1.35.3': {} - '@zag-js/marquee@1.34.1': + '@zag-js/marquee@1.35.3': dependencies: - '@zag-js/anatomy': 1.34.1 - '@zag-js/core': 1.34.1 - '@zag-js/dom-query': 1.34.1 - '@zag-js/types': 1.34.1 - '@zag-js/utils': 1.34.1 + '@zag-js/anatomy': 1.35.3 + '@zag-js/core': 1.35.3 + '@zag-js/dom-query': 1.35.3 + '@zag-js/types': 1.35.3 + '@zag-js/utils': 1.35.3 - '@zag-js/menu@1.34.1': + '@zag-js/menu@1.35.3': dependencies: - '@zag-js/anatomy': 1.34.1 - '@zag-js/core': 1.34.1 - '@zag-js/dismissable': 1.34.1 - '@zag-js/dom-query': 1.34.1 - '@zag-js/focus-visible': 1.34.1 - '@zag-js/popper': 1.34.1 - '@zag-js/rect-utils': 1.34.1 - '@zag-js/types': 1.34.1 - '@zag-js/utils': 1.34.1 + '@zag-js/anatomy': 1.35.3 + '@zag-js/core': 1.35.3 + '@zag-js/dismissable': 1.35.3 + '@zag-js/dom-query': 1.35.3 + '@zag-js/focus-visible': 1.35.3 + '@zag-js/popper': 1.35.3 + '@zag-js/rect-utils': 1.35.3 + '@zag-js/types': 1.35.3 + '@zag-js/utils': 1.35.3 - '@zag-js/navigation-menu@1.34.1': + '@zag-js/navigation-menu@1.35.3': dependencies: - '@zag-js/anatomy': 1.34.1 - '@zag-js/core': 1.34.1 - '@zag-js/dismissable': 1.34.1 - '@zag-js/dom-query': 1.34.1 - '@zag-js/types': 1.34.1 - '@zag-js/utils': 1.34.1 + '@zag-js/anatomy': 1.35.3 + '@zag-js/core': 1.35.3 + '@zag-js/dismissable': 1.35.3 + '@zag-js/dom-query': 1.35.3 + '@zag-js/types': 1.35.3 + '@zag-js/utils': 1.35.3 - '@zag-js/number-input@1.34.1': + '@zag-js/number-input@1.35.3': dependencies: '@internationalized/number': 3.6.5 - '@zag-js/anatomy': 1.34.1 - '@zag-js/core': 1.34.1 - '@zag-js/dom-query': 1.34.1 - '@zag-js/types': 1.34.1 - '@zag-js/utils': 1.34.1 - - '@zag-js/pagination@1.34.1': - dependencies: - '@zag-js/anatomy': 1.34.1 - '@zag-js/core': 1.34.1 - '@zag-js/dom-query': 1.34.1 - '@zag-js/types': 1.34.1 - '@zag-js/utils': 1.34.1 - - '@zag-js/password-input@1.34.1': - dependencies: - '@zag-js/anatomy': 1.34.1 - '@zag-js/core': 1.34.1 - '@zag-js/dom-query': 1.34.1 - '@zag-js/types': 1.34.1 - '@zag-js/utils': 1.34.1 - - '@zag-js/pin-input@1.34.1': - dependencies: - '@zag-js/anatomy': 1.34.1 - '@zag-js/core': 1.34.1 - '@zag-js/dom-query': 1.34.1 - '@zag-js/types': 1.34.1 - '@zag-js/utils': 1.34.1 - - '@zag-js/popover@1.34.1': - dependencies: - '@zag-js/anatomy': 1.34.1 - '@zag-js/aria-hidden': 1.34.1 - '@zag-js/core': 1.34.1 - '@zag-js/dismissable': 1.34.1 - '@zag-js/dom-query': 1.34.1 - '@zag-js/focus-trap': 1.34.1 - '@zag-js/popper': 1.34.1 - '@zag-js/remove-scroll': 1.34.1 - '@zag-js/types': 1.34.1 - '@zag-js/utils': 1.34.1 - - '@zag-js/popper@1.34.1': - dependencies: - '@floating-ui/dom': 1.7.5 - '@zag-js/dom-query': 1.34.1 - '@zag-js/utils': 1.34.1 - - '@zag-js/presence@1.34.1': - dependencies: - '@zag-js/core': 1.34.1 - '@zag-js/dom-query': 1.34.1 - '@zag-js/types': 1.34.1 - - '@zag-js/progress@1.34.1': - dependencies: - '@zag-js/anatomy': 1.34.1 - '@zag-js/core': 1.34.1 - '@zag-js/dom-query': 1.34.1 - '@zag-js/types': 1.34.1 - '@zag-js/utils': 1.34.1 - - '@zag-js/qr-code@1.34.1': - dependencies: - '@zag-js/anatomy': 1.34.1 - '@zag-js/core': 1.34.1 - '@zag-js/dom-query': 1.34.1 - '@zag-js/types': 1.34.1 - '@zag-js/utils': 1.34.1 + '@zag-js/anatomy': 1.35.3 + '@zag-js/core': 1.35.3 + '@zag-js/dom-query': 1.35.3 + '@zag-js/types': 1.35.3 + '@zag-js/utils': 1.35.3 + + '@zag-js/pagination@1.35.3': + dependencies: + '@zag-js/anatomy': 1.35.3 + '@zag-js/core': 1.35.3 + '@zag-js/dom-query': 1.35.3 + '@zag-js/types': 1.35.3 + '@zag-js/utils': 1.35.3 + + '@zag-js/password-input@1.35.3': + dependencies: + '@zag-js/anatomy': 1.35.3 + '@zag-js/core': 1.35.3 + '@zag-js/dom-query': 1.35.3 + '@zag-js/types': 1.35.3 + '@zag-js/utils': 1.35.3 + + '@zag-js/pin-input@1.35.3': + dependencies: + '@zag-js/anatomy': 1.35.3 + '@zag-js/core': 1.35.3 + '@zag-js/dom-query': 1.35.3 + '@zag-js/types': 1.35.3 + '@zag-js/utils': 1.35.3 + + '@zag-js/popover@1.35.3': + dependencies: + '@zag-js/anatomy': 1.35.3 + '@zag-js/aria-hidden': 1.35.3 + '@zag-js/core': 1.35.3 + '@zag-js/dismissable': 1.35.3 + '@zag-js/dom-query': 1.35.3 + '@zag-js/focus-trap': 1.35.3 + '@zag-js/popper': 1.35.3 + '@zag-js/remove-scroll': 1.35.3 + '@zag-js/types': 1.35.3 + '@zag-js/utils': 1.35.3 + + '@zag-js/popper@1.35.3': + dependencies: + '@floating-ui/dom': 1.7.6 + '@zag-js/dom-query': 1.35.3 + '@zag-js/utils': 1.35.3 + + '@zag-js/presence@1.35.3': + dependencies: + '@zag-js/core': 1.35.3 + '@zag-js/dom-query': 1.35.3 + '@zag-js/types': 1.35.3 + + '@zag-js/progress@1.35.3': + dependencies: + '@zag-js/anatomy': 1.35.3 + '@zag-js/core': 1.35.3 + '@zag-js/dom-query': 1.35.3 + '@zag-js/types': 1.35.3 + '@zag-js/utils': 1.35.3 + + '@zag-js/qr-code@1.35.3': + dependencies: + '@zag-js/anatomy': 1.35.3 + '@zag-js/core': 1.35.3 + '@zag-js/dom-query': 1.35.3 + '@zag-js/types': 1.35.3 + '@zag-js/utils': 1.35.3 proxy-memoize: 3.0.1 uqr: 0.1.2 - '@zag-js/radio-group@1.34.1': + '@zag-js/radio-group@1.35.3': dependencies: - '@zag-js/anatomy': 1.34.1 - '@zag-js/core': 1.34.1 - '@zag-js/dom-query': 1.34.1 - '@zag-js/focus-visible': 1.34.1 - '@zag-js/types': 1.34.1 - '@zag-js/utils': 1.34.1 + '@zag-js/anatomy': 1.35.3 + '@zag-js/core': 1.35.3 + '@zag-js/dom-query': 1.35.3 + '@zag-js/focus-visible': 1.35.3 + '@zag-js/types': 1.35.3 + '@zag-js/utils': 1.35.3 - '@zag-js/rating-group@1.34.1': + '@zag-js/rating-group@1.35.3': dependencies: - '@zag-js/anatomy': 1.34.1 - '@zag-js/core': 1.34.1 - '@zag-js/dom-query': 1.34.1 - '@zag-js/types': 1.34.1 - '@zag-js/utils': 1.34.1 + '@zag-js/anatomy': 1.35.3 + '@zag-js/core': 1.35.3 + '@zag-js/dom-query': 1.35.3 + '@zag-js/types': 1.35.3 + '@zag-js/utils': 1.35.3 - '@zag-js/rect-utils@1.34.1': {} + '@zag-js/rect-utils@1.35.3': {} - '@zag-js/remove-scroll@1.34.1': + '@zag-js/remove-scroll@1.35.3': dependencies: - '@zag-js/dom-query': 1.34.1 + '@zag-js/dom-query': 1.35.3 - '@zag-js/scroll-area@1.34.1': + '@zag-js/scroll-area@1.35.3': dependencies: - '@zag-js/anatomy': 1.34.1 - '@zag-js/core': 1.34.1 - '@zag-js/dom-query': 1.34.1 - '@zag-js/types': 1.34.1 - '@zag-js/utils': 1.34.1 + '@zag-js/anatomy': 1.35.3 + '@zag-js/core': 1.35.3 + '@zag-js/dom-query': 1.35.3 + '@zag-js/types': 1.35.3 + '@zag-js/utils': 1.35.3 - '@zag-js/scroll-snap@1.34.1': + '@zag-js/scroll-snap@1.35.3': dependencies: - '@zag-js/dom-query': 1.34.1 + '@zag-js/dom-query': 1.35.3 - '@zag-js/select@1.34.1': + '@zag-js/select@1.35.3': dependencies: - '@zag-js/anatomy': 1.34.1 - '@zag-js/collection': 1.34.1 - '@zag-js/core': 1.34.1 - '@zag-js/dismissable': 1.34.1 - '@zag-js/dom-query': 1.34.1 - '@zag-js/focus-visible': 1.34.1 - '@zag-js/popper': 1.34.1 - '@zag-js/types': 1.34.1 - '@zag-js/utils': 1.34.1 + '@zag-js/anatomy': 1.35.3 + '@zag-js/collection': 1.35.3 + '@zag-js/core': 1.35.3 + '@zag-js/dismissable': 1.35.3 + '@zag-js/dom-query': 1.35.3 + '@zag-js/focus-visible': 1.35.3 + '@zag-js/popper': 1.35.3 + '@zag-js/types': 1.35.3 + '@zag-js/utils': 1.35.3 - '@zag-js/signature-pad@1.34.1': + '@zag-js/signature-pad@1.35.3': dependencies: - '@zag-js/anatomy': 1.34.1 - '@zag-js/core': 1.34.1 - '@zag-js/dom-query': 1.34.1 - '@zag-js/types': 1.34.1 - '@zag-js/utils': 1.34.1 + '@zag-js/anatomy': 1.35.3 + '@zag-js/core': 1.35.3 + '@zag-js/dom-query': 1.35.3 + '@zag-js/types': 1.35.3 + '@zag-js/utils': 1.35.3 perfect-freehand: 1.2.3 - '@zag-js/slider@1.34.1': + '@zag-js/slider@1.35.3': dependencies: - '@zag-js/anatomy': 1.34.1 - '@zag-js/core': 1.34.1 - '@zag-js/dom-query': 1.34.1 - '@zag-js/types': 1.34.1 - '@zag-js/utils': 1.34.1 + '@zag-js/anatomy': 1.35.3 + '@zag-js/core': 1.35.3 + '@zag-js/dom-query': 1.35.3 + '@zag-js/types': 1.35.3 + '@zag-js/utils': 1.35.3 - '@zag-js/solid@1.34.1(solid-js@1.9.11)': + '@zag-js/solid@1.35.3(solid-js@1.9.11)': dependencies: '@solid-primitives/keyed': 1.5.3(solid-js@1.9.11) - '@zag-js/core': 1.34.1 - '@zag-js/store': 1.34.1 - '@zag-js/types': 1.34.1 - '@zag-js/utils': 1.34.1 + '@zag-js/core': 1.35.3 + '@zag-js/store': 1.35.3 + '@zag-js/types': 1.35.3 + '@zag-js/utils': 1.35.3 solid-js: 1.9.11 - '@zag-js/splitter@1.34.1': + '@zag-js/splitter@1.35.3': dependencies: - '@zag-js/anatomy': 1.34.1 - '@zag-js/core': 1.34.1 - '@zag-js/dom-query': 1.34.1 - '@zag-js/types': 1.34.1 - '@zag-js/utils': 1.34.1 + '@zag-js/anatomy': 1.35.3 + '@zag-js/core': 1.35.3 + '@zag-js/dom-query': 1.35.3 + '@zag-js/types': 1.35.3 + '@zag-js/utils': 1.35.3 - '@zag-js/steps@1.34.1': + '@zag-js/steps@1.35.3': dependencies: - '@zag-js/anatomy': 1.34.1 - '@zag-js/core': 1.34.1 - '@zag-js/dom-query': 1.34.1 - '@zag-js/types': 1.34.1 - '@zag-js/utils': 1.34.1 + '@zag-js/anatomy': 1.35.3 + '@zag-js/core': 1.35.3 + '@zag-js/dom-query': 1.35.3 + '@zag-js/types': 1.35.3 + '@zag-js/utils': 1.35.3 - '@zag-js/store@1.34.1': + '@zag-js/store@1.35.3': dependencies: proxy-compare: 3.0.1 - '@zag-js/switch@1.34.1': - dependencies: - '@zag-js/anatomy': 1.34.1 - '@zag-js/core': 1.34.1 - '@zag-js/dom-query': 1.34.1 - '@zag-js/focus-visible': 1.34.1 - '@zag-js/types': 1.34.1 - '@zag-js/utils': 1.34.1 - - '@zag-js/tabs@1.34.1': - dependencies: - '@zag-js/anatomy': 1.34.1 - '@zag-js/core': 1.34.1 - '@zag-js/dom-query': 1.34.1 - '@zag-js/types': 1.34.1 - '@zag-js/utils': 1.34.1 - - '@zag-js/tags-input@1.34.1': - dependencies: - '@zag-js/anatomy': 1.34.1 - '@zag-js/auto-resize': 1.34.1 - '@zag-js/core': 1.34.1 - '@zag-js/dom-query': 1.34.1 - '@zag-js/interact-outside': 1.34.1 - '@zag-js/live-region': 1.34.1 - '@zag-js/types': 1.34.1 - '@zag-js/utils': 1.34.1 - - '@zag-js/timer@1.34.1': - dependencies: - '@zag-js/anatomy': 1.34.1 - '@zag-js/core': 1.34.1 - '@zag-js/dom-query': 1.34.1 - '@zag-js/types': 1.34.1 - '@zag-js/utils': 1.34.1 - - '@zag-js/toast@1.34.1': - dependencies: - '@zag-js/anatomy': 1.34.1 - '@zag-js/core': 1.34.1 - '@zag-js/dismissable': 1.34.1 - '@zag-js/dom-query': 1.34.1 - '@zag-js/types': 1.34.1 - '@zag-js/utils': 1.34.1 - - '@zag-js/toggle-group@1.34.1': - dependencies: - '@zag-js/anatomy': 1.34.1 - '@zag-js/core': 1.34.1 - '@zag-js/dom-query': 1.34.1 - '@zag-js/types': 1.34.1 - '@zag-js/utils': 1.34.1 - - '@zag-js/toggle@1.34.1': - dependencies: - '@zag-js/anatomy': 1.34.1 - '@zag-js/core': 1.34.1 - '@zag-js/dom-query': 1.34.1 - '@zag-js/types': 1.34.1 - '@zag-js/utils': 1.34.1 - - '@zag-js/tooltip@1.34.1': - dependencies: - '@zag-js/anatomy': 1.34.1 - '@zag-js/core': 1.34.1 - '@zag-js/dom-query': 1.34.1 - '@zag-js/focus-visible': 1.34.1 - '@zag-js/popper': 1.34.1 - '@zag-js/types': 1.34.1 - '@zag-js/utils': 1.34.1 - - '@zag-js/tour@1.34.1': - dependencies: - '@zag-js/anatomy': 1.34.1 - '@zag-js/core': 1.34.1 - '@zag-js/dismissable': 1.34.1 - '@zag-js/dom-query': 1.34.1 - '@zag-js/focus-trap': 1.34.1 - '@zag-js/interact-outside': 1.34.1 - '@zag-js/popper': 1.34.1 - '@zag-js/types': 1.34.1 - '@zag-js/utils': 1.34.1 - - '@zag-js/tree-view@1.34.1': - dependencies: - '@zag-js/anatomy': 1.34.1 - '@zag-js/collection': 1.34.1 - '@zag-js/core': 1.34.1 - '@zag-js/dom-query': 1.34.1 - '@zag-js/types': 1.34.1 - '@zag-js/utils': 1.34.1 - - '@zag-js/types@1.34.1': + '@zag-js/switch@1.35.3': + dependencies: + '@zag-js/anatomy': 1.35.3 + '@zag-js/core': 1.35.3 + '@zag-js/dom-query': 1.35.3 + '@zag-js/focus-visible': 1.35.3 + '@zag-js/types': 1.35.3 + '@zag-js/utils': 1.35.3 + + '@zag-js/tabs@1.35.3': + dependencies: + '@zag-js/anatomy': 1.35.3 + '@zag-js/core': 1.35.3 + '@zag-js/dom-query': 1.35.3 + '@zag-js/types': 1.35.3 + '@zag-js/utils': 1.35.3 + + '@zag-js/tags-input@1.35.3': + dependencies: + '@zag-js/anatomy': 1.35.3 + '@zag-js/auto-resize': 1.35.3 + '@zag-js/core': 1.35.3 + '@zag-js/dom-query': 1.35.3 + '@zag-js/interact-outside': 1.35.3 + '@zag-js/live-region': 1.35.3 + '@zag-js/types': 1.35.3 + '@zag-js/utils': 1.35.3 + + '@zag-js/timer@1.35.3': + dependencies: + '@zag-js/anatomy': 1.35.3 + '@zag-js/core': 1.35.3 + '@zag-js/dom-query': 1.35.3 + '@zag-js/types': 1.35.3 + '@zag-js/utils': 1.35.3 + + '@zag-js/toast@1.35.3': + dependencies: + '@zag-js/anatomy': 1.35.3 + '@zag-js/core': 1.35.3 + '@zag-js/dismissable': 1.35.3 + '@zag-js/dom-query': 1.35.3 + '@zag-js/types': 1.35.3 + '@zag-js/utils': 1.35.3 + + '@zag-js/toggle-group@1.35.3': + dependencies: + '@zag-js/anatomy': 1.35.3 + '@zag-js/core': 1.35.3 + '@zag-js/dom-query': 1.35.3 + '@zag-js/types': 1.35.3 + '@zag-js/utils': 1.35.3 + + '@zag-js/toggle@1.35.3': + dependencies: + '@zag-js/anatomy': 1.35.3 + '@zag-js/core': 1.35.3 + '@zag-js/dom-query': 1.35.3 + '@zag-js/types': 1.35.3 + '@zag-js/utils': 1.35.3 + + '@zag-js/tooltip@1.35.3': + dependencies: + '@zag-js/anatomy': 1.35.3 + '@zag-js/core': 1.35.3 + '@zag-js/dom-query': 1.35.3 + '@zag-js/focus-visible': 1.35.3 + '@zag-js/popper': 1.35.3 + '@zag-js/types': 1.35.3 + '@zag-js/utils': 1.35.3 + + '@zag-js/tour@1.35.3': + dependencies: + '@zag-js/anatomy': 1.35.3 + '@zag-js/core': 1.35.3 + '@zag-js/dismissable': 1.35.3 + '@zag-js/dom-query': 1.35.3 + '@zag-js/focus-trap': 1.35.3 + '@zag-js/interact-outside': 1.35.3 + '@zag-js/popper': 1.35.3 + '@zag-js/types': 1.35.3 + '@zag-js/utils': 1.35.3 + + '@zag-js/tree-view@1.35.3': + dependencies: + '@zag-js/anatomy': 1.35.3 + '@zag-js/collection': 1.35.3 + '@zag-js/core': 1.35.3 + '@zag-js/dom-query': 1.35.3 + '@zag-js/types': 1.35.3 + '@zag-js/utils': 1.35.3 + + '@zag-js/types@1.35.3': dependencies: csstype: 3.2.3 - '@zag-js/utils@1.34.1': {} + '@zag-js/utils@1.35.3': {} abbrev@3.0.1: {} @@ -11684,10 +12146,11 @@ snapshots: buffer-crc32: 1.0.0 readable-stream: 4.7.0 readdir-glob: 1.1.3 - tar-stream: 3.1.7 + tar-stream: 3.1.8 zip-stream: 6.0.1 transitivePeerDependencies: - bare-abort-controller + - bare-buffer - react-native-b4a argparse@2.0.1: {} @@ -11718,7 +12181,9 @@ snapshots: auto-bind@5.0.1: {} - axios@1.13.5: + aws-ssl-profiles@1.1.2: {} + + axios@1.13.6: dependencies: follow-redirects: 1.15.11 form-data: 4.0.5 @@ -11775,15 +12240,12 @@ snapshots: transitivePeerDependencies: - bare-abort-controller - react-native-b4a - optional: true - bare-os@3.7.0: - optional: true + bare-os@3.7.1: {} bare-path@3.0.0: dependencies: - bare-os: 3.7.0 - optional: true + bare-os: 3.7.1 bare-stream@2.8.0(bare-events@2.8.2): dependencies: @@ -11794,12 +12256,10 @@ snapshots: transitivePeerDependencies: - bare-abort-controller - react-native-b4a - optional: true bare-url@2.3.2: dependencies: bare-path: 3.0.0 - optional: true base64-js@1.5.1: {} @@ -11807,62 +12267,84 @@ snapshots: basic-ftp@5.2.0: {} - better-auth@1.4.19(better-sqlite3@12.6.2)(drizzle-kit@0.31.9)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260305.0)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.6.2)(gel@2.2.0)(kysely@0.28.11))(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(solid-js@1.9.11)(svelte@5.46.1)(vitest@3.2.0(@types/node@25.3.1)(jiti@2.6.1)(jsdom@27.4.0(@noble/hashes@2.0.1))(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))(vue@3.5.29(typescript@5.9.3)): + better-auth@1.5.4(61d6557326f155d0f9393fbb3d05c0cd): dependencies: - '@better-auth/core': 1.4.19(@better-auth/utils@0.3.0)(@better-fetch/fetch@1.1.21)(better-call@1.1.8(zod@4.3.6))(jose@6.1.3)(kysely@0.28.11)(nanostores@1.1.1) - '@better-auth/telemetry': 1.4.19(@better-auth/core@1.4.19(@better-auth/utils@0.3.0)(@better-fetch/fetch@1.1.21)(better-call@1.1.8(zod@4.3.6))(jose@6.1.3)(kysely@0.28.11)(nanostores@1.1.1)) - '@better-auth/utils': 0.3.0 + '@better-auth/core': 1.5.4(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(@cloudflare/workers-types@4.20260307.1)(better-call@1.3.2(zod@4.3.6))(jose@6.2.0)(kysely@0.28.11)(nanostores@1.1.1) + '@better-auth/drizzle-adapter': 1.5.4(@better-auth/core@1.5.4(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(@cloudflare/workers-types@4.20260307.1)(better-call@1.3.2(zod@4.3.6))(jose@6.2.0)(kysely@0.28.11)(nanostores@1.1.1))(@better-auth/utils@0.3.1)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260307.1)(@electric-sql/pglite@0.3.15)(@opentelemetry/api@1.9.0)(@prisma/client@7.4.2(prisma@7.4.2(@types/react@19.2.14)(better-sqlite3@12.6.2)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(typescript@5.9.3))(@types/better-sqlite3@7.6.13)(better-sqlite3@12.6.2)(gel@2.2.0)(kysely@0.28.11)(mysql2@3.15.3)(postgres@3.4.7)(prisma@7.4.2(@types/react@19.2.14)(better-sqlite3@12.6.2)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(typescript@5.9.3))) + '@better-auth/kysely-adapter': 1.5.4(@better-auth/core@1.5.4(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(@cloudflare/workers-types@4.20260307.1)(better-call@1.3.2(zod@4.3.6))(jose@6.2.0)(kysely@0.28.11)(nanostores@1.1.1))(@better-auth/utils@0.3.1)(kysely@0.28.11) + '@better-auth/memory-adapter': 1.5.4(@better-auth/core@1.5.4(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(@cloudflare/workers-types@4.20260307.1)(better-call@1.3.2(zod@4.3.6))(jose@6.2.0)(kysely@0.28.11)(nanostores@1.1.1))(@better-auth/utils@0.3.1) + '@better-auth/mongo-adapter': 1.5.4(@better-auth/core@1.5.4(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(@cloudflare/workers-types@4.20260307.1)(better-call@1.3.2(zod@4.3.6))(jose@6.2.0)(kysely@0.28.11)(nanostores@1.1.1))(@better-auth/utils@0.3.1)(mongodb@7.1.0(socks@2.8.7)) + '@better-auth/prisma-adapter': 1.5.4(@better-auth/core@1.5.4(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(@cloudflare/workers-types@4.20260307.1)(better-call@1.3.2(zod@4.3.6))(jose@6.2.0)(kysely@0.28.11)(nanostores@1.1.1))(@better-auth/utils@0.3.1)(@prisma/client@7.4.2(prisma@7.4.2(@types/react@19.2.14)(better-sqlite3@12.6.2)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(typescript@5.9.3))(prisma@7.4.2(@types/react@19.2.14)(better-sqlite3@12.6.2)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(typescript@5.9.3)) + '@better-auth/telemetry': 1.5.4(@better-auth/core@1.5.4(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(@cloudflare/workers-types@4.20260307.1)(better-call@1.3.2(zod@4.3.6))(jose@6.2.0)(kysely@0.28.11)(nanostores@1.1.1)) + '@better-auth/utils': 0.3.1 '@better-fetch/fetch': 1.1.21 '@noble/ciphers': 2.1.1 '@noble/hashes': 2.0.1 - better-call: 1.1.8(zod@4.3.6) + better-call: 1.3.2(zod@4.3.6) defu: 6.1.4 - jose: 6.1.3 + jose: 6.2.0 kysely: 0.28.11 nanostores: 1.1.1 zod: 4.3.6 optionalDependencies: + '@prisma/client': 7.4.2(prisma@7.4.2(@types/react@19.2.14)(better-sqlite3@12.6.2)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(typescript@5.9.3) better-sqlite3: 12.6.2 drizzle-kit: 0.31.9 - drizzle-orm: 0.45.1(@cloudflare/workers-types@4.20260305.0)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.6.2)(gel@2.2.0)(kysely@0.28.11) + drizzle-orm: 0.45.1(@cloudflare/workers-types@4.20260307.1)(@electric-sql/pglite@0.3.15)(@opentelemetry/api@1.9.0)(@prisma/client@7.4.2(prisma@7.4.2(@types/react@19.2.14)(better-sqlite3@12.6.2)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(typescript@5.9.3))(@types/better-sqlite3@7.6.13)(better-sqlite3@12.6.2)(gel@2.2.0)(kysely@0.28.11)(mysql2@3.15.3)(postgres@3.4.7)(prisma@7.4.2(@types/react@19.2.14)(better-sqlite3@12.6.2)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(typescript@5.9.3)) + mongodb: 7.1.0(socks@2.8.7) + mysql2: 3.15.3 + prisma: 7.4.2(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.5.2)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(typescript@5.9.3) react: 19.2.4 react-dom: 19.2.3(react@19.2.4) solid-js: 1.9.11 svelte: 5.46.1 - vitest: 3.2.0(@types/node@25.3.1)(jiti@2.6.1)(jsdom@27.4.0(@noble/hashes@2.0.1))(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + vitest: 3.2.0(@types/node@25.3.5)(jiti@2.6.1)(jsdom@27.4.0(@noble/hashes@2.0.1))(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) vue: 3.5.29(typescript@5.9.3) + transitivePeerDependencies: + - '@cloudflare/workers-types' - better-auth@1.4.19(better-sqlite3@12.6.2)(drizzle-kit@0.31.9)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260305.0)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.6.2)(gel@2.2.0)(kysely@0.28.11))(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(solid-js@1.9.11)(svelte@5.46.1)(vitest@4.0.18)(vue@3.5.29(typescript@5.9.3)): + better-auth@1.5.4(df0661f5bde84186cc7a939741e06321): dependencies: - '@better-auth/core': 1.4.19(@better-auth/utils@0.3.0)(@better-fetch/fetch@1.1.21)(better-call@1.1.8(zod@4.3.6))(jose@6.1.3)(kysely@0.28.11)(nanostores@1.1.1) - '@better-auth/telemetry': 1.4.19(@better-auth/core@1.4.19(@better-auth/utils@0.3.0)(@better-fetch/fetch@1.1.21)(better-call@1.1.8(zod@4.3.6))(jose@6.1.3)(kysely@0.28.11)(nanostores@1.1.1)) - '@better-auth/utils': 0.3.0 + '@better-auth/core': 1.5.4(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(@cloudflare/workers-types@4.20260307.1)(better-call@1.3.2(zod@4.3.6))(jose@6.2.0)(kysely@0.28.11)(nanostores@1.1.1) + '@better-auth/drizzle-adapter': 1.5.4(@better-auth/core@1.5.4(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(@cloudflare/workers-types@4.20260307.1)(better-call@1.3.2(zod@4.3.6))(jose@6.2.0)(kysely@0.28.11)(nanostores@1.1.1))(@better-auth/utils@0.3.1)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260307.1)(@electric-sql/pglite@0.3.15)(@opentelemetry/api@1.9.0)(@prisma/client@7.4.2(prisma@7.4.2(@types/react@19.2.14)(better-sqlite3@12.6.2)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(typescript@5.9.3))(@types/better-sqlite3@7.6.13)(better-sqlite3@12.6.2)(gel@2.2.0)(kysely@0.28.11)(mysql2@3.15.3)(postgres@3.4.7)(prisma@7.4.2(@types/react@19.2.14)(better-sqlite3@12.6.2)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(typescript@5.9.3))) + '@better-auth/kysely-adapter': 1.5.4(@better-auth/core@1.5.4(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(@cloudflare/workers-types@4.20260307.1)(better-call@1.3.2(zod@4.3.6))(jose@6.2.0)(kysely@0.28.11)(nanostores@1.1.1))(@better-auth/utils@0.3.1)(kysely@0.28.11) + '@better-auth/memory-adapter': 1.5.4(@better-auth/core@1.5.4(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(@cloudflare/workers-types@4.20260307.1)(better-call@1.3.2(zod@4.3.6))(jose@6.2.0)(kysely@0.28.11)(nanostores@1.1.1))(@better-auth/utils@0.3.1) + '@better-auth/mongo-adapter': 1.5.4(@better-auth/core@1.5.4(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(@cloudflare/workers-types@4.20260307.1)(better-call@1.3.2(zod@4.3.6))(jose@6.2.0)(kysely@0.28.11)(nanostores@1.1.1))(@better-auth/utils@0.3.1)(mongodb@7.1.0(socks@2.8.7)) + '@better-auth/prisma-adapter': 1.5.4(@better-auth/core@1.5.4(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(@cloudflare/workers-types@4.20260307.1)(better-call@1.3.2(zod@4.3.6))(jose@6.2.0)(kysely@0.28.11)(nanostores@1.1.1))(@better-auth/utils@0.3.1)(@prisma/client@7.4.2(prisma@7.4.2(@types/react@19.2.14)(better-sqlite3@12.6.2)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(typescript@5.9.3))(prisma@7.4.2(@types/react@19.2.14)(better-sqlite3@12.6.2)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(typescript@5.9.3)) + '@better-auth/telemetry': 1.5.4(@better-auth/core@1.5.4(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(@cloudflare/workers-types@4.20260307.1)(better-call@1.3.2(zod@4.3.6))(jose@6.2.0)(kysely@0.28.11)(nanostores@1.1.1)) + '@better-auth/utils': 0.3.1 '@better-fetch/fetch': 1.1.21 '@noble/ciphers': 2.1.1 '@noble/hashes': 2.0.1 - better-call: 1.1.8(zod@4.3.6) + better-call: 1.3.2(zod@4.3.6) defu: 6.1.4 - jose: 6.1.3 + jose: 6.2.0 kysely: 0.28.11 nanostores: 1.1.1 zod: 4.3.6 optionalDependencies: + '@prisma/client': 7.4.2(prisma@7.4.2(@types/react@19.2.14)(better-sqlite3@12.6.2)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(typescript@5.9.3) better-sqlite3: 12.6.2 drizzle-kit: 0.31.9 - drizzle-orm: 0.45.1(@cloudflare/workers-types@4.20260305.0)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.6.2)(gel@2.2.0)(kysely@0.28.11) + drizzle-orm: 0.45.1(@cloudflare/workers-types@4.20260307.1)(@electric-sql/pglite@0.3.15)(@opentelemetry/api@1.9.0)(@prisma/client@7.4.2(prisma@7.4.2(@types/react@19.2.14)(better-sqlite3@12.6.2)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(typescript@5.9.3))(@types/better-sqlite3@7.6.13)(better-sqlite3@12.6.2)(gel@2.2.0)(kysely@0.28.11)(mysql2@3.15.3)(postgres@3.4.7)(prisma@7.4.2(@types/react@19.2.14)(better-sqlite3@12.6.2)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(typescript@5.9.3)) + mongodb: 7.1.0(socks@2.8.7) + mysql2: 3.15.3 + prisma: 7.4.2(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.5.2)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(typescript@5.9.3) react: 19.2.4 react-dom: 19.2.3(react@19.2.4) solid-js: 1.9.11 svelte: 5.46.1 - vitest: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.3.1)(@vitest/ui@4.0.18)(jiti@2.6.1)(jsdom@27.4.0(@noble/hashes@2.0.1))(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + vitest: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.3.5)(@vitest/ui@4.0.18)(jiti@2.6.1)(jsdom@27.4.0(@noble/hashes@2.0.1))(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) vue: 3.5.29(typescript@5.9.3) + transitivePeerDependencies: + - '@cloudflare/workers-types' - better-call@1.1.8(zod@4.3.6): + better-call@1.3.2(zod@4.3.6): dependencies: - '@better-auth/utils': 0.3.0 + '@better-auth/utils': 0.3.1 '@better-fetch/fetch': 1.1.21 rou3: 0.7.12 - set-cookie-parser: 2.7.2 + set-cookie-parser: 3.0.1 optionalDependencies: zod: 4.3.6 @@ -11932,7 +12414,7 @@ snapshots: dependencies: balanced-match: 1.0.2 - brace-expansion@5.0.3: + brace-expansion@5.0.4: dependencies: balanced-match: 4.0.4 @@ -11943,11 +12425,13 @@ snapshots: browserslist@4.28.1: dependencies: baseline-browser-mapping: 2.10.0 - caniuse-lite: 1.0.30001774 - electron-to-chromium: 1.5.302 - node-releases: 2.0.27 + caniuse-lite: 1.0.30001777 + electron-to-chromium: 1.5.307 + node-releases: 2.0.36 update-browserslist-db: 1.2.3(browserslist@4.28.1) + bson@7.2.0: {} + btoa@1.2.1: {} buffer-crc32@0.2.13: {} @@ -11976,6 +12460,23 @@ snapshots: bytes@3.1.2: {} + c12@3.1.0(magicast@0.5.2): + dependencies: + chokidar: 4.0.3 + confbox: 0.2.4 + defu: 6.1.4 + dotenv: 16.6.1 + exsolve: 1.0.8 + giget: 2.0.0 + jiti: 2.6.1 + ohash: 2.0.11 + pathe: 2.0.3 + perfect-debounce: 1.0.0 + pkg-types: 2.3.0 + rc9: 2.1.2 + optionalDependencies: + magicast: 0.5.2 + c12@3.3.3(magicast@0.5.2): dependencies: chokidar: 5.0.0 @@ -12009,7 +12510,7 @@ snapshots: camelcase@8.0.0: {} - caniuse-lite@1.0.30001774: {} + caniuse-lite@1.0.30001777: {} ccount@2.0.1: {} @@ -12042,18 +12543,27 @@ snapshots: check-error@2.1.3: {} - chevrotain-allstar@0.3.1(chevrotain@11.1.1): + chevrotain-allstar@0.3.1(chevrotain@11.1.2): dependencies: - chevrotain: 11.1.1 + chevrotain: 11.1.2 lodash-es: 4.17.23 - chevrotain@11.1.1: + chevrotain@10.5.0: + dependencies: + '@chevrotain/cst-dts-gen': 10.5.0 + '@chevrotain/gast': 10.5.0 + '@chevrotain/types': 10.5.0 + '@chevrotain/utils': 10.5.0 + lodash: 4.17.21 + regexp-to-ast: 0.5.0 + + chevrotain@11.1.2: dependencies: - '@chevrotain/cst-dts-gen': 11.1.1 - '@chevrotain/gast': 11.1.1 - '@chevrotain/regexp-to-ast': 11.1.1 - '@chevrotain/types': 11.1.1 - '@chevrotain/utils': 11.1.1 + '@chevrotain/cst-dts-gen': 11.1.2 + '@chevrotain/gast': 11.1.2 + '@chevrotain/regexp-to-ast': 11.1.2 + '@chevrotain/types': 11.1.2 + '@chevrotain/utils': 11.1.2 lodash-es: 4.17.23 chokidar@4.0.3: @@ -12068,9 +12578,9 @@ snapshots: chownr@3.0.0: {} - chromium-bidi@14.0.0(devtools-protocol@0.0.1566079): + chromium-bidi@14.0.0(devtools-protocol@0.0.1581282): dependencies: - devtools-protocol: 0.0.1566079 + devtools-protocol: 0.0.1581282 mitt: 3.0.1 zod: 3.25.76 @@ -12100,9 +12610,9 @@ snapshots: cli-spinners@2.9.2: {} - cli-truncate@5.1.1: + cli-truncate@5.2.0: dependencies: - slice-ansi: 7.1.2 + slice-ansi: 8.0.0 string-width: 8.2.0 clipboardy@4.0.0: @@ -12231,7 +12741,7 @@ snapshots: dependencies: layout-base: 2.0.1 - cosmiconfig@9.0.0(typescript@5.9.3): + cosmiconfig@9.0.1(typescript@5.9.3): dependencies: env-paths: 2.2.1 import-fresh: 3.3.1 @@ -12240,7 +12750,7 @@ snapshots: optionalDependencies: typescript: 5.9.3 - countup.js@2.9.0: {} + countup.js@2.10.0: {} crc-32@1.2.2: {} @@ -12269,9 +12779,9 @@ snapshots: domutils: 3.2.2 nth-check: 2.1.1 - css-tree@3.1.0: + css-tree@3.2.1: dependencies: - mdn-data: 2.12.2 + mdn-data: 2.27.1 source-map-js: 1.2.1 css-what@6.2.2: {} @@ -12281,8 +12791,8 @@ snapshots: cssstyle@5.3.7: dependencies: '@asamuzakjp/css-color': 4.1.2 - '@csstools/css-syntax-patches-for-csstree': 1.0.28 - css-tree: 3.1.0 + '@csstools/css-syntax-patches-for-csstree': 1.1.0 + css-tree: 3.2.1 lru-cache: 11.2.6 csstype@3.2.3: {} @@ -12485,10 +12995,12 @@ snapshots: dayjs@1.11.19: {} - db0@0.3.4(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260305.0)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.6.2)(gel@2.2.0)(kysely@0.28.11)): + db0@0.3.4(@electric-sql/pglite@0.3.15)(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260307.1)(@electric-sql/pglite@0.3.15)(@opentelemetry/api@1.9.0)(@prisma/client@7.4.2(prisma@7.4.2(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.5.2)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(typescript@5.9.3))(@types/better-sqlite3@7.6.13)(better-sqlite3@12.6.2)(gel@2.2.0)(kysely@0.28.11)(mysql2@3.15.3)(postgres@3.4.7)(prisma@7.4.2(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.5.2)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(typescript@5.9.3)))(mysql2@3.15.3): optionalDependencies: + '@electric-sql/pglite': 0.3.15 better-sqlite3: 12.6.2 - drizzle-orm: 0.45.1(@cloudflare/workers-types@4.20260305.0)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.6.2)(gel@2.2.0)(kysely@0.28.11) + drizzle-orm: 0.45.1(@cloudflare/workers-types@4.20260307.1)(@electric-sql/pglite@0.3.15)(@opentelemetry/api@1.9.0)(@prisma/client@7.4.2(prisma@7.4.2(@types/react@19.2.14)(better-sqlite3@12.6.2)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(typescript@5.9.3))(@types/better-sqlite3@7.6.13)(better-sqlite3@12.6.2)(gel@2.2.0)(kysely@0.28.11)(mysql2@3.15.3)(postgres@3.4.7)(prisma@7.4.2(@types/react@19.2.14)(better-sqlite3@12.6.2)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(typescript@5.9.3)) + mysql2: 3.15.3 debug@2.6.9: dependencies: @@ -12510,6 +13022,8 @@ snapshots: deep-is@0.1.4: {} + deepmerge-ts@7.1.5: {} + deepmerge@4.3.1: {} default-browser-id@5.0.1: {} @@ -12555,7 +13069,7 @@ snapshots: dependencies: dequal: 2.0.3 - devtools-protocol@0.0.1566079: {} + devtools-protocol@0.0.1581282: {} dexie@4.3.0: {} @@ -12577,7 +13091,7 @@ snapshots: dependencies: domelementtype: 2.3.0 - dompurify@3.3.1: + dompurify@3.3.2: optionalDependencies: '@types/trusted-types': 2.0.7 @@ -12604,14 +13118,19 @@ snapshots: transitivePeerDependencies: - supports-color - drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260305.0)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.6.2)(gel@2.2.0)(kysely@0.28.11): + drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260307.1)(@electric-sql/pglite@0.3.15)(@opentelemetry/api@1.9.0)(@prisma/client@7.4.2(prisma@7.4.2(@types/react@19.2.14)(better-sqlite3@12.6.2)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(typescript@5.9.3))(@types/better-sqlite3@7.6.13)(better-sqlite3@12.6.2)(gel@2.2.0)(kysely@0.28.11)(mysql2@3.15.3)(postgres@3.4.7)(prisma@7.4.2(@types/react@19.2.14)(better-sqlite3@12.6.2)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(typescript@5.9.3)): optionalDependencies: - '@cloudflare/workers-types': 4.20260305.0 + '@cloudflare/workers-types': 4.20260307.1 + '@electric-sql/pglite': 0.3.15 '@opentelemetry/api': 1.9.0 + '@prisma/client': 7.4.2(prisma@7.4.2(@types/react@19.2.14)(better-sqlite3@12.6.2)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(typescript@5.9.3) '@types/better-sqlite3': 7.6.13 better-sqlite3: 12.6.2 gel: 2.2.0 kysely: 0.28.11 + mysql2: 3.15.3 + postgres: 3.4.7 + prisma: 7.4.2(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.5.2)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(typescript@5.9.3) dunder-proto@1.0.1: dependencies: @@ -12625,11 +13144,16 @@ snapshots: ee-first@1.1.1: {} + effect@3.18.4: + dependencies: + '@standard-schema/spec': 1.1.0 + fast-check: 3.23.2 + ejs@3.1.10: dependencies: jake: 10.9.4 - electron-to-chromium@1.5.302: {} + electron-to-chromium@1.5.307: {} emoji-regex-xs@1.0.0: {} @@ -12639,13 +13163,15 @@ snapshots: emoji-regex@9.2.2: {} + empathic@2.0.0: {} + encodeurl@2.0.0: {} end-of-stream@1.4.5: dependencies: once: 1.4.0 - enhanced-resolve@5.19.0: + enhanced-resolve@5.20.0: dependencies: graceful-fs: 4.2.11 tapable: 2.3.0 @@ -12690,7 +13216,7 @@ snapshots: has-tostringtag: 1.0.2 hasown: 2.0.2 - es-toolkit@1.44.0: {} + es-toolkit@1.45.1: {} esbuild-register@3.6.0(esbuild@0.25.12): dependencies: @@ -12857,14 +13383,14 @@ snapshots: optionalDependencies: source-map: 0.6.1 - eslint-plugin-drizzle@0.2.3(eslint@9.39.3(jiti@2.6.1)): + eslint-plugin-drizzle@0.2.3(eslint@9.39.4(jiti@2.6.1)): dependencies: - eslint: 9.39.3(jiti@2.6.1) + eslint: 9.39.4(jiti@2.6.1) - eslint-plugin-solid@0.14.5(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3): + eslint-plugin-solid@0.14.5(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3): dependencies: - '@typescript-eslint/utils': 8.56.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3) - eslint: 9.39.3(jiti@2.6.1) + '@typescript-eslint/utils': 8.56.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) + eslint: 9.39.4(jiti@2.6.1) estraverse: 5.3.0 is-html: 2.0.0 kebab-case: 1.0.2 @@ -12874,12 +13400,12 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-plugin-sonarjs@3.0.7(eslint@9.39.3(jiti@2.6.1)): + eslint-plugin-sonarjs@3.0.7(eslint@9.39.4(jiti@2.6.1)): dependencies: '@eslint-community/regexpp': 4.12.2 builtin-modules: 3.3.0 bytes: 3.1.2 - eslint: 9.39.3(jiti@2.6.1) + eslint: 9.39.4(jiti@2.6.1) functional-red-black-tree: 1.0.1 jsx-ast-utils-x: 0.1.0 lodash.merge: 4.6.2 @@ -12888,16 +13414,16 @@ snapshots: semver: 7.7.4 typescript: 5.9.3 - eslint-plugin-unicorn@62.0.0(eslint@9.39.3(jiti@2.6.1)): + eslint-plugin-unicorn@62.0.0(eslint@9.39.4(jiti@2.6.1)): dependencies: '@babel/helper-validator-identifier': 7.28.5 - '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.3(jiti@2.6.1)) + '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.4(jiti@2.6.1)) '@eslint/plugin-kit': 0.4.1 change-case: 5.4.4 ci-info: 4.4.0 clean-regexp: 1.0.0 core-js-compat: 3.48.0 - eslint: 9.39.3(jiti@2.6.1) + eslint: 9.39.4(jiti@2.6.1) esquery: 1.7.0 find-up-simple: 1.0.1 globals: 16.5.0 @@ -12921,15 +13447,15 @@ snapshots: eslint-visitor-keys@5.0.1: {} - eslint@9.39.3(jiti@2.6.1): + eslint@9.39.4(jiti@2.6.1): dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.3(jiti@2.6.1)) + '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.4(jiti@2.6.1)) '@eslint-community/regexpp': 4.12.2 - '@eslint/config-array': 0.21.1 + '@eslint/config-array': 0.21.2 '@eslint/config-helpers': 0.4.2 '@eslint/core': 0.17.0 - '@eslint/eslintrc': 3.3.4 - '@eslint/js': 9.39.3 + '@eslint/eslintrc': 3.3.5 + '@eslint/js': 9.39.4 '@eslint/plugin-kit': 0.4.1 '@humanfs/node': 0.16.7 '@humanwhocodes/module-importer': 1.0.1 @@ -13032,10 +13558,10 @@ snapshots: expect-type@1.3.0: {} - express-rate-limit@8.2.1(express@5.2.1): + express-rate-limit@8.3.0(express@5.2.1): dependencies: express: 5.2.1 - ip-address: 10.0.1 + ip-address: 10.1.0 express@5.2.1: dependencies: @@ -13084,6 +13610,10 @@ snapshots: fake-indexeddb@6.2.5: {} + fast-check@3.23.2: + dependencies: + pure-rand: 6.1.0 + fast-deep-equal@3.1.3: {} fast-fifo@1.3.2: {} @@ -13150,12 +13680,12 @@ snapshots: flat-cache@4.0.1: dependencies: - flatted: 3.3.3 + flatted: 3.3.4 keyv: 4.5.4 flatbuffers@1.12.0: {} - flatted@3.3.3: {} + flatted@3.3.4: {} focus-trap@7.8.0: dependencies: @@ -13205,6 +13735,10 @@ snapshots: - supports-color optional: true + generate-function@2.3.1: + dependencies: + is-property: 1.0.2 + gensync@1.0.0-beta.2: {} get-caller-file@2.0.5: {} @@ -13233,7 +13767,7 @@ snapshots: get-stream@5.2.0: dependencies: - pump: 3.0.3 + pump: 3.0.4 get-stream@8.0.1: {} @@ -13274,7 +13808,7 @@ snapshots: dependencies: foreground-child: 3.3.1 jackspeak: 3.4.3 - minimatch: 9.0.8 + minimatch: 9.0.9 minipass: 7.1.3 package-json-from-dist: 1.0.1 path-scurry: 1.11.1 @@ -13311,6 +13845,10 @@ snapshots: graceful-fs@4.2.11: {} + grammex@3.1.12: {} + + graphmatch@1.1.1: {} + guid-typescript@1.0.9: {} gzip-size@6.0.0: @@ -13379,13 +13917,15 @@ snapshots: he@1.2.0: {} - hono@4.12.3: {} + hono@4.11.4: {} + + hono@4.12.5: {} hookable@5.5.3: {} html-encoding-sniffer@6.0.0(@noble/hashes@2.0.1): dependencies: - '@exodus/bytes': 1.14.1(@noble/hashes@2.0.1) + '@exodus/bytes': 1.15.0(@noble/hashes@2.0.1) transitivePeerDependencies: - '@noble/hashes' @@ -13422,6 +13962,8 @@ snapshots: http-shutdown@1.2.2: {} + http-status-codes@2.3.0: {} + https-proxy-agent@7.0.6: dependencies: agent-base: 7.1.4 @@ -13467,13 +14009,13 @@ snapshots: ini@1.3.8: {} - ink-spinner@5.0.0(ink@6.8.0(react@19.2.4))(react@19.2.4): + ink-spinner@5.0.0(ink@6.8.0(@types/react@19.2.14)(react@19.2.4))(react@19.2.4): dependencies: cli-spinners: 2.9.2 - ink: 6.8.0(react@19.2.4) + ink: 6.8.0(@types/react@19.2.14)(react@19.2.4) react: 19.2.4 - ink@6.8.0(react@19.2.4): + ink@6.8.0(@types/react@19.2.14)(react@19.2.4): dependencies: '@alcalzone/ansi-tokenize': 0.2.5 ansi-escapes: 7.3.0 @@ -13482,9 +14024,9 @@ snapshots: chalk: 5.6.2 cli-boxes: 3.0.0 cli-cursor: 4.0.0 - cli-truncate: 5.1.1 + cli-truncate: 5.2.0 code-excerpt: 4.0.0 - es-toolkit: 1.44.0 + es-toolkit: 1.45.1 indent-string: 5.0.0 is-in-ci: 2.0.0 patch-console: 2.0.0 @@ -13501,6 +14043,8 @@ snapshots: wrap-ansi: 9.0.2 ws: 8.19.0 yoga-layout: 3.2.1 + optionalDependencies: + '@types/react': 19.2.14 transitivePeerDependencies: - bufferutil - utf-8-validate @@ -13511,9 +14055,9 @@ snapshots: internmap@2.0.3: {} - ioredis@5.9.3: + ioredis@5.10.0: dependencies: - '@ioredis/commands': 1.5.0 + '@ioredis/commands': 1.5.1 cluster-key-slot: 1.1.2 debug: 4.4.3 denque: 2.1.0 @@ -13525,8 +14069,6 @@ snapshots: transitivePeerDependencies: - supports-color - ip-address@10.0.1: {} - ip-address@10.1.0: {} ipaddr.js@1.9.1: {} @@ -13581,6 +14123,8 @@ snapshots: is-promise@4.0.0: {} + is-property@1.0.2: {} + is-reference@1.2.1: dependencies: '@types/estree': 1.0.8 @@ -13633,7 +14177,7 @@ snapshots: jiti@2.6.1: {} - jose@6.1.3: {} + jose@6.2.0: {} js-tokens@4.0.0: {} @@ -13647,7 +14191,7 @@ snapshots: dependencies: '@acemir/cssom': 0.9.31 '@asamuzakjp/dom-selector': 6.8.1 - '@exodus/bytes': 1.14.1(@noble/hashes@2.0.1) + '@exodus/bytes': 1.15.0(@noble/hashes@2.0.1) cssstyle: 5.3.7 data-urls: 6.0.1 decimal.js: 10.6.0 @@ -13689,7 +14233,7 @@ snapshots: jsx-ast-utils-x@0.1.0: {} - katex@0.16.33: + katex@0.16.37: dependencies: commander: 8.3.0 @@ -13715,8 +14259,8 @@ snapshots: langium@4.2.1: dependencies: - chevrotain: 11.1.1 - chevrotain-allstar: 0.3.1(chevrotain@11.1.1) + chevrotain: 11.1.2 + chevrotain-allstar: 0.3.1(chevrotain@11.1.2) vscode-languageserver: 9.0.1 vscode-languageserver-textdocument: 1.0.12 vscode-uri: 3.1.0 @@ -13787,6 +14331,8 @@ snapshots: lightningcss-win32-arm64-msvc: 1.31.1 lightningcss-win32-x64-msvc: 1.31.1 + lilconfig@2.1.0: {} + lines-and-columns@1.2.4: {} listhen@1.9.0: @@ -13802,7 +14348,7 @@ snapshots: h3: 1.15.5 http-shutdown: 1.2.2 jiti: 2.6.1 - mlly: 1.8.0 + mlly: 1.8.1 node-forge: 1.3.3 pathe: 1.1.2 std-env: 3.10.0 @@ -13812,24 +14358,24 @@ snapshots: local-pkg@1.1.2: dependencies: - mlly: 1.8.0 + mlly: 1.8.1 pkg-types: 2.3.0 quansync: 0.2.11 localflare-api@0.3.1: dependencies: - hono: 4.12.3 + hono: 4.12.5 localflare-core@0.3.1: dependencies: tiny-jsonc: 1.0.2 toml: 3.0.0 - localflare@0.3.1: + localflare@0.3.1(@types/react@19.2.14): dependencies: cac: 6.7.14 - ink: 6.8.0(react@19.2.4) - ink-spinner: 5.0.0(ink@6.8.0(react@19.2.4))(react@19.2.4) + ink: 6.8.0(@types/react@19.2.14)(react@19.2.4) + ink-spinner: 5.0.0(ink@6.8.0(@types/react@19.2.14)(react@19.2.4))(react@19.2.4) localflare-api: 0.3.1 localflare-core: 0.3.1 open: 10.2.0 @@ -13855,10 +14401,14 @@ snapshots: lodash.merge@4.6.2: {} + lodash@4.17.21: {} + lodash@4.17.23: {} long@4.0.0: {} + long@5.3.2: {} + loupe@3.2.1: {} lru-cache@10.4.3: {} @@ -13871,6 +14421,8 @@ snapshots: lru-cache@7.18.3: {} + lru.min@1.1.4: {} + lz-string@1.5.0: {} magic-string@0.30.21: @@ -13907,10 +14459,12 @@ snapshots: unist-util-visit: 5.1.0 vfile: 6.0.3 - mdn-data@2.12.2: {} + mdn-data@2.27.1: {} media-typer@1.1.0: {} + memory-pager@1.5.0: {} + merge-anything@5.1.7: dependencies: is-what: 4.1.16 @@ -13934,8 +14488,8 @@ snapshots: d3-sankey: 0.12.3 dagre-d3-es: 7.0.13 dayjs: 1.11.19 - dompurify: 3.3.1 - katex: 0.16.33 + dompurify: 3.3.2 + katex: 0.16.37 khroma: 2.1.0 lodash-es: 4.17.23 marked: 16.4.2 @@ -14010,12 +14564,12 @@ snapshots: - bufferutil - utf-8-validate - miniflare@4.20260305.0: + miniflare@4.20260301.1: dependencies: '@cspotcode/source-map-support': 0.8.1 sharp: 0.34.5 undici: 7.18.2 - workerd: 1.20260305.0 + workerd: 1.20260301.1 ws: 8.18.0 youch: 4.1.0-beta.10 transitivePeerDependencies: @@ -14028,7 +14582,7 @@ snapshots: minimatch@10.2.4: dependencies: - brace-expansion: 5.0.3 + brace-expansion: 5.0.4 minimatch@3.1.5: dependencies: @@ -14038,9 +14592,9 @@ snapshots: dependencies: brace-expansion: 2.0.2 - minimatch@9.0.8: + minimatch@9.0.9: dependencies: - brace-expansion: 5.0.3 + brace-expansion: 2.0.2 minimist@1.2.8: {} @@ -14060,19 +14614,48 @@ snapshots: dependencies: minimist: 1.2.8 - mlly@1.8.0: + mlly@1.8.1: dependencies: acorn: 8.16.0 pathe: 2.0.3 pkg-types: 1.3.1 ufo: 1.6.3 + mongodb-connection-string-url@7.0.1: + dependencies: + '@types/whatwg-url': 13.0.0 + whatwg-url: 14.2.0 + + mongodb@7.1.0(socks@2.8.7): + dependencies: + '@mongodb-js/saslprep': 1.4.6 + bson: 7.2.0 + mongodb-connection-string-url: 7.0.1 + optionalDependencies: + socks: 2.8.7 + mrmime@2.0.1: {} ms@2.0.0: {} ms@2.1.3: {} + mysql2@3.15.3: + dependencies: + aws-ssl-profiles: 1.1.2 + denque: 2.1.0 + generate-function: 2.3.1 + iconv-lite: 0.7.2 + long: 5.3.2 + lru.min: 1.1.4 + named-placeholders: 1.1.6 + seq-queue: 0.0.5 + sqlstring: 2.3.3 + + named-placeholders@1.1.6: + dependencies: + lru.min: 1.1.4 + nanoid@3.3.11: {} nanostores@1.1.1: {} @@ -14085,11 +14668,11 @@ snapshots: netmask@2.0.2: {} - nitropack@2.13.1(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260305.0)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.6.2)(gel@2.2.0)(kysely@0.28.11))(rolldown@1.0.0-beta.51): + nitropack@2.13.1(@electric-sql/pglite@0.3.15)(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260307.1)(@electric-sql/pglite@0.3.15)(@opentelemetry/api@1.9.0)(@prisma/client@7.4.2(prisma@7.4.2(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.5.2)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(typescript@5.9.3))(@types/better-sqlite3@7.6.13)(better-sqlite3@12.6.2)(gel@2.2.0)(kysely@0.28.11)(mysql2@3.15.3)(postgres@3.4.7)(prisma@7.4.2(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.5.2)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(typescript@5.9.3)))(mysql2@3.15.3)(rolldown@1.0.0-beta.51): dependencies: '@cloudflare/kv-asset-handler': 0.4.2 '@rollup/plugin-alias': 6.0.0(rollup@4.59.0) - '@rollup/plugin-commonjs': 29.0.0(rollup@4.59.0) + '@rollup/plugin-commonjs': 29.0.2(rollup@4.59.0) '@rollup/plugin-inject': 5.0.5(rollup@4.59.0) '@rollup/plugin-json': 6.1.0(rollup@4.59.0) '@rollup/plugin-node-resolve': 16.0.3(rollup@4.59.0) @@ -14106,7 +14689,7 @@ snapshots: cookie-es: 2.0.0 croner: 9.1.0 crossws: 0.3.5 - db0: 0.3.4(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260305.0)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.6.2)(gel@2.2.0)(kysely@0.28.11)) + db0: 0.3.4(@electric-sql/pglite@0.3.15)(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260307.1)(@electric-sql/pglite@0.3.15)(@opentelemetry/api@1.9.0)(@prisma/client@7.4.2(prisma@7.4.2(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.5.2)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(typescript@5.9.3))(@types/better-sqlite3@7.6.13)(better-sqlite3@12.6.2)(gel@2.2.0)(kysely@0.28.11)(mysql2@3.15.3)(postgres@3.4.7)(prisma@7.4.2(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.5.2)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(typescript@5.9.3)))(mysql2@3.15.3) defu: 6.1.4 destr: 2.0.5 dot-prop: 10.1.0 @@ -14119,7 +14702,7 @@ snapshots: h3: 1.15.5 hookable: 5.5.3 httpxy: 0.1.7 - ioredis: 5.9.3 + ioredis: 5.10.0 jiti: 2.6.1 klona: 2.0.6 knitwork: 1.3.0 @@ -14127,7 +14710,7 @@ snapshots: magic-string: 0.30.21 magicast: 0.5.2 mime: 4.1.0 - mlly: 1.8.0 + mlly: 1.8.1 node-fetch-native: 1.6.7 node-mock-http: 1.0.4 ofetch: 1.5.1 @@ -14138,7 +14721,7 @@ snapshots: pretty-bytes: 7.1.0 radix3: 1.1.2 rollup: 4.59.0 - rollup-plugin-visualizer: 6.0.5(rolldown@1.0.0-beta.51)(rollup@4.59.0) + rollup-plugin-visualizer: 6.0.11(rolldown@1.0.0-beta.51)(rollup@4.59.0) scule: 1.3.0 semver: 7.7.4 serve-placeholder: 2.0.2 @@ -14150,9 +14733,9 @@ snapshots: uncrypto: 0.1.3 unctx: 2.5.0 unenv: 2.0.0-rc.24 - unimport: 5.6.0 + unimport: 5.7.0 unplugin-utils: 0.3.1 - unstorage: 1.17.4(db0@0.3.4(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260305.0)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.6.2)(gel@2.2.0)(kysely@0.28.11)))(ioredis@5.9.3) + unstorage: 1.17.4(db0@0.3.4(@electric-sql/pglite@0.3.15)(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260307.1)(@electric-sql/pglite@0.3.15)(@opentelemetry/api@1.9.0)(@prisma/client@7.4.2(prisma@7.4.2(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.5.2)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(typescript@5.9.3))(@types/better-sqlite3@7.6.13)(better-sqlite3@12.6.2)(gel@2.2.0)(kysely@0.28.11)(mysql2@3.15.3)(postgres@3.4.7)(prisma@7.4.2(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.5.2)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(typescript@5.9.3)))(mysql2@3.15.3))(ioredis@5.10.0) untyped: 2.0.0 unwasm: 0.5.3 youch: 4.1.0 @@ -14176,6 +14759,7 @@ snapshots: - '@vercel/kv' - aws4fetch - bare-abort-controller + - bare-buffer - better-sqlite3 - drizzle-orm - encoding @@ -14212,7 +14796,7 @@ snapshots: node-mock-http@1.0.4: {} - node-releases@2.0.27: {} + node-releases@2.0.36: {} non-layered-tidy-tree-layout@2.0.2: optional: true @@ -14434,7 +15018,7 @@ snapshots: pkg-types@1.3.1: dependencies: confbox: 0.1.8 - mlly: 1.8.0 + mlly: 1.8.1 pathe: 2.0.3 pkg-types@2.3.0: @@ -14456,15 +15040,17 @@ snapshots: path-data-parser: 0.1.0 points-on-curve: 0.2.0 - postcss@8.5.6: + postcss@8.5.8: dependencies: nanoid: 3.3.11 picocolors: 1.1.1 source-map-js: 1.2.1 + postgres@3.4.7: {} + postmark@4.0.7: dependencies: - axios: 1.13.5 + axios: 1.13.6 transitivePeerDependencies: - debug @@ -14479,7 +15065,7 @@ snapshots: mkdirp-classic: 0.5.3 napi-build-utils: 2.0.0 node-abi: 3.87.0 - pump: 3.0.3 + pump: 3.0.4 rc: 1.2.8 simple-get: 4.0.1 tar-fs: 2.1.4 @@ -14501,12 +15087,35 @@ snapshots: ansi-styles: 5.2.0 react-is: 17.0.2 + prisma@7.4.2(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.5.2)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(typescript@5.9.3): + dependencies: + '@prisma/config': 7.4.2(magicast@0.5.2) + '@prisma/dev': 0.20.0(typescript@5.9.3) + '@prisma/engines': 7.4.2 + '@prisma/studio-core': 0.13.1(@types/react@19.2.14)(react-dom@19.2.3(react@19.2.4))(react@19.2.4) + mysql2: 3.15.3 + postgres: 3.4.7 + optionalDependencies: + better-sqlite3: 12.6.2 + typescript: 5.9.3 + transitivePeerDependencies: + - '@types/react' + - magicast + - react + - react-dom + process-nextick-args@2.0.1: {} process@0.11.10: {} progress@2.0.3: {} + proper-lockfile@4.1.2: + dependencies: + graceful-fs: 4.2.11 + retry: 0.12.0 + signal-exit: 3.0.7 + property-information@7.1.0: {} protobufjs@6.11.4: @@ -14522,7 +15131,7 @@ snapshots: '@protobufjs/pool': 1.1.0 '@protobufjs/utf8': 1.1.0 '@types/long': 4.0.2 - '@types/node': 25.3.1 + '@types/node': 25.3.5 long: 4.0.0 proxy-addr@2.0.7: @@ -14551,19 +15160,19 @@ snapshots: dependencies: proxy-compare: 3.0.1 - pump@3.0.3: + pump@3.0.4: dependencies: end-of-stream: 1.4.5 once: 1.4.0 punycode@2.3.1: {} - puppeteer-core@24.37.5: + puppeteer-core@24.38.0: dependencies: '@puppeteer/browsers': 2.13.0 - chromium-bidi: 14.0.0(devtools-protocol@0.0.1566079) + chromium-bidi: 14.0.0(devtools-protocol@0.0.1581282) debug: 4.4.3 - devtools-protocol: 0.0.1566079 + devtools-protocol: 0.0.1581282 typed-query-selector: 2.12.1 webdriver-bidi-protocol: 0.4.1 ws: 8.19.0 @@ -14575,13 +15184,13 @@ snapshots: - supports-color - utf-8-validate - puppeteer@24.37.5(typescript@5.9.3): + puppeteer@24.38.0(typescript@5.9.3): dependencies: '@puppeteer/browsers': 2.13.0 - chromium-bidi: 14.0.0(devtools-protocol@0.0.1566079) - cosmiconfig: 9.0.0(typescript@5.9.3) - devtools-protocol: 0.0.1566079 - puppeteer-core: 24.37.5 + chromium-bidi: 14.0.0(devtools-protocol@0.0.1581282) + cosmiconfig: 9.0.1(typescript@5.9.3) + devtools-protocol: 0.0.1581282 + puppeteer-core: 24.38.0 typed-query-selector: 2.12.1 transitivePeerDependencies: - bare-abort-controller @@ -14592,6 +15201,8 @@ snapshots: - typescript - utf-8-validate + pure-rand@6.1.0: {} + qs@6.15.0: dependencies: side-channel: 1.1.0 @@ -14720,12 +15331,16 @@ snapshots: '@eslint-community/regexpp': 4.12.2 refa: 0.12.1 + regexp-to-ast@0.5.0: {} + regexp-tree@0.1.27: {} regjsparser@0.13.0: dependencies: jsesc: 3.1.0 + remeda@2.33.4: {} + require-directory@2.1.1: {} require-from-string@2.0.2: {} @@ -14749,6 +15364,8 @@ snapshots: onetime: 5.1.2 signal-exit: 3.0.7 + retry@0.12.0: {} + reusify@1.1.0: {} rfdc@1.4.1: {} @@ -14780,7 +15397,7 @@ snapshots: '@rolldown/binding-win32-x64-msvc': 1.0.0-beta.51 optional: true - rollup-plugin-visualizer@6.0.5(rolldown@1.0.0-beta.51)(rollup@4.59.0): + rollup-plugin-visualizer@6.0.11(rolldown@1.0.0-beta.51)(rollup@4.59.0): dependencies: open: 8.4.2 picomatch: 4.0.3 @@ -14912,6 +15529,8 @@ snapshots: transitivePeerDependencies: - supports-color + seq-queue@0.0.5: {} + serialize-javascript@6.0.2: dependencies: randombytes: 2.1.0 @@ -14944,7 +15563,7 @@ snapshots: transitivePeerDependencies: - supports-color - set-cookie-parser@2.7.2: {} + set-cookie-parser@3.0.1: {} setprototypeof@1.2.0: {} @@ -14956,7 +15575,7 @@ snapshots: prebuild-install: 7.1.3 semver: 7.7.4 simple-get: 4.0.1 - tar-fs: 3.1.1 + tar-fs: 3.1.2 tunnel-agent: 0.6.0 transitivePeerDependencies: - bare-abort-controller @@ -14991,7 +15610,7 @@ snapshots: sharp@0.34.5: dependencies: - '@img/colour': 1.0.0 + '@img/colour': 1.1.0 detect-libc: 2.1.2 semver: 7.7.4 optionalDependencies: @@ -15108,11 +15727,6 @@ snapshots: slash@5.1.0: {} - slice-ansi@7.1.2: - dependencies: - ansi-styles: 6.2.3 - is-fullwidth-code-point: 5.1.0 - slice-ansi@8.0.0: dependencies: ansi-styles: 6.2.3 @@ -15191,8 +15805,14 @@ snapshots: space-separated-tokens@2.0.2: {} + sparse-bitfield@3.0.3: + dependencies: + memory-pager: 1.5.0 + speakingurl@14.0.1: {} + sqlstring@2.3.3: {} + stack-trace@1.0.0-pre2: {} stack-utils@2.0.6: @@ -15280,9 +15900,9 @@ snapshots: dependencies: js-tokens: 9.0.1 - stripe@20.4.0(@types/node@25.3.1): + stripe@20.4.1(@types/node@25.3.5): optionalDependencies: - '@types/node': 25.3.1 + '@types/node': 25.3.5 style-to-object@1.0.14: dependencies: @@ -15342,13 +15962,13 @@ snapshots: dependencies: chownr: 1.1.4 mkdirp-classic: 0.5.3 - pump: 3.0.3 + pump: 3.0.4 tar-stream: 2.2.0 - tar-fs@3.1.1: + tar-fs@3.1.2: dependencies: - pump: 3.0.3 - tar-stream: 3.1.7 + pump: 3.0.4 + tar-stream: 3.1.8 optionalDependencies: bare-fs: 4.5.5 bare-path: 3.0.0 @@ -15365,16 +15985,18 @@ snapshots: inherits: 2.0.4 readable-stream: 3.6.2 - tar-stream@3.1.7: + tar-stream@3.1.8: dependencies: b4a: 1.8.0 + bare-fs: 4.5.5 fast-fifo: 1.3.2 streamx: 2.23.0 transitivePeerDependencies: - bare-abort-controller + - bare-buffer - react-native-b4a - tar@7.5.9: + tar@7.5.10: dependencies: '@isaacs/fs-minipass': 4.0.1 chownr: 3.0.0 @@ -15388,7 +16010,6 @@ snapshots: transitivePeerDependencies: - bare-abort-controller - react-native-b4a - optional: true temp@0.9.4: dependencies: @@ -15438,11 +16059,11 @@ snapshots: tinyspy@4.0.4: {} - tldts-core@7.0.23: {} + tldts-core@7.0.25: {} - tldts@7.0.23: + tldts@7.0.25: dependencies: - tldts-core: 7.0.23 + tldts-core: 7.0.25 to-regex-range@5.0.1: dependencies: @@ -15456,10 +16077,14 @@ snapshots: tough-cookie@6.0.0: dependencies: - tldts: 7.0.23 + tldts: 7.0.25 tr46@0.0.3: {} + tr46@5.1.1: + dependencies: + punycode: 2.3.1 + tr46@6.0.0: dependencies: punycode: 2.3.1 @@ -15487,32 +16112,32 @@ snapshots: dependencies: safe-buffer: 5.2.1 - turbo-darwin-64@2.8.11: + turbo-darwin-64@2.8.14: optional: true - turbo-darwin-arm64@2.8.11: + turbo-darwin-arm64@2.8.14: optional: true - turbo-linux-64@2.8.11: + turbo-linux-64@2.8.14: optional: true - turbo-linux-arm64@2.8.11: + turbo-linux-arm64@2.8.14: optional: true - turbo-windows-64@2.8.11: + turbo-windows-64@2.8.14: optional: true - turbo-windows-arm64@2.8.11: + turbo-windows-arm64@2.8.14: optional: true - turbo@2.8.11: + turbo@2.8.14: optionalDependencies: - turbo-darwin-64: 2.8.11 - turbo-darwin-arm64: 2.8.11 - turbo-linux-64: 2.8.11 - turbo-linux-arm64: 2.8.11 - turbo-windows-64: 2.8.11 - turbo-windows-arm64: 2.8.11 + turbo-darwin-64: 2.8.14 + turbo-darwin-arm64: 2.8.14 + turbo-linux-64: 2.8.14 + turbo-linux-arm64: 2.8.14 + turbo-windows-64: 2.8.14 + turbo-windows-arm64: 2.8.14 type-check@0.4.0: dependencies: @@ -15569,14 +16194,14 @@ snapshots: unicorn-magic@0.4.0: {} - unimport@5.6.0: + unimport@5.7.0: dependencies: acorn: 8.16.0 escape-string-regexp: 5.0.0 estree-walker: 3.0.3 local-pkg: 1.1.2 magic-string: 0.30.21 - mlly: 1.8.0 + mlly: 1.8.1 pathe: 2.0.3 picomatch: 4.0.3 pkg-types: 2.3.0 @@ -15623,7 +16248,7 @@ snapshots: picomatch: 4.0.3 webpack-virtual-modules: 0.6.2 - unstorage@1.17.4(db0@0.3.4(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260305.0)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.6.2)(gel@2.2.0)(kysely@0.28.11)))(ioredis@5.9.3): + unstorage@1.17.4(db0@0.3.4(@electric-sql/pglite@0.3.15)(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260307.1)(@electric-sql/pglite@0.3.15)(@opentelemetry/api@1.9.0)(@prisma/client@7.4.2(prisma@7.4.2(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.5.2)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(typescript@5.9.3))(@types/better-sqlite3@7.6.13)(better-sqlite3@12.6.2)(gel@2.2.0)(kysely@0.28.11)(mysql2@3.15.3)(postgres@3.4.7)(prisma@7.4.2(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.5.2)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(typescript@5.9.3)))(mysql2@3.15.3))(ioredis@5.10.0): dependencies: anymatch: 3.1.3 chokidar: 5.0.0 @@ -15634,8 +16259,8 @@ snapshots: ofetch: 1.5.1 ufo: 1.6.3 optionalDependencies: - db0: 0.3.4(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260305.0)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.6.2)(gel@2.2.0)(kysely@0.28.11)) - ioredis: 5.9.3 + db0: 0.3.4(@electric-sql/pglite@0.3.15)(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260307.1)(@electric-sql/pglite@0.3.15)(@opentelemetry/api@1.9.0)(@prisma/client@7.4.2(prisma@7.4.2(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.5.2)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(typescript@5.9.3))(@types/better-sqlite3@7.6.13)(better-sqlite3@12.6.2)(gel@2.2.0)(kysely@0.28.11)(mysql2@3.15.3)(postgres@3.4.7)(prisma@7.4.2(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.5.2)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(typescript@5.9.3)))(mysql2@3.15.3) + ioredis: 5.10.0 untun@0.1.3: dependencies: @@ -15656,7 +16281,7 @@ snapshots: exsolve: 1.0.8 knitwork: 1.3.0 magic-string: 0.30.21 - mlly: 1.8.0 + mlly: 1.8.1 pathe: 2.0.3 pkg-types: 2.3.0 @@ -15676,6 +16301,10 @@ snapshots: uuid@11.1.0: {} + valibot@1.2.0(typescript@5.9.3): + optionalDependencies: + typescript: 5.9.3 + vary@1.1.2: {} vfile-message@4.0.3: @@ -15688,7 +16317,7 @@ snapshots: '@types/unist': 3.0.3 vfile-message: 4.0.3 - vinxi@0.5.11(@types/node@25.3.1)(better-sqlite3@12.6.2)(db0@0.3.4(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260305.0)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.6.2)(gel@2.2.0)(kysely@0.28.11)))(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260305.0)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.6.2)(gel@2.2.0)(kysely@0.28.11))(ioredis@5.9.3)(jiti@2.6.1)(lightningcss@1.31.1)(rolldown@1.0.0-beta.51)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2): + vinxi@0.5.11(8957e57c08f05dd579cfce7ceebb1280): dependencies: '@babel/core': 7.29.0 '@babel/plugin-syntax-jsx': 7.28.6(@babel/core@7.29.0) @@ -15709,7 +16338,7 @@ snapshots: hookable: 5.5.3 http-proxy: 1.18.1 micromatch: 4.0.8 - nitropack: 2.13.1(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260305.0)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.6.2)(gel@2.2.0)(kysely@0.28.11))(rolldown@1.0.0-beta.51) + nitropack: 2.13.1(@electric-sql/pglite@0.3.15)(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260307.1)(@electric-sql/pglite@0.3.15)(@opentelemetry/api@1.9.0)(@prisma/client@7.4.2(prisma@7.4.2(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.5.2)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(typescript@5.9.3))(@types/better-sqlite3@7.6.13)(better-sqlite3@12.6.2)(gel@2.2.0)(kysely@0.28.11)(mysql2@3.15.3)(postgres@3.4.7)(prisma@7.4.2(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.5.2)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(typescript@5.9.3)))(mysql2@3.15.3)(rolldown@1.0.0-beta.51) node-fetch-native: 1.6.7 path-to-regexp: 6.3.0 pathe: 1.1.2 @@ -15721,8 +16350,8 @@ snapshots: ufo: 1.6.3 unctx: 2.5.0 unenv: 1.10.0 - unstorage: 1.17.4(db0@0.3.4(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260305.0)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.6.2)(gel@2.2.0)(kysely@0.28.11)))(ioredis@5.9.3) - vite: 6.4.1(@types/node@25.3.1)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + unstorage: 1.17.4(db0@0.3.4(@electric-sql/pglite@0.3.15)(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260307.1)(@electric-sql/pglite@0.3.15)(@opentelemetry/api@1.9.0)(@prisma/client@7.4.2(prisma@7.4.2(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.5.2)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(typescript@5.9.3))(@types/better-sqlite3@7.6.13)(better-sqlite3@12.6.2)(gel@2.2.0)(kysely@0.28.11)(mysql2@3.15.3)(postgres@3.4.7)(prisma@7.4.2(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.5.2)(react-dom@19.2.3(react@19.2.4))(react@19.2.4)(typescript@5.9.3)))(mysql2@3.15.3))(ioredis@5.10.0) + vite: 6.4.1(@types/node@25.3.5)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) zod: 4.3.6 transitivePeerDependencies: - '@azure/app-configuration' @@ -15744,6 +16373,7 @@ snapshots: - '@vercel/kv' - aws4fetch - bare-abort-controller + - bare-buffer - better-sqlite3 - db0 - debug @@ -15769,13 +16399,13 @@ snapshots: - xml2js - yaml - vite-node@3.2.0(@types/node@25.3.1)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2): + vite-node@3.2.0(@types/node@25.3.5)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2): dependencies: cac: 6.7.14 debug: 4.4.3 es-module-lexer: 1.7.0 pathe: 2.0.3 - vite: 7.3.1(@types/node@25.3.1)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + vite: 7.3.1(@types/node@25.3.5)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) transitivePeerDependencies: - '@types/node' - jiti @@ -15790,7 +16420,7 @@ snapshots: - tsx - yaml - vite-plugin-solid@2.11.10(@testing-library/jest-dom@6.9.1)(solid-js@1.9.11)(vite@7.3.1(@types/node@25.3.1)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)): + vite-plugin-solid@2.11.10(@testing-library/jest-dom@6.9.1)(solid-js@1.9.11)(vite@7.3.1(@types/node@25.3.5)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)): dependencies: '@babel/core': 7.29.0 '@types/babel__core': 7.20.5 @@ -15798,14 +16428,14 @@ snapshots: merge-anything: 5.1.7 solid-js: 1.9.11 solid-refresh: 0.6.3(solid-js@1.9.11) - vite: 7.3.1(@types/node@25.3.1)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) - vitefu: 1.1.2(vite@7.3.1(@types/node@25.3.1)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)) + vite: 7.3.1(@types/node@25.3.5)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + vitefu: 1.1.2(vite@7.3.1(@types/node@25.3.5)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)) optionalDependencies: '@testing-library/jest-dom': 6.9.1 transitivePeerDependencies: - supports-color - vite-prerender-plugin@0.5.12(vite@7.3.1(@types/node@25.3.1)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)): + vite-prerender-plugin@0.5.12(vite@7.3.1(@types/node@25.3.5)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)): dependencies: kolorist: 1.8.0 magic-string: 0.30.21 @@ -15813,29 +16443,29 @@ snapshots: simple-code-frame: 1.3.0 source-map: 0.7.6 stack-trace: 1.0.0-pre2 - vite: 7.3.1(@types/node@25.3.1)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + vite: 7.3.1(@types/node@25.3.5)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) - vite@5.4.21(@types/node@25.3.1)(lightningcss@1.31.1)(terser@5.46.0): + vite@5.4.21(@types/node@25.3.5)(lightningcss@1.31.1)(terser@5.46.0): dependencies: esbuild: 0.21.5 - postcss: 8.5.6 + postcss: 8.5.8 rollup: 4.59.0 optionalDependencies: - '@types/node': 25.3.1 + '@types/node': 25.3.5 fsevents: 2.3.3 lightningcss: 1.31.1 terser: 5.46.0 - vite@6.4.1(@types/node@25.3.1)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2): + vite@6.4.1(@types/node@25.3.5)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2): dependencies: esbuild: 0.25.12 fdir: 6.5.0(picomatch@4.0.3) picomatch: 4.0.3 - postcss: 8.5.6 + postcss: 8.5.8 rollup: 4.59.0 tinyglobby: 0.2.15 optionalDependencies: - '@types/node': 25.3.1 + '@types/node': 25.3.5 fsevents: 2.3.3 jiti: 2.6.1 lightningcss: 1.31.1 @@ -15843,16 +16473,16 @@ snapshots: tsx: 4.21.0 yaml: 2.8.2 - vite@7.3.1(@types/node@25.3.1)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2): + vite@7.3.1(@types/node@25.3.5)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2): dependencies: esbuild: 0.27.3 fdir: 6.5.0(picomatch@4.0.3) picomatch: 4.0.3 - postcss: 8.5.6 + postcss: 8.5.8 rollup: 4.59.0 tinyglobby: 0.2.15 optionalDependencies: - '@types/node': 25.3.1 + '@types/node': 25.3.5 fsevents: 2.3.3 jiti: 2.6.1 lightningcss: 1.31.1 @@ -15860,39 +16490,39 @@ snapshots: tsx: 4.21.0 yaml: 2.8.2 - vitefu@1.1.2(vite@7.3.1(@types/node@25.3.1)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)): + vitefu@1.1.2(vite@7.3.1(@types/node@25.3.5)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)): optionalDependencies: - vite: 7.3.1(@types/node@25.3.1)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + vite: 7.3.1(@types/node@25.3.5)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) - vitepress-plugin-mermaid@2.0.17(mermaid@11.12.3)(vitepress@1.6.4(@algolia/client-search@5.49.1)(@types/node@25.3.1)(axios@1.13.5)(change-case@5.4.4)(lightningcss@1.31.1)(postcss@8.5.6)(search-insights@2.17.3)(terser@5.46.0)(typescript@5.9.3)): + vitepress-plugin-mermaid@2.0.17(mermaid@11.12.3)(vitepress@1.6.4(@algolia/client-search@5.49.1)(@types/node@25.3.5)(axios@1.13.6)(change-case@5.4.4)(lightningcss@1.31.1)(postcss@8.5.8)(search-insights@2.17.3)(terser@5.46.0)(typescript@5.9.3)): dependencies: mermaid: 11.12.3 - vitepress: 1.6.4(@algolia/client-search@5.49.1)(@types/node@25.3.1)(axios@1.13.5)(change-case@5.4.4)(lightningcss@1.31.1)(postcss@8.5.6)(search-insights@2.17.3)(terser@5.46.0)(typescript@5.9.3) + vitepress: 1.6.4(@algolia/client-search@5.49.1)(@types/node@25.3.5)(axios@1.13.6)(change-case@5.4.4)(lightningcss@1.31.1)(postcss@8.5.8)(search-insights@2.17.3)(terser@5.46.0)(typescript@5.9.3) optionalDependencies: '@mermaid-js/mermaid-mindmap': 9.3.0 - vitepress@1.6.4(@algolia/client-search@5.49.1)(@types/node@25.3.1)(axios@1.13.5)(change-case@5.4.4)(lightningcss@1.31.1)(postcss@8.5.6)(search-insights@2.17.3)(terser@5.46.0)(typescript@5.9.3): + vitepress@1.6.4(@algolia/client-search@5.49.1)(@types/node@25.3.5)(axios@1.13.6)(change-case@5.4.4)(lightningcss@1.31.1)(postcss@8.5.8)(search-insights@2.17.3)(terser@5.46.0)(typescript@5.9.3): dependencies: '@docsearch/css': 3.8.2 '@docsearch/js': 3.8.2(@algolia/client-search@5.49.1)(search-insights@2.17.3) - '@iconify-json/simple-icons': 1.2.71 + '@iconify-json/simple-icons': 1.2.72 '@shikijs/core': 2.5.0 '@shikijs/transformers': 2.5.0 '@shikijs/types': 2.5.0 '@types/markdown-it': 14.1.2 - '@vitejs/plugin-vue': 5.2.4(vite@5.4.21(@types/node@25.3.1)(lightningcss@1.31.1)(terser@5.46.0))(vue@3.5.29(typescript@5.9.3)) + '@vitejs/plugin-vue': 5.2.4(vite@5.4.21(@types/node@25.3.5)(lightningcss@1.31.1)(terser@5.46.0))(vue@3.5.29(typescript@5.9.3)) '@vue/devtools-api': 7.7.9 '@vue/shared': 3.5.29 '@vueuse/core': 12.8.2(typescript@5.9.3) - '@vueuse/integrations': 12.8.2(axios@1.13.5)(change-case@5.4.4)(focus-trap@7.8.0)(typescript@5.9.3) + '@vueuse/integrations': 12.8.2(axios@1.13.6)(change-case@5.4.4)(focus-trap@7.8.0)(typescript@5.9.3) focus-trap: 7.8.0 mark.js: 8.11.1 minisearch: 7.2.0 shiki: 2.5.0 - vite: 5.4.21(@types/node@25.3.1)(lightningcss@1.31.1)(terser@5.46.0) + vite: 5.4.21(@types/node@25.3.5)(lightningcss@1.31.1)(terser@5.46.0) vue: 3.5.29(typescript@5.9.3) optionalDependencies: - postcss: 8.5.6 + postcss: 8.5.8 transitivePeerDependencies: - '@algolia/client-search' - '@types/node' @@ -15920,11 +16550,11 @@ snapshots: - typescript - universal-cookie - vitest@3.2.0(@types/node@25.3.1)(jiti@2.6.1)(jsdom@27.4.0(@noble/hashes@2.0.1))(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2): + vitest@3.2.0(@types/node@25.3.5)(jiti@2.6.1)(jsdom@27.4.0(@noble/hashes@2.0.1))(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2): dependencies: '@types/chai': 5.2.3 '@vitest/expect': 3.2.0 - '@vitest/mocker': 3.2.0(vite@7.3.1(@types/node@25.3.1)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)) + '@vitest/mocker': 3.2.0(vite@7.3.1(@types/node@25.3.5)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)) '@vitest/pretty-format': 3.2.4 '@vitest/runner': 3.2.0 '@vitest/snapshot': 3.2.0 @@ -15942,11 +16572,11 @@ snapshots: tinyglobby: 0.2.15 tinypool: 1.1.1 tinyrainbow: 2.0.0 - vite: 7.3.1(@types/node@25.3.1)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) - vite-node: 3.2.0(@types/node@25.3.1)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + vite: 7.3.1(@types/node@25.3.5)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + vite-node: 3.2.0(@types/node@25.3.5)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) why-is-node-running: 2.3.0 optionalDependencies: - '@types/node': 25.3.1 + '@types/node': 25.3.5 jsdom: 27.4.0(@noble/hashes@2.0.1) transitivePeerDependencies: - jiti @@ -15962,10 +16592,10 @@ snapshots: - tsx - yaml - vitest@4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.3.1)(@vitest/ui@4.0.18)(jiti@2.6.1)(jsdom@27.4.0(@noble/hashes@2.0.1))(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2): + vitest@4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.3.5)(@vitest/ui@4.0.18)(jiti@2.6.1)(jsdom@27.4.0(@noble/hashes@2.0.1))(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2): dependencies: '@vitest/expect': 4.0.18 - '@vitest/mocker': 4.0.18(vite@7.3.1(@types/node@25.3.1)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)) + '@vitest/mocker': 4.0.18(vite@7.3.1(@types/node@25.3.5)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)) '@vitest/pretty-format': 4.0.18 '@vitest/runner': 4.0.18 '@vitest/snapshot': 4.0.18 @@ -15982,11 +16612,11 @@ snapshots: tinyexec: 1.0.2 tinyglobby: 0.2.15 tinyrainbow: 3.0.3 - vite: 7.3.1(@types/node@25.3.1)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + vite: 7.3.1(@types/node@25.3.5)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) why-is-node-running: 2.3.0 optionalDependencies: '@opentelemetry/api': 1.9.0 - '@types/node': 25.3.1 + '@types/node': 25.3.5 '@vitest/ui': 4.0.18(vitest@4.0.18) jsdom: 27.4.0(@noble/hashes@2.0.1) transitivePeerDependencies: @@ -16037,6 +16667,8 @@ snapshots: webidl-conversions@3.0.1: {} + webidl-conversions@7.0.0: {} + webidl-conversions@8.0.1: {} webpack-virtual-modules@0.6.2: {} @@ -16045,6 +16677,11 @@ snapshots: whatwg-mimetype@5.0.0: {} + whatwg-url@14.2.0: + dependencies: + tr46: 5.1.1 + webidl-conversions: 7.0.0 + whatwg-url@15.1.0: dependencies: tr46: 6.0.0 @@ -16086,15 +16723,15 @@ snapshots: '@cloudflare/workerd-linux-arm64': 1.20251217.0 '@cloudflare/workerd-windows-64': 1.20251217.0 - workerd@1.20260305.0: + workerd@1.20260301.1: optionalDependencies: - '@cloudflare/workerd-darwin-64': 1.20260305.0 - '@cloudflare/workerd-darwin-arm64': 1.20260305.0 - '@cloudflare/workerd-linux-64': 1.20260305.0 - '@cloudflare/workerd-linux-arm64': 1.20260305.0 - '@cloudflare/workerd-windows-64': 1.20260305.0 + '@cloudflare/workerd-darwin-64': 1.20260301.1 + '@cloudflare/workerd-darwin-arm64': 1.20260301.1 + '@cloudflare/workerd-linux-64': 1.20260301.1 + '@cloudflare/workerd-linux-arm64': 1.20260301.1 + '@cloudflare/workerd-windows-64': 1.20260301.1 - wrangler@4.56.0(@cloudflare/workers-types@4.20260305.0): + wrangler@4.56.0(@cloudflare/workers-types@4.20260307.1): dependencies: '@cloudflare/kv-asset-handler': 0.4.1 '@cloudflare/unenv-preset': 2.7.13(unenv@2.0.0-rc.24)(workerd@1.20251217.0) @@ -16105,24 +16742,24 @@ snapshots: unenv: 2.0.0-rc.24 workerd: 1.20251217.0 optionalDependencies: - '@cloudflare/workers-types': 4.20260305.0 + '@cloudflare/workers-types': 4.20260307.1 fsevents: 2.3.3 transitivePeerDependencies: - bufferutil - utf-8-validate - wrangler@4.69.0(@cloudflare/workers-types@4.20260305.0): + wrangler@4.71.0(@cloudflare/workers-types@4.20260307.1): dependencies: '@cloudflare/kv-asset-handler': 0.4.2 - '@cloudflare/unenv-preset': 2.14.0(unenv@2.0.0-rc.24)(workerd@1.20260305.0) + '@cloudflare/unenv-preset': 2.15.0(unenv@2.0.0-rc.24)(workerd@1.20260301.1) blake3-wasm: 2.1.5 esbuild: 0.27.3 - miniflare: 4.20260305.0 + miniflare: 4.20260301.1 path-to-regexp: 6.3.0 unenv: 2.0.0-rc.24 - workerd: 1.20260305.0 + workerd: 1.20260301.1 optionalDependencies: - '@cloudflare/workers-types': 4.20260305.0 + '@cloudflare/workers-types': 4.20260307.1 fsevents: 2.3.3 transitivePeerDependencies: - bufferutil @@ -16242,6 +16879,11 @@ snapshots: cookie: 1.1.1 youch-core: 0.3.3 + zeptomatch@2.1.0: + dependencies: + grammex: 3.1.12 + graphmatch: 1.1.1 + zimmerframe@1.1.4: {} zip-stream@6.0.1: diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index e47dedd96..cb70e3acd 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -3,9 +3,11 @@ packages: onlyBuiltDependencies: - '@parcel/watcher' + - '@prisma/engines' - agent-browser - better-sqlite3 - esbuild + - prisma - protobufjs - puppeteer - sharp From 5b616b21fdc5707f3dae105df050f2b5cafab2f5 Mon Sep 17 00:00:00 2001 From: Jacob Maynard Date: Fri, 6 Mar 2026 21:22:30 -0500 Subject: [PATCH 7/9] fix lint errors and circular updates --- eslint.config.js | 2 + .../rob2-reconcile/pages/PreliminaryPage.jsx | 26 +++++- packages/workers/src/index.ts | 81 ++++++++++--------- 3 files changed, 70 insertions(+), 39 deletions(-) diff --git a/eslint.config.js b/eslint.config.js index e0248ed31..df4158c8e 100644 --- a/eslint.config.js +++ b/eslint.config.js @@ -328,6 +328,8 @@ export default [ globals: { // Cloudflare Workers globals MessageEvent: 'readonly', + Message: 'readonly', + MessageBatch: 'readonly', Cloudflare: 'readonly', D1Database: 'readonly', DurableObject: 'readonly', diff --git a/packages/web/src/components/project/reconcile-tab/rob2-reconcile/pages/PreliminaryPage.jsx b/packages/web/src/components/project/reconcile-tab/rob2-reconcile/pages/PreliminaryPage.jsx index f4eaf3908..909dc8200 100644 --- a/packages/web/src/components/project/reconcile-tab/rob2-reconcile/pages/PreliminaryPage.jsx +++ b/packages/web/src/components/project/reconcile-tab/rob2-reconcile/pages/PreliminaryPage.jsx @@ -1,4 +1,4 @@ -import { Show, For, createMemo } from 'solid-js'; +import { Show, For, createMemo, createEffect, onCleanup } from 'solid-js'; import { FiCheck, FiX, FiAlertTriangle } from 'solid-icons/fi'; import { PRELIMINARY_SECTION, @@ -241,6 +241,30 @@ export default function PreliminaryPage(props) { const isTextField = () => PRELIMINARY_TEXT_FIELDS.includes(props.fieldKey); + // Sync Y.Text changes back to finalAnswers so hasNavItemAnswer detects the field as answered. + // Uses a re-entrancy guard to prevent a cycle: observe -> onFinalChange -> + // updateChecklistAnswer -> setYTextField modifies same Y.Text -> observe fires again. + let isSyncingText = false; + createEffect(() => { + if (!isTextField() || !props.getRob2Text) return; + const yText = props.getRob2Text('preliminary', props.fieldKey); + if (!yText) return; + + const observer = () => { + if (isSyncingText) return; + isSyncingText = true; + try { + const text = yText.toString(); + props.onFinalChange?.(text); + } finally { + isSyncingText = false; + } + }; + + yText.observe(observer); + onCleanup(() => yText.unobserve(observer)); + }); + const getFieldType = () => { const key = props.fieldKey; if (key === 'studyDesign') return 'select'; diff --git a/packages/workers/src/index.ts b/packages/workers/src/index.ts index e78e92315..1de0bb9e1 100644 --- a/packages/workers/src/index.ts +++ b/packages/workers/src/index.ts @@ -365,46 +365,51 @@ app.notFound(c => { // Global error handler - catches all uncaught errors in routes app.onError(errorHandler); -// Wrap with Sentry for error monitoring (only if DSN is configured) -export default Sentry.withSentry( - (env: Env) => ({ - dsn: env.SENTRY_DSN || '', - release: env.CF_VERSION_METADATA?.id, - environment: env.ENVIRONMENT, - // Only enable if DSN is set - enabled: !!env.SENTRY_DSN, - // Capture 100% of errors - tracesSampleRate: env.ENVIRONMENT === 'production' ? 0.1 : 1.0, - // Add request data to error reports - sendDefaultPii: true, - }), - { - fetch: app.fetch, - - async queue(batch, env: Env): Promise { - const emailService = createEmailService(env); - // eslint-disable-next-line no-undef -- Cloudflare Workers global type - const messages = batch.messages as Message[]; - - for (const msg of messages) { - try { - const result = await emailService.sendEmail( - msg.body as Parameters[0], - ); - - if (result.success) { - msg.ack(); - } else { - console.error(`[EmailQueue] Send returned error for ${msg.body.to}:`, result.error); - const delay = Math.min(30 * 2 ** msg.attempts, 1800); - msg.retry({ delaySeconds: delay }); - } - } catch (error) { - console.error(`[EmailQueue] Exception sending to ${msg.body.to}:`, error); +const workerHandler = { + fetch: app.fetch, + + async queue(batch: MessageBatch, env: Env): Promise { + const emailService = createEmailService(env); + const messages = batch.messages as Message[]; + + for (const msg of messages) { + try { + const result = await emailService.sendEmail( + msg.body as Parameters[0], + ); + + if (result.success) { + msg.ack(); + } else { + console.error(`[EmailQueue] Send returned error for ${msg.body.to}:`, result.error); const delay = Math.min(30 * 2 ** msg.attempts, 1800); msg.retry({ delaySeconds: delay }); } + } catch (error) { + console.error(`[EmailQueue] Exception sending to ${msg.body.to}:`, error); + const delay = Math.min(30 * 2 ** msg.attempts, 1800); + msg.retry({ delaySeconds: delay }); } - }, + } }, -); +}; + +// Wrap with Sentry for error monitoring in non-test environments. +// Sentry.withSentry proxies the fetch handler and its transport uses ctx.waitUntil, +// which is unavailable in the vitest-pool-workers test runtime. +// @ts-expect-error import.meta.env is set by vitest but not typed in workers +const isTest = typeof import.meta !== 'undefined' && import.meta.env?.MODE === 'test'; + +export default isTest + ? workerHandler + : Sentry.withSentry( + (env: Env) => ({ + dsn: env.SENTRY_DSN || '', + release: env.CF_VERSION_METADATA?.id, + environment: env.ENVIRONMENT, + enabled: !!env.SENTRY_DSN, + tracesSampleRate: env.ENVIRONMENT === 'production' ? 0.1 : 1.0, + sendDefaultPii: true, + }), + workerHandler, + ); From d453c3bcbc9dd46751268b6696c0bf41858bc0c5 Mon Sep 17 00:00:00 2001 From: GitHub Actions Date: Sat, 7 Mar 2026 02:23:18 +0000 Subject: [PATCH 8/9] Apply Prettier formatting --- packages/workers/src/index.ts | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/packages/workers/src/index.ts b/packages/workers/src/index.ts index 1de0bb9e1..993c6d6c8 100644 --- a/packages/workers/src/index.ts +++ b/packages/workers/src/index.ts @@ -400,16 +400,16 @@ const workerHandler = { // @ts-expect-error import.meta.env is set by vitest but not typed in workers const isTest = typeof import.meta !== 'undefined' && import.meta.env?.MODE === 'test'; -export default isTest - ? workerHandler - : Sentry.withSentry( - (env: Env) => ({ - dsn: env.SENTRY_DSN || '', - release: env.CF_VERSION_METADATA?.id, - environment: env.ENVIRONMENT, - enabled: !!env.SENTRY_DSN, - tracesSampleRate: env.ENVIRONMENT === 'production' ? 0.1 : 1.0, - sendDefaultPii: true, - }), - workerHandler, - ); +export default isTest ? workerHandler : ( + Sentry.withSentry( + (env: Env) => ({ + dsn: env.SENTRY_DSN || '', + release: env.CF_VERSION_METADATA?.id, + environment: env.ENVIRONMENT, + enabled: !!env.SENTRY_DSN, + tracesSampleRate: env.ENVIRONMENT === 'production' ? 0.1 : 1.0, + sendDefaultPii: true, + }), + workerHandler, + ) +); From 8fa05a8b66db26913dd866d09618841794a3e796 Mon Sep 17 00:00:00 2001 From: Jacob Maynard Date: Fri, 6 Mar 2026 21:34:27 -0500 Subject: [PATCH 9/9] bug fixes --- .mcp.json | 9 ------- .mcp.md | 26 +++++++++++++++++++ .../project/overview-tab/OverviewTab.jsx | 2 +- packages/workers/src/auth/config.ts | 15 +++-------- packages/workers/src/index.ts | 6 +++-- .../workers/src/lib/send-invitation-email.ts | 3 ++- .../billing/__tests__/invoiceHandlers.test.ts | 1 + 7 files changed, 37 insertions(+), 25 deletions(-) create mode 100644 .mcp.md diff --git a/.mcp.json b/.mcp.json index 91feed02c..447aa463c 100644 --- a/.mcp.json +++ b/.mcp.json @@ -12,15 +12,6 @@ "env": { "MCP_MEMORY_REPO_ROOT": "." } - }, - "ark-ui": { - "type": "stdio", - "command": "npx", - "args": ["-y", "@ark-ui/mcp"] - }, - "sentry": { - "type": "http", - "url": "https://mcp.sentry.dev/mcp" } } } diff --git a/.mcp.md b/.mcp.md new file mode 100644 index 000000000..10922f2d5 --- /dev/null +++ b/.mcp.md @@ -0,0 +1,26 @@ + diff --git a/packages/web/src/components/project/overview-tab/OverviewTab.jsx b/packages/web/src/components/project/overview-tab/OverviewTab.jsx index 0ecd341fb..bae11d3a1 100644 --- a/packages/web/src/components/project/overview-tab/OverviewTab.jsx +++ b/packages/web/src/components/project/overview-tab/OverviewTab.jsx @@ -303,7 +303,7 @@ export default function OverviewTab() { ( diff --git a/packages/workers/src/auth/config.ts b/packages/workers/src/auth/config.ts index 4640c00c8..d73ca2720 100644 --- a/packages/workers/src/auth/config.ts +++ b/packages/workers/src/auth/config.ts @@ -174,14 +174,11 @@ export function createAuth(env: Env, ctx?: ExecutionContext) { plugins.push( magicLink({ sendMagicLink: async ({ email, url }: { email: string; url: string }) => { - console.log('[Auth] Queuing magic link email to:', email, 'URL:', url); const subject = 'Sign in to CoRATES'; const html = getMagicLinkEmailHtml({ subject, magicLinkUrl: url }); const text = getMagicLinkEmailText({ magicLinkUrl: url }); - await queueEmail(env, { to: email, subject, html, text }).catch(err => - console.error('[Auth] Magic link email queue error:', err), - ); + await queueEmail(env, { to: email, subject, html, text }); }, expiresIn: 60 * MAGIC_LINK_EXPIRY_MINUTES, }), @@ -443,15 +440,12 @@ export function createAuth(env: Env, ctx?: ExecutionContext) { minPasswordLength: 8, // Password reset - sendResetPassword is required for requestPasswordReset to work sendResetPassword: async ({ user, url }: { user: BetterAuthUser; url: string }) => { - console.log('[Auth] Queuing reset email to:', user.email, 'URL:', url); const name = user.givenName || user.name || user.username || 'there'; const subject = 'Reset Your Password - CoRATES'; const html = getPasswordResetEmailHtml({ name, subject, resetUrl: url }); const text = getPasswordResetEmailText({ name, resetUrl: url }); - await queueEmail(env, { to: user.email, subject, html, text }).catch(err => - console.error('[Auth] Password reset email queue error:', err), - ); + await queueEmail(env, { to: user.email, subject, html, text }); }, }, @@ -467,15 +461,12 @@ export function createAuth(env: Env, ctx?: ExecutionContext) { sendOnSignIn: true, autoSignInAfterVerification: true, sendVerificationEmail: async ({ user, url }: { user: BetterAuthUser; url: string }) => { - console.log('[Auth] Queuing verification email to:', user.email, 'URL:', url); const name = user.givenName || user.name || user.username || 'there'; const subject = 'Verify Your Email Address - CoRATES'; const html = getVerificationEmailHtml({ name, subject, verificationUrl: url }); const text = getVerificationEmailText({ name, verificationUrl: url }); - await queueEmail(env, { to: user.email, subject, html, text }).catch(err => - console.error('[Auth] Verification email queue error:', err), - ); + await queueEmail(env, { to: user.email, subject, html, text }); }, }, diff --git a/packages/workers/src/index.ts b/packages/workers/src/index.ts index 1de0bb9e1..7c91ddd2f 100644 --- a/packages/workers/src/index.ts +++ b/packages/workers/src/index.ts @@ -381,12 +381,14 @@ const workerHandler = { if (result.success) { msg.ack(); } else { - console.error(`[EmailQueue] Send returned error for ${msg.body.to}:`, result.error); + const masked = msg.body.to?.replace(/^(..).*@/, '$1***@'); + console.error(`[EmailQueue] Send returned error for ${masked}:`, result.error); const delay = Math.min(30 * 2 ** msg.attempts, 1800); msg.retry({ delaySeconds: delay }); } } catch (error) { - console.error(`[EmailQueue] Exception sending to ${msg.body.to}:`, error); + const masked = msg.body.to?.replace(/^(..).*@/, '$1***@'); + console.error(`[EmailQueue] Exception sending to ${masked}:`, error); const delay = Math.min(30 * 2 ** msg.attempts, 1800); msg.retry({ delaySeconds: delay }); } diff --git a/packages/workers/src/lib/send-invitation-email.ts b/packages/workers/src/lib/send-invitation-email.ts index d98b4cf93..87f2717b0 100644 --- a/packages/workers/src/lib/send-invitation-email.ts +++ b/packages/workers/src/lib/send-invitation-email.ts @@ -104,7 +104,8 @@ export async function sendInvitationEmail( } if (env.ENVIRONMENT !== 'production') { - console.log('[Email] Project invitation magic link URL:', capturedMagicLinkUrl); + const redacted = capturedMagicLinkUrl.replace(/token=[^&]+/, 'token=REDACTED'); + console.log('[Email] Project invitation magic link URL:', redacted); } const { getProjectInvitationEmailHtml, getProjectInvitationEmailText } = diff --git a/packages/workers/src/routes/billing/__tests__/invoiceHandlers.test.ts b/packages/workers/src/routes/billing/__tests__/invoiceHandlers.test.ts index c85927d7a..74de8cf64 100644 --- a/packages/workers/src/routes/billing/__tests__/invoiceHandlers.test.ts +++ b/packages/workers/src/routes/billing/__tests__/invoiceHandlers.test.ts @@ -281,6 +281,7 @@ describe('Invoice Handlers', () => { const result = await handleInvoicePaymentFailed(invoice, ctx); expect(result.handled).toBe(true); + expect(mockEmailQueue.send).not.toHaveBeenCalled(); expect(ctx.logger.stripe).toHaveBeenCalledWith('dunning_email_skipped_no_user', { subscriptionId: 'sub-local-1', stripeCustomerId: 'cus_orphan',