From 093afb9b2bb8fd11effba926b90dacdedb8129f4 Mon Sep 17 00:00:00 2001 From: Zakaria Date: Fri, 25 Sep 2026 18:18:33 -0400 Subject: [PATCH] feat: EC2 UI polished + storage persisting --- .prototools | 1 + OS_img/Debian_linux.png | Bin 0 -> 38413 bytes OS_img/Ubuntu_Linux.png | Bin 0 -> 23743 bytes OS_img/amazon_Linux.png | Bin 0 -> 56716 bytes OS_img/red-hat-logo.png | Bin 0 -> 78749 bytes README.md | 1 + Screenshot 2026-09-25 at 2.06.15 PM.png | Bin 0 -> 176582 bytes docker/Dockerfile | 1 + packages/api/package.json | 3 +- .../src/adapter-aws/AwsComputeAdapter.test.ts | 4 + .../api/src/adapter-aws/AwsComputeAdapter.ts | 11 + .../adapter-aws/AwsEventBridgeAdapter.test.ts | 65 +++- .../src/adapter-aws/AwsEventBridgeAdapter.ts | 153 +++++++- .../api/src/adapter-aws/AwsSnsAdapter.test.ts | 138 +++++++ packages/api/src/adapter-aws/AwsSnsAdapter.ts | 200 ++++++++++ packages/api/src/aws.ts | 3 + .../api/src/cloud-spi/notificationsSchema.ts | 33 ++ packages/api/src/cloud-spi/serviceCatalog.ts | 7 + packages/api/src/cloud-spi/types.ts | 51 +++ packages/api/src/cloudProxy.ts | 4 +- packages/api/src/routes/clouds.test.ts | 84 +++++ packages/api/src/routes/clouds.ts | 97 +++++ packages/api/src/routes/ec2.test.ts | 43 ++- packages/api/src/routes/ec2.ts | 13 +- packages/api/src/service/CloudProxyService.ts | 47 +++ packages/api/src/services/ec2.test.ts | 17 +- packages/api/src/services/ec2.ts | 6 +- packages/frontend/src/api/api.ts | 67 +++- packages/frontend/src/api/aws/ec2.api.ts | 8 +- packages/frontend/src/api/cloudProxyClient.ts | 138 +++++++ .../frontend/src/components/ComputePanel.tsx | 344 +++++++++++++----- .../src/components/DynamicResourceView.tsx | 24 +- .../components/EventBridgeRulePanel.test.tsx | 81 +++++ .../src/components/EventBridgeRulePanel.tsx | 170 +++++++++ .../src/components/SnsTopicPanel.test.tsx | 119 ++++++ .../frontend/src/components/SnsTopicPanel.tsx | 170 +++++++++ packages/frontend/src/index.css | 216 +++++++++++ packages/frontend/src/types/cloud.ts | 1 + pnpm-lock.yaml | 263 +++++++++++++ test-failures.txt | 105 ++++++ 40 files changed, 2586 insertions(+), 102 deletions(-) create mode 100644 .prototools create mode 100644 OS_img/Debian_linux.png create mode 100644 OS_img/Ubuntu_Linux.png create mode 100644 OS_img/amazon_Linux.png create mode 100644 OS_img/red-hat-logo.png create mode 100644 Screenshot 2026-09-25 at 2.06.15 PM.png create mode 100644 packages/api/src/adapter-aws/AwsSnsAdapter.test.ts create mode 100644 packages/api/src/adapter-aws/AwsSnsAdapter.ts create mode 100644 packages/api/src/cloud-spi/notificationsSchema.ts create mode 100644 packages/frontend/src/components/EventBridgeRulePanel.test.tsx create mode 100644 packages/frontend/src/components/EventBridgeRulePanel.tsx create mode 100644 packages/frontend/src/components/SnsTopicPanel.test.tsx create mode 100644 packages/frontend/src/components/SnsTopicPanel.tsx create mode 100644 test-failures.txt diff --git a/.prototools b/.prototools new file mode 100644 index 0000000..5bcd790 --- /dev/null +++ b/.prototools @@ -0,0 +1 @@ +bun = "1.4.2" diff --git a/OS_img/Debian_linux.png b/OS_img/Debian_linux.png new file mode 100644 index 0000000000000000000000000000000000000000..f6a245508d89c8b546579fa1d3ed1742f9f0c618 GIT binary patch literal 38413 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 literal 0 HcmV?d00001 diff --git a/OS_img/Ubuntu_Linux.png b/OS_img/Ubuntu_Linux.png new file mode 100644 index 0000000000000000000000000000000000000000..83e6f62249dfc867792ae42a299fba107597661b GIT binary patch literal 23743 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 literal 0 HcmV?d00001 diff --git a/OS_img/amazon_Linux.png b/OS_img/amazon_Linux.png new file mode 100644 index 0000000000000000000000000000000000000000..e51deefde6e6915276326e2193b2262c9916b77c GIT binary patch literal 56716 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%0Al zV{37%K~#v!(y4lkm}RJ#yLHoctc(y3uSzLDZ9Z=N_J2^J2-nG4+9W<{InBDf|I7vt zWK=RmRSwvU!IeIcYt}IcOp7v20soWF)Gk0lzAsU(&f>Mdxe>8G$?iP)ox21|;s!0_ z>3-2?3dQ{|U$4}3rI&IwhCI<*ftgFgOqN>J;i+}ftMa94KsAc1?!>nx=A=Y~EIZ0T z&WA=D15(~I7u+Z2ixRhu1zghT=8w%kE7N3n)%%M>N+J3JTNDb2Ss+g9VN9rzOsY>K@zoxGFEKf0kUAKSFU)VKFNNSWV46 zM;V>K=E$Sj;z82goqjkH#A5M6-o(34i0(#@{uI<^Dh$nTWNK2pOW?=tIh|=G`Pc71 zGf-%u3*jf${QK)4MIrob-kvbGsjtOiTw%aRIZlWu*YN8-JE7Xh0D z*1s$4ev%XT>Kv+x43=VvqS*{f9aq)2R^8%SllA0@`Vbma-T%BcLv=Wg?oZMmke5th z(OMQv8ia8*je=9=6q;X+#$)w1$1(i3wt3h?XGY+;!(S(EJ{NNub^j8RNoEhugpAiQ zy3?`$uzRR70tW}0fJPdPpSNf-GTsCYIjMz zNSWh7Co}_uF}m?ZL63A$Wv}%ST@Pt5P6Q1)#s@T2`{&MScwZ6@rGvVDIQP2*9juP`3< zOzl&JQ~=?Vzkb!e{>hge0l@t7oDfqACHMxzuC6skDl_w$%|II__>VPu@r zhg_*uTc`u4NsyTT*{}E81T;^9Z?C{#W-f3CZB_!QcWEaYTJaMk^Wj;+%(vBo^0TLz8y? z?$IaMS7!XB7%2$!qJXh#F)->Ve(0ZZibJ$k6F>MIDG$2}*GT(hHEy}pqtUO9A>j)% zgAL+%4e?9r$+Z4int*97O4yQhFtUcz!#(y;J|6Z0|IoS+T6Dq#HSgGCUO zxCaaIX97{es5+32(jF1IULCsNzziLQ(-lgw6LWb47lP54tJ=!^M$ei zPKNpIgk&0Z4H_*p65DsSS^gJbmV#A`t5lb5K~Slf;?jmLbL+G!ZiBS#;FDi^o$Y2M zc>1;azSK{{rRHQEkHYD(^*x8uLIWWUD<#$M2>ZrKgM?r9#jO8JTAUH7s21kG zMLx7VT-coOW~_vQskaI4Dl*_#hujm4`&$SP#_kep=4ZBvCu-|I`r&=yK}j)zcmf(lf zJ+TUHgo*mMXXRN;K+t!k?z`ex55tv9+DBw_Jm|4uCARL#6>#+QuI8hb7GQDe@eGII zzlcBoLmCAmM9jkV!pmAmAy9MpP0o4o$%NgmMaIypN4toa;8N&^E>eo5)An)WgzxD4 z@ug!uQlq?OyyqqUHIZcJF53^HCbPRFfULQFav~Z)32ZlIB~V~;nM+M`1VuMHf_x0- zXl#94CCkW7ba`9JpWHX@XP_0tqq4O&bWaO`$;E8y4ve`jbSQ^5+!Z*Nu4TlL`qWjB zD6UhN_G!R9AoKifp7d#4&MUJc%CF%hJi)AH)#MZe$JkG{NXhNM=nx(%jh*vl1>v%k zL1w%=8bo=k%MW5A`l$@*Eqn~XUA|b+!17{&MKM&4{_=lrZz)HO_=?UW`ZO205{$)K zn5P!DNFE$|z=rz(-5QX3;K7>nQ}KI5^+Gow|rX0!Kg&SqDlh<3Na%gUAc-$SKBN;PyV?*D&2&m6;9(J z$!_qX3a!Kn-iQM#cd}<;xY+RY$n7#@P3lxK;=wa@cWG>cAjx=B{+D!KPoE^Zr^FG|0%r?rVmj5go zuXd9TAA_4-sCIQERYFjlzbGjy{3KwY2AU1~ybk-sDPZI)W9(@W1N(Ki-+ZR<67Xr~ z-tk3Et?y2SS3MUI|G(%KMwn&}J%g^0DS)m7xOTAS)DW?l7H4N06G7;)IjMW0+!)2f zD2@9kX!@~}Ra|RpR(w_OGZ%m368V;Fh-}s?G+Xb(mtifmhRfYYOVaV`-U(O2dE&#X!z9TW`(tbqvp8 z=zH*|%;j-OVYEX=7gw+b&zKDxUQr3{UcT(V^jraz&EDK^p5Q9emw6h%ZrIlg6KzZ` zlI>30g~zu;FKOU#bqzy_Wx|3IbYy_PPxd<>G58k#-`$@V!yaV+avi*s@)K36x&HJ( zfVX3*_J}**Ll>>EtxRp5Q2}wc9wh;mmk*b&G#uwG(HSXM($IBzGh8~DGG)g?mCZq` zHj$D!KV_N0-Z_SBgmes}?AxmUcp_n%oG3t?;v;kc(z6#6VBDR~#JZXZZ zwCg=hm05~W747#i=L5s2k@svFySLmuv-Sl`B3|oQc6r6j2N{UJW-%KcHLph(uWK;0 zmQZ2gG^R^;cCf5Il;UBq`k{xKrU&y9!avKyp$Z&T+c&qgIMs}tb@|^HJ)#xpny^ID zXEBdnUI>b0gHt0)6mK#+qdt7kPSM7>t)>T%)plx>N4di$37BZeY^R=)Qs=p7@=sn|3r^JjY%NeY8I zhd;{}FQw?arB*dTwE(6)(dUmWS~Ik$x=U=PM6%#c^(EZ%8;PZl#UH{#XlK%uXu8rY zvMQe3w};yFgm=6~#*Gm(A#J`~L4UDVe*iEjc?7@Bv&GL}+e* za>idnus}*@ixcZTWnO7*EW%wub_`s|)+CONgDJ6k=?+ligz-Kr#F%Bnu#CY2-%m>5 zBC&i%pcWFEuK7`ruPqz0hWnKqMF7F>QtzF=yvD{p>5qLizKtPD<0lhdr`9xTwEf>% zrrmd{`XPHpQL!&9o}Nx5(c=y&CYOXiy*N;xXBvq4l>CuK6Vc*3W`L&XA_$6A?`4@? zOuEM=q>6&G_4_5?1cYlAOp6WrersIqspLI$GB|1c06nITdvnqDZtOK0d8S*z(t20& zk23QA{~gY;|0D{R-;Q^H)ODOwb|Q^_6=H(IDr;|kNg;ie3UJ>fjW<$C6O|t6IA5Y& zmAy4wY;8Gf;s|;U^qp15teSosdZI_YDXP`|`Lw#3*VOsT9)wW#l{=bJeI)*;4`_!gX8N!2XT?k(5I@vW9z&KOCf8LxO zKe>w!Ux*IcX|2d{xK*ceP5joPTk54pYfhkmdN8;$x$Og%#?eBs4o&CA1S335!>j!3 zP$lO^%qL&5V}|o>Gxw%DoywQ>{kLx!mn~~|ct)9CP>oBT_0;j{zxCLg7nNIny7 zYOVR&-$}&bjUJth{A9vji@_%XB~t?Meb7v@Vmk}m;JcBY^0s2gnrQAZI!u>&;Rh|H zofsdNyd7hEpSiBV1WnJznL$t5k`V!u4Z>{rrzb$kUw4(sW&S#;(1Y#-LU|2nFX39w zDk=DgZBnEopTVZ?{r2058ZlZ?R%4LY42**3Jor_EOw)hYm2u(rkS2@a-7fP=zW4oiy? zR`n{eaLp_^AMr*Ok4#NnOLGJtmRKK)ip0mqhUZPK;bCILCEaGQ8wjJtW3Shn0$<5Kq6U$sl4IO_G-7XA~-1OEN91f zv()rb38C5#iFv5WTZ^=a5ev-uP9h`CA2G?{<@4Zklw+M7SB)k?P;Z-b;>4wW+1*SB z-}cRnH4{^Pg*1X9FG6wIcZ|&!3oSs3b4%NY!$U;rukLtcFhjDX8b#K2GuCj96BHRN z-C#z`&HrNy8YC0=X&8&OE7e&ZAm*8b_586-aHC%q-~-6do6XJ>w_ z&IenvHz=JR>S&y(5zP zLxWX=2iqbw;){W%N4aVqq?+=J@ACF8Z4lzVUGqT^_@?06;?w`&&Qsu!ZFe9pWF+{l zPjJi%q$oVIN}Xj7zJ^|FD4<67)ur8*s(48-JeJd&-aotS=GzIl<9;RZO?E#y4Ud6XppaYGSPdbzKYY=9AyPovIYG-D^*{ zW0yG*(B<102>^)?SJ}{CbPc=M~dW_;S z2dGd1TA^oE)#xfo5GOyLIh`%o2@}78&@9U>G z{m(9}>L-8FwY27{xe*i}C0#cP)p1L2C5D@VX*T^22(L!z{-7w#%b4j<6K6T<5w3bR2D zfAQ~HXuWT<0&}G;enM&a&hepx2$Pt%+Ls)sjT7ajpVN>aT3Q z$I>)LvrcpanLar5D{nvM+4a$EHb*8B{g)QrO9fn6E%f$%V-J`RlBEl0OcZ&F`63JT zze_0p8v`1QSbWm??YK5#>%3{XB&~?wbGK6O8B1uvt=*zU;_vwNIKp2gFVG~p-Ce?X z8OQ8Vx8kuOCDt1{LWMrKB&Bz04_w{BtVbk?jc;c>XyCx=^I*6cnPhGB4+BY!Pq%`E z5)?nJv3~vhp`YhbHC6YLmF~*_w#tM54|~G2=UgGh_T9FaH-78|)_$%OLiNKN=ErGr z)M9M{8C=je?P56CA^f@^gy)nbhYC&nxqscH9iGo_wuLK6Pxn*dR0kM?|TAGYPu&k#Gs;r zAIAynIbUZtcymA|wSks2+BeOaImpI1pPG|SMOJDQ|FCmzoyI!6Te%=~vYv&o+Ik*7kEn-$oW&;7g_Q2czE_SEFZ`b--At5|waAq(~KOU-1^?@1B z9kwZ2av;tOxagTyZ@RP)h#$f2tvBbeAGO`8R~+FALW0Csqf6)ihhYDm_T780)C>3% zS^X$Os2M^*MDRDu6mA+-8GIJU8Ao~K1iw99JuDD*jli7E4+V#vNsU zNnli2Ber(Js=H@{q24FQ=-PL%?RUrtmh-A?p~>S(6YqEja6uI%yWT33WyEsg)A{cO z`59T9=!AHn5?n=p#)a={Gb_8R%6_A4g4s%N zwfzm1`^S-E7)LWyI7FW+W_`K;E3}3PDz9Is+xd#)g4uR@iFtco50fY^z4=l2O|Mq~ zM&c{0zQY3vmn~UqsxmKr1jdX1VeTEZt*Me%Gl)Z)?uhxbW_j~G+wy7H13EbKH&)Jf z1}=D-YGX8m;uQ(T=#+cD&^Bvdw#_DBsqeoEyzq!Yn($>=lJ;BT^}8wJ^li-W)Id;+ zxIpSwoa+cM@qD8YWZ^?F`q_uXx+=8t1jhyramW$1TgNXvQAMxh50cy=8oLeuzowP$n?Mz);*`rl# zHatVMy1&Z6@r03y25e0$LuHYDvq{w>k^*`ZppyiHIf$@1uHN=kj{GR6062X8`n~sjA{Ec5_lOW zh%n(>r0c>BPjR%S@`WDEjKFIFH@+E$kIa6GQ*jMAI+c zR6SD9oj+GL-K9*rx)weet3}kTe^0hay!s#gs~)3^+q&x2FSQ#^>HFBpMoCpeY^<$N z+=wX?p06uS&2M9R`PZx>HMT0Cda>IQ=2*4DFfo8e$!KG0H zw^Xct5ocOHP1`8x9B_Qx8OD%D4!z;*;m8Dq@LVI+%=M0?n;5Yj+4N?)DEOA5=@QM* z!mMPl4(cg;{yJ36Bm!h3_NM3fN0V_yK4$H7LFxz56uVa%~HLTReSKm&i?Xr>8&@aYDMOiUs+_}WMv-ocvIt)j`vH#^I zdRJVl`Nfi+S)`=GzBsGTM>lN@bdxzcnxS0Bn6_&E~w*nl9H5&ack6x{{a?r`YO7=4`zN<>|y4-`0O^v%9Wr)G0Lvj zrTD}@y~xn8IFN(NU(K18rdH;)wn@9oq;Fo=lqKcfF|Kj*%3&MQ!7>t z65BHxn60~0ESXLl8cR&uE#qb8&9L@TOgSgO!}B0w*7{nUQqxYT<%{@;d;gXk*Fx8J zJ2{CoLN#4jBH{YSWTuloiXCFo($(L+Zx$JFZM9o$X#MOR?aL)KsvKxMiLPSh|B@?! z`Lq1(8YKb$1*|tQ5*3z6W{+BmeL@Eo2QI9Vi|t@g%Eph$ z{T1loLy%9vDSzzIVA7$<<@pHiJI2;nxqEO9*r|DS_}4Y@-&oMlO`uUrXbb4OL{1Op zxmfmcdBAQN@~m7Be+#@DASE|kHMb<4Z;1xr*U1oqlR%T8{-}BTh^#=T>## zuMXuMlO~;T<6tR>k)>Dj0Z}#Wzc*s4kkJC`ObmlHE4ep@*r~`XuonQ`kaECeRlC3m zwot+(Gu>jTbR$xHUCi)CAIYVMBg6aNf32eHTBxQL#cHS=? z4#7#hEJAfByr0}B&AkitY@|`e^aN35YB8CovfjRqxx<|)iN2CI(gB*vcN!4dx%fPh zMgrSka0ZIsEB6i=~W@q-rj52GD z&2>IN4)P7RRkX{nZH$IDdi$PzXL2-763%|s5d=~f3s-qN9u)a@ljALAnRWZg37dzN zF=Uej7dbLsY4~%R`)bn$)Vs>_)p}sr3(PF?m7;OFmxpLsA!Z40vG|uKU{+I_FL*ph zqgQ_i?Yh<7N5#nIY7QLE&C$7Fe4R1)Ub(9vlM(QS+2@DT+s0c<<-`~r`QE7H#E-b1 z#(@|XgvA-gs%+*fOy9#mgd=@5^7<8Ug%2JYR_RR+-DXxyie#{nE+T?5B$9v@z!F1G z@Sg*L-f=b#((J7o2Wb~(N=^nHrrpuMd+!z zd~p?ewHA=0IhIq4$4=v-m+h8Jb+bu0KBh5fQCzw)CJn7uD^Mea*Rh)YY1b}O%@i8H zU9`7*+bIx7c7C_#S?74cSBTrh_A6Kh*^%19sYXq zFs-O9_8Jf45n7s6eJ+jYy}WL*i0M$xKcYQ0i|_;g$E|8I3+{eG#3(4RN)VF(4ZWlF z`^Gk6d5JV-((mj4L$Y}`ADG*`Y_1+>fs2ugGy*EKq(8>6Pm{Eh*QctU(3-4c0XWS* zclw>Ex;Y_#0DaIi((Fq|2N6G-Q;+K@ZU{_Zu?+`$k4Vx2i$s z@3wNqn0gM&p6G{cHzVL|DqcftXfR3dOlh2mz>_k%FyA5N?t@)-pO2kroW+;ezL{x1 z^Q?fHnUDSRX_bxqqo>i^K2KSbSAWmmrAIHZu4rv{YKVn7rbU$HQP%@=&RE@gPR4B&QMj`|xHa1@}kIxg-`EwOCC6 zYtlg==@4SvYrG|VO7#7AMdWIJz5SLQ6d!PpqaA!L2X-@$AvHFDdLKwN$li(r?_@kN z!4<#{R8lcwRHMbCoz0y_V5BB26_;{C*h+=xITT&aX@|t=Hm6x0GSPHU$ zC$-lRphccq6R# z%_R+mG1F4r`gH|l^oH6pRU;Ar=24E*u$Rd5~od=I@{T>*&m@y;T z)z-h+=EvYN>ULYKj9NoAKSioe3Q|g=W~JQ^kL$Y%)ENcCYe^NLb3$d%-in-TWLRk+ zGExl{i)kbXk)`fR3r-`pgtVNH%aiOXYn9H;=9F|(e=#q5)vNPg9hicU%K=zD3XoB1 z_6MB^v+S(rButYF&kY(u;;nPO4xJuaa(GYOZR{saV`C6@JHwRjI$$3b`lBL(N8Ppp zD4rQsCJak*k3U>bEWfLH2v^^HeRIdQeAd)RF~Ij(lfVG}v>jn{$!Pj z2JN313e(a+`O1cvsR*#}f4KIE18)yc}uf(PIJ6?1= zgEGvK3okyXc63Po7Y&cSv3aaC{tz2Aj|cbjO^wnJVKLfNF*D^u>$(n@v(zVZeyoRC z2>h~D>RS1c7bMm6B*&=~F#BA&sS;lM-U+4dAR!A5xep!yg69*x2(6i2`Z&h!daQe3 zNA6_|jvc>PaJ&7~GdOapwbP!+WCWy(4~QyuMFGr7HrH#dLa)1tOa{###n(;H@MO8W zbL-p4kZMlw8v6C`o)i;~5DWz3Pb(9MW7=9~&fHDsnH-?Q4e5iCfm?V?e&2tav1w3u8>+M}dDo zRtt_BU&dYDQEEBm`(q&mNpp;tGngXbG;kINFAJIjLmfEK_BQ^aJ{J`31O*@k2A!*G zM!>tm|ArW@8|9|~Oa_^=avsi^dfWSk>r)?Ja^{3kCz3gv z*9(cS6-WS2g95GkqguGMIWa*Ua%K@H=l`0$^~2|JQ%LJ2>O7jc;@yaI=opbCf~`d% zJk3bVzFr?EHMx4XYOQb^4+rEP0Zwj=#Lf-M$7r|>Z%z6ix=rXv-?@kMN#VY<@BX1O z^{0}N8HNCK7Ww`cc@=)V7aJcDs{Xk8O^L8zN^{0dg^!c!CR008iH>(>@Aoq!Fj*aC zqCt4Z_Et9DmMRrh_YZkC2f?kkHt?0EjsaHVI)xQ|3{T#9a;iI^3lZ(xn)Iw;3j-=2 zw@diQnaV`UhY4*#DpxmAdxyubzgKFN@5-pqSv>F}U}{bDvl8dKE!B0kt#I!@Byk z;7hQ4_O(XE=I7|H(r|kk_`tD5&&h8Oyyr~E8I&5eYcw4OiQ-dzRshg3gl2 zF*2=s@6tUM?yeC3M6p!O$}f!9h^0wycZZ^k?%lx>*_R%3oqb`F>nEJMw{}r3pvmh- zMhBM|jJ#`=6`5h4$1QQYh-x}X?8;sL4l2%gu&W%3E`e5Jh?PPpiq#e@RFL_C2?p~+ zM@2t95K=_F51Au{%hg}YgslwG>K*ApM&hP_x=0EBY$qh6H0?5M=Fv{uH zqFIR&l;8Ol*p^)}Z8$m|2B#3k(N@rkzP6l=@QAMyF)@!x>>qQQmK{h7M5O+SbEv)AP2p3W;iS3V0^?Irz38Pp6bXXR}<~9P2W4pxi#d0BMNq#p?g>=o#8|#Ym_b}b$rb4rMr1h;t`;k(LvZG@Bgu;(L7gc{j#@m^d9J>Rbw&%~q26BaC zWSUUJYGzDg^0%i-DK@gx$xKEr3A=<<-w-IcMJMvdR)pEsYEvmjQ3x-2l2U+q6n|Si z7$*XYjUAn&$VDg&BLZG&x}bdN$HAKgYZkPk=(|8>GP{vmm6BR^kU0uxliHjYSm*P@ z<&J_>`2^NLY0X>w`pz$%`)n59JEpy5`gQ^(V$pq_)z`~xbb z`CxW}RBLmM*wK+dyfGzhFz%a|_}AF*lAMo|f3-Q~NPhTj)h@_@s1uOTOikaWV!Ac{ zP^55$M)3-5ev~Md|EzLE7>XKQ&#r$Ro(V(i-MHiBUVe6G$|Kz~j9&U?&-;(kCvHIn zf;URYclb6#oEguG+*&4gVO?I~HAV!yWyp=pU=b2fXyB_TyxYOE(hM1&m7?8fri zTRh(ZW}lScR~5}=Qg)p=N(@JL-w}27N-5&6P9A0J=*mB<^JVDz`xc$r)4b_jo=f!4zUF#A zmF1oo`csK>Jv%URC@iAotXWD{kr(lu4I}Xd7{}grGq*(pM}hg5FIAZ3Q8E4cN+YZN z8qe`U4nvbyreW_7$Kw||C@}gCUTT?1Qzn~n;eQN~`-R1Tk_IM47@-0M<|w@hMbktN zznMYH~d&&3S0q(PAJC0m1!mmag!Sl2rCLh3z^~q2DNK+ItI! zBGU5d-t6PdW4tn0t4n4xRF-1z+E8nppaRPa(SbJ9vlm6*KedaE|F;xe3ASh41JQkl zr#HAIQd4jBUcBC4Sl~~Q=IjfBHUG3?&ka8p8Tt->y-^XY`wGl{>scE8oRSOyaD03R zO>#axB{qTuzr;wV@?y6Z8kvowUot%_L$9OV>KJ2khSfIGV>so=*WVOW-{Yao2#e5s z6oSJPLyB=lLI2i38?4F1BO^C&8jcnR)0^t)UItoeDU3f{G;LEl2=1Y*F=Enoj1ed< z#{D^t#|B^XJ;Q=qTW2;r|+!_5ur@SN$w-FEsbqLeFn; zC0PE9(+ls4K9ejWtgX>%@^>Rcd-uP;X+2@X@%<$y*k+=3qep|eTnN}PDi&xUr8Da{ zTam%zxpONZ5R=36kEx8j11Uj~VtxO&<7JVEzLPIm$qtfQwK_avfO5_+ruBy+=7?m* z@V@0p8aEv+6ZAO*!{Z~cBqMsj%)GpIFUT>k!Q~GkzIc4Rdh$-hg^Gt^hkr@=7O;S_ zBX}=(HC|Jqy?)?zx&XHl1c@Wq^eOaJ?(6OWZ6ak1zT4+`fPA41MBDhI;7S#4KTAmI z{g}He6%(oXy`+m<>r0vO$G&av+)IO8=J<&3G7FUuZEkLeRY~ZHjN}l|25=D|V+CoY zJo!JVafXh!IP|%=`-7)P#7MeRZfJckW)}c5efT{QGtRXvW2Eh%gutHz1KKvK<QVd&9mm2vf5C3l#(eo4?%$#y&AWlUmNv~?2#5(V#nSK0SGC6`mVbk3=ins5I zuy$_lS^0d_nludmUd#{a1jF~s5m(}`U0c`S|82<|i*Q5%0&uyqqeFk-s&+8;W@E)! zG{441)KQcpv3UQRLdY3nE7|S!pPBA?)(`%bqxDg=J!W#T_`eyZO2#>u1Hb-QwYe)| zZlURYvTtLq{+5XdV=J|ff_>so^z3G7&KjR9>znGDAjl9q<`)X0?a}%|By!vUck#{uaVvTkn7s&2wj@mlc0zDiZnJ+zrPDCVlYfhdHz5tJsUmGMM|N?=?#fEu z7&K2CLzc;NEvJr3!1L0G3do_U>^CfRx+IfE=WnFT*c!o8!+O z3`}^R-_}<2s-{=2;5$vM*kum#9WJN4(0yi*I2WR)gjniM-H!3!1D{$3i~SvuAPbM`4Fe`R-NDjl^4B-CeABZ)r&d1jbBrO?maNNyvY76TzZeMfSCH;zPv zu{t|4Wn^e*XzRQ~7bI;zQ7*s%)9aG3e1C^1@!#Dzi_l!`9vm2?S|$G5TKvbBZmeN3 z+^E=8*Gnizuf(5G^a)9+Grf<0U-_jMwU}mos~YBTsXl#$NfJq5XZM7^z<8O=;WOnD zk01H>ziSH1wQzu~XNGehUC@=?yVbUaITrmB&ERmp;n$OG!D%Z0*(bFCO^Rrhdgk8Y zKTv=N$573h(e{n;`{N$7)<%eTpIMDtPmwKs`o0}^Ah;;;Ly3v`{;83RI4`1ikDdT{ zj=(&JjCqesv5h4}z93Gtj3qqLAe1KW%xh|N7_C$IcaYRV!_`BrY2u^@ZJ%gL-jK2~ z!u``4y!qMwoGzay$Z<;5%Vprf#(Ge8q}v@(Q8D=&rx%KG3&&nF%@H`^Ec14EG-}2b z$6|8_hP&~w<^D3q?)c>Z>=e}s&A#gBKGZwubHK!;Sk8IF#0pxzcAM^;d|eL#x!F@5_N{;$6fE%>={ zUlo@8;P+XOZQVK~i1MUB96|XO4Yb2T+)(gjq6YugJ6?~q1-qzIzg{HktSi3B7EXk( z(z1uVe8_=pcBzy?DA=Yq$o|@2y#8mbUNd%ayxkAP=|#}^gN z+m?w~5c652dbcgHM5Y(k^vqaHI#tPsxmLF~yTv3kYgn?RSy}tBgAQFYY1hPGAdbDz z_868b)o*4$`RmCs$N*z^GVPqi4h}2NHm12wpwdDUmBeelmnloGl%CH>I)3rIb`UL- ztM*|+SXxk{tA8iSkDApAKzkN_r{00-e^%+e^oR%6@D(lb25jFGU3Z=d^FsEl**%ea z{FEW9y1d-BlG>4d0NT*HOBEC{W_)tbWinouwt=RfEYKp5jhRtpxbL}7i?M~Y!~@+r zONtUs4fc}e#K!;x@psZ6j>|Rcuy^9DbhliRdz1cCeT&~GYjGdb4wdIB#iv1KDY_nz zy7(&&dX*L(X(ia}WgAC(r9yt3k1=J^Qxa~C-> z=2N=CZaAW*C(of?E}h_hYnBVs6}WTC4jHvI$gH&K{S)|y1?Xp785KgWX!3Z z=a4qt6RqhEryxQulmDH7KQSCd=Q8fCnPZOA$CQ6FW3nk%%i|8t*i_ z7J8*x&JW6NmVPDu8HZp#DCGK@%g_Ps{aDl$8x9&i5dx9_^$NEnXD6@K0_?q1H_hR- z^JZ@WKUDMkW_5*twMr06dGHns0#UK_{dx-!U5>-nO2Y8g9p~cJe}^D(+sK?0^iyN;L$-B;K$r*ywXU}e!7jE`qH;8o zx-&=Zm(&uX<>2qhPS78=#xfabHU5Fb`t#&@n8v*6MRw3t99%<26lt)o{Uoq4mQ|au znk@|PuTMAZl6TEB9_3k61EL@aUU|swA^Zm`DPHATU7Y|iaom22d*0VrF6sWdg@uLl zhpU4wI<4rj1czldpUbNaH2iuWI7hhYk^a56E&~2?MCE6MS+lQjGTj4T4bNGn4Me&Z zOHI(V`}oPVC&m3cdP_qCt}7?ZdYL?cOpPFX+xvw^) zgV}WQP*X06a5%g6)@w!B8ER`vZF1=D&P57LuEbn%?Fe@Ed0fwWlbhkb;*H~67VlV0 zv3Z=c2T7R;2%xj zMd@5%po4hmQ>;R2wFD91a)l@NLAJ8^D};8qOTi~se9LixhUS?vW#8Eo^q?DjJT=@d z%|+FK|9nMoFasM#)DC8yH67qn+iA7`4TV%84IP_QFWapmqgXIrK6AaDDX-_^CQnz4 z;Z2?M3jxb~ZEa60?#Rf>zsifWeKs{yb6RxvQ!W=|FYop^m%MMh3%dpp6@~7p$2Rzm zua>Q7)*FtW7E*J;aN3MkAo4vFfM{Bc;YCo%QRzl?MEr{{^3v1CYd`TU+t#389YobL zh07-Dv0xG$bmC|~|6Ixspg3)$3JWoA9(Sg5b{8kDhocO-vIkeDzH|agypO7!ASeFI zMVbN$sZG#i;l-8B0ebpJW)wS`r&G9~BY+iVk{l7&VEnY|}LazRGc4 zy!=lj)~WQbop3UC-*S{d^(83-Qwh~2R%E>i+x7>eihrd^Ey`V{+a<zp+Prf_uifLA#vD`fq3C*AyBl4k=sR3mU!%pPJk7%2e9c(H@uwNnmCH{i_|? zp_-axHaDk~gk$V@>Gm_-(zoGLbGEp-wRx+bDw|IMFF>0+l8@zzMY|$!qp>?W%TnGbEA#znsU^|InZ;Qy|Cc~KBGkA6ICx)NZ}`s9FsX@Nmh!Ps z_^23>@94_nUkT!2f)M5E$)I=jFDyIYl7xing-hP_Dc+oU^<%v#$1EIsUDmuF+1x*} zUxpq&Tz3B6n^CSNpU9FW*ms=3jq`f6JG6aO^QzCDSt$W0ta&TGk~A*83jY+gQKvFV zaN&p>;0ELmJkX_tXUro|LRE7L^S|L88v6@h<}Y2587!ODsV^N>ehhz(6Nuhc7TkD5 zx;@HEouLL`M@2P_T=Ua6HykxX%7HV~gHPv0SzR(}&J53P7;F>j2iE@BHWj`Ixvm@+ z!-D$-@*>dXv1K58$PH58S2h_??cL}t9pr|wdBcob5HXEFJE+J9Jpf4L1+kpe{(;R~GbG3wu=Dr$tQUP0Z%V7by8@b8|DF6rCNH z92oS^x%$etl^N{akR~s}@=h+)D2@J=Dj&?DTDT^Sl+B7czL3OtU<_x*+o;L;(G{;D4+C!JKz>CHJt}HSv8^u#90dAp=%1*I$I$c zeu;vkjbji*iq5Wj;ppVvW3d+CMY&ZbIVM3uZ?k!cdek}xU*@obk~XpbW~nK= z2dO0qH@*;8It`mJG9>vp$b`rP#Sl4euZ#bUfXj+Bw|6;V2l;emg}kbz@LSn z&pwZ#kCvjchgqwNh>wXx$5*pwi%vXtgJx%LX&@RFJkoN9NCa5(1?EDO>s8-6L||Iq zh%*cq(RU_zL?7aVUp8`7u74DFoTVc1_UhLaFS-!(nmZ2v$k{7^lOy>b(t)_9rb&v9 z<>OnS&)wk0OoE1HV1ee3>CsYslG>jnwC|6m-wv;6DGFMxXZyWoSE@vx!}&1R2YjKH zCRo)7P(?PNrT5`p{_9kkX^zpN-J1MXEzUb^?JZOr2f-uMBNwxTDcA@+3wHhdelTp7 z+}GH}9b4eD9nbHRj~cB6J9VqQ&w9A8{8WnIq$%#f2~HO{0&_*Cr28ow17+v!=VwKl z_;*U`;5eCrn}{oF`s=M4H6MZeng;2ooUsd!yK~2R#8FI?)YJBQ{W?1D*TYM6tHB} z_lugerUaUP3n541wf<&&5FClFPxql&<=Oq$s)ju!<`}7Q&lk)_924nF zcM62|?^#Te?+q9ZM3W0*^vCG?SJ2cOG=kUY#NA){lyxTUBg$f*=6m9r5g!K}fco&F zqblBNT1XXVS%3b*7IhSnc4XuMZF)ju+|!~TRh(CLgU^rjB{9aoo9_FTh_>*rMShrQ zrpkubn6^tL2h4f-j9dakfc9)aQ+*)xppNn9Ne4+oCdg@u=|NazNUnQRSO_X5Vx|aq z{?8x$7X9pJj`f>1-iMdwKlV+LuRq7G-btx8hbep|mc_&XXnDViS1Dxpi;kz<@I-3# zjNPYCIPXVZ_7Xb++c>RGD(#>0lL(PO#SAdh_H3s*EOfC$(D4$hn_OTgK%cfl2Y=jD z+^F~c<=6tUI?%A?bq0Fd#D=E}iQ6Xf$mAsv%8cK6eg}`FKD3ZKS61nKHoj9FVE<3E zt~fY~l;#Numg`s%W^}y%$CchvTQ#hwzgoDdr{}bYGAh3i@ZEr(Rg{vE1pxwQ1Nnzs zIH}^aCj810=;pC4%NZikd0Fz*_7rziB)_R!2AMt0pOFF$(ZrRl4AyYYB9=eFCW6q~ z6baXM+62TshfS9nCBTRtT;|W}0=(>Zc*8=JZCQ0JUe#EYJM6GXr#zqm_}*x?ad=>( zJSe2Mma^++=Q6@ZLk0bzMl0O}D~xntv303pT+(=H*A94ZKH7#GQ>4+YjsRLn;2Gs- z98ukAhjHGvi>M*W&lcZpEqEOhV_s-*H;Pbx+mVGnW(ngZ;{Srjn^O}*B*cAbXf$w5 z%d579A=+yF*>du1^La3e#-Z^W=4rgMf3T>naHI+*T|{Z2mp9+!V*4`h?P+Ef|4 zEQtT%0fVoG2T;F*YTXKTB@R;KeUHb!KmZ1Zo>q)N_*++pwf!{LBQDJlKs468m+xaT zHQEPV-}h@oD`Tql|0Ru`dNe1g{d1Y-LBLnH^ z5H4b-XteJgEi&kxTOx5^zRbC}cS{}fN?CUFg>y7wSiA2N6y#~RkM0G^=qY52XVc%I zMd9DvJ}1y?Tw7LsXe~vppaYK^jMm1*$GpS<>^-gcP-4r8s95t2d+Q~T%nT+b>UHaY z#yQ)tdM5WV#Nf##y9@mn|FXpsI1LReUh6W0C(;4asAb9O%UFIZFO$C`SWQ^e>#zsl zqJh$zXoPihL-?LVO;C!--(_K594{D@`@)<0-&oh&9j%zlu3QC;FL4NOoY5n^_yfeY z#vZjVL7aF$1aar{lWF=~8RvWrxIGflx|^4q)89JpK=_``OrxqRBf9{)v-_}?iIay2 zDR$yfK83k5OzA9EqE85_Vb^J2M+YQML^`;$&hi^Mz(GG)^J+8U78^(4(sCBEa)tt>W7qLp8lVAW^eifX| zL(1M9%LZR@$ucETyx>LaX;~uK-BJvU%DDK*iMt^v@mR_EO8V`Ow9?IfTCnJn{)_Gc zeG#hc=(HnKw}{3Bmh;BOuWtvz7svgalb!)ax^|3zGZQ*5an9NzI!2SQ@?8lyTH*2X zI0vqHs3${rspC_PK)le-;0JjP5ml!|$OS@v^Q3Qyy`!< z>rGfag$W3}rAFYgZL(>Ogz<(~SZ6P}lI;pTVo-wM#RFO=g8yPmH#vpe@jv!)AtO+3 zWW)CBr=vKPIp%uRn>KU4E19x8W`yv*0v zo0-KwVzs@PG%{j9@RPkS3&ndtuCqyX4=wGhZV393IsEM;uy;B9L`Q|VaJ0&qEAYe{ zMSrb%{u;bOZKSX&18*)R1k;N=frM?^uNL@gkt4G+_-a0fy>187F;cull;-3MvS9%t zI`z$WPwWDH$dBu`!#E*f9*WmSk4pGLY$Y|G>4cAikb2+hO&f|B&g{OWjja6W9xd)v zG>y2u@bf{i)PRZ3qzhyX3}zXqCL%Wt_!%jDK2xd>qOI3ku>?5XdLeP~p9u?4&$io9a{Pw)ftBejvM^bo8B`Eo-{(so<30NiR8tfLJ5>!{<0hCOuJASEDh zFongj1Cyzs2_`f?>|xwt$*{!UQ`F{Ki_@z)nb~S8%0?!`;T{&gONssdKs7CGs0y+{ z%h6L&@B=u02);MV*ID>}kQPQTHm(kMIoPu+$>HHk?XWW!>dy6G0=1Y;D&Hy0PU3pS zf^2I?P9I+3I58DM0Myt!Bw(Q7Xm-T45EFDFN>@EmV$bJwO+ z|AI5C^0!f1y45!MIp8_0-fWBrwE_j4YFbe)Ak;OXjH(8Zla*dHw9x|7X^nc{AD=&h?wv-@h=?}=JewrHwvCk=bE6(mNiM^_VZ9vKf9VXY37lmw?Q zYQR`23;&jzfIDrDLVv9Ul$6ybGmQcAT5e(=4O_jJUK@bL1 zZhrxa$9x}|g-wBaJc91zgZ8bN5~2Z)`x{YC1$9RydM=YaVh#i75mgBo zpWkp}t18W2F@c^pN$0h{v;mS3T=#O1i=rkSpPuM;rBbQi9;noNSI+_aK#^(omtB6F zY0zn9*sFt~l|QKqvEC#-eyCkgDt!57Z+Rl&QgsH)jmxElPj9Y13O&O+?wcL1o@lf2 zZIFgBqJC@+vn5zR5jaP1biAni_C_a9-Ie@$yOe ziH6Q_8@(k(+K*0-tB|3%m0FT5717VzYi+j#G8bW%U!t=-3Cpj~QcXD_Oc;*ln zkeJl`ovfH=M=dvs(ll6v0$Zx=H&)Itpm$Fk~k%`*hfaTMR}OtoG{D}!qq!Ey6ANFsI_EF4_U(pQd>=E%Mu7Bn1zCVM}@5nH4^+4+V-)9 zCKC45gZ*S#Mk5JPpAYPnO0WFKir=?RPkjn14Ddpu!XDPs-tB<_59+<*?|h|-WRL^ zW)K#gPAxmCx}Lr1Fm~3(c-9ewYx2DMDFDsNKe?c6FOBaqb@RL(C~n}Ejh_I%wEbqP1@uP;z_N^9H zxX}^sfl?79+^sM$P^1z&coXo^VS#$^N!BdapEepK{~)Qdk;tG4^Sq($gwi2a+e|Vo zr7RMetudP7Z+CeT`;mJ~xSbmVm!7V-?V`Rb2|aO_%N?$F4clIJhk#Bv+&ayy#@+#a z%}4UWaS%*Vek%E*3%BVm%!b`>(up44KYlK4HJZ+&Q*2Ub1fprkFP>hL$d-LOcQ_HD z?#MOzX=Qa}wbe_E@-la}T029u;!T2T-xp6SH(vncNR>F_O1AELDz2dG6t9SYo#x)p0j>3VQf~4p_J&8PXYwkdFk`|@kx-4eW>Gn>ytP=&vgscIFik$qd z&!-X*5ld8&`ivh_V&u_5DspkzImXsGZcAfaDrL14)_+tZbMxS>skABXgI@PV zsX?d+nLf;K>lu?%vx}E(d3ABM?z_C_t+kYGNwP9+*MfxfTR`1)UJ%I__JhKNXttl| zgv4q-2v3%d|$0~&i(H~ z&Gl58svZ*3^}I==@AVS8bEgaLMO&+YmQsJMvk8fo<1U-$44WVG=w5TGTcPEVBV}1K z^L*An{YRayqim|14cA5_Ufc_vf zDTLe{B}6DE8wTqHl{)GMWBHLYlQu!!M9*)*VeaDsnEzX~m1}YbH;3peO2f(JZ+^l$ zvfvTs`b84TJpvLW|IQ@K>2lsk`08@d4w1OUaf;vxaKB2WNWJc&f?F$U(IBxfTig3U z2)|B}U)V3f!BJJ>Kh3)6|7o4U=Iobhxm@0Peg7qPcC&+?V3H`O842kuwHYJRQaYO8 z>mp9#@!ow4`-(O3Pi;icgnm=ibuK}}PC)W?VxRoUmUD*iMQxSi;IBbwg|$0%$Enx5 z|K|U4*FZ6?!;N6?fi!-+&Tea)U|TU`l0a;(!r|H90zu^4ogcVH{ql37<0f}JcqUmS zsz6A$_3QJt$fWX|s70eDF6C8oAjwhLuJGfr=0Kits3@Bf&R~lfb5CvRG9PgOYMSIQ>C-1nbkYzo^dYEuZocb%0F(9Ol9ZfO9Joy}1fmRJ4;jX9x1ekK*!I5&S#k-kHcKVHQPn)vPicy0F@rJ^aWVtDqz zMoxMUIc4;`ZK2rot8otVTu$~O_Z6*yPaO{+WHpqVvK*8HkG z`9gQ_>I^YwD%L>2A%O->u^4vMQB=~Rtp+H;aO5YiAU~g*k~Y^^%p%a7My35|lza;! zyD&-dj9SE;_Wu@NI4fF~l|uyDQocF&uKwodTA+46^5@SVJh1>|q#b#4bB)2iABXU= zFMiJol53>kap)Lg#`araN}CiM?++e2tCuC{plq6^HX9n1cxZ$hP|%@mJUi&Wcjvqm zZqmvomIUKycKuQv49UdH=|*Tm=HX%!POQqGxTv57(Al9<(D_Et^uW}}t7}8)@Ymly zo=P%z35m0>Q+rz#`a?zW0{KRF{8B>(IrdlprB z(cEj$b(yO%IX;=>ov-+46{*_t+7rn(y-Ja{wj-H!^zWLjXt1vxV_zQRt-EEY@Fo%b zvjV?v4wBLI{gWl~J;37hGky@{``C6`OK~5Uwq>y?W^N>;4%dx2w#L4I>lmQmetDQajfpQs`=s~=(qrb1ANGCI3;Ys{NEuqEbYF&{!}M;xAwfc zanR}9#qfm={Ex!UbFyA^xLCRS49?CbI?_9?lF>10VrHMzBl{f#Fcz8J9~u>`dHVJR zAt&{wi5F-*xQQ;YGp)@uShuhM`mdz{}GzR|II%{#q$G5pH5!Sj+lD=4E~R z)HgF%^f6=mWrjPsM5c31Z08%yK=LO@)rnZx(?dyl3cLA0O}Fzxg}T$Sz1Gn<;2MGQ zUD-g!)`zD$T&j}V8(-X^lDNdVMkjIkYE-`+jK9mGKMJON7#pSFoafNa7pS=UZ1i?@wkk_xh4~E<61zIN9trX&h|`&+ zcWB3LI=cM#=g8)OcBTCT!-k^`7BO^?U5Kq%$7HpH-uT7-_8qL5*qydLRt#xBB|RK8!3Kx zu0nc%V}V!)Ew-LGBANk3>X%iHF(zNhbmP3pc*cIXtD!NirTGo$OuHXNutri5VZ?Yr z__)I}Z_ohF$aFnfwTfKewbnF7{+XL=s@`8X9{$N}9_8n^y4EEtiPVasT|5#+s|wRP ztNO4drPlK*pzl)r^srUA;4>r>Y2CJq%+36`0d|-@%W|ZVL(~ctNzrT9m^ijrMUU8m_9W2nB83u185|)$T;2FNEePaFa4?gJYAn7rg|VBXeo{#S0070?;%KlgAm{KfC

2)8U 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 literal 0 HcmV?d00001 diff --git a/OS_img/red-hat-logo.png b/OS_img/red-hat-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..edc1c16b3f52ec2672c0e0c41001b78423cdcc94 GIT binary patch literal 78749 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

- {/* ── Required ──────────────────────────────────────────── */} -
Required
+ { event.preventDefault(); if (step === 4) launch() }}> +
+ {steps.map((item) => ( + + ))} +
- + {step === 1 && <> +
Name and AMI
+ + +
+ Amazon Machine Image * +
+
+
+ {amisQ.isLoading && Loading AMIs…} + {!amisQ.isLoading && <> +
Quick Start
+
+ {visibleQuickStartAmis.map((catalogAmi) => ( + + ))} +
+ } + {!amisQ.isLoading && amis.length === 0 && No AMIs are available.} + {!amisQ.isLoading && amis.length > 0 && <> + + {showAmiBrowser &&
+ {browsableAmis.map((ami) => { + const distro = classifyAmi(ami) + return + })} + {browsableAmis.length === 0 && No additional AMIs match this search and architecture.} +
} + } +
+
+ } - + {step === 2 && <> +
Instance type and key pair
+ +
+ Key pair +
+ + +
+ {keyPairMode === 'existing' ? ( + + ) :
+ { setNewKeyName(e.target.value); setKeyName('') }} placeholder="Key pair name" /> + + + {createdKeyMaterial && } +
} + {createKeyMut.error instanceof Error &&

{createKeyMut.error.message}

} + {createdKeyMaterial &&

The private key is available only from this creation response. Download it before leaving this wizard.

} +
+ } - - - {/* ── Networking — optional ─────────────────────────────── */} -
Networking — optional
- - - - - - {/* ── Security Groups ───────────────────────────────────── */} -
+ {step === 3 && <> +
Network and security
+ +
Security Groups
+
+ } - {createMut.error instanceof Error && ( -
{createMut.error.message}
- )} + {step === 4 && <> +
Storage and review
+ + +
+ Review: fields sent to RunInstances +
+
Name{name}
+
AMI{selectedAmi?.name || imageId} ({imageId})
+
Instance type{instanceType}
+
Key pair{keyName || 'Not sent'}
+
Subnet{selectedSubnet ? `${selectedSubnet.availabilityZone} (${subnetId})` : 'Not sent'}
+
Security groups{selectedGroups.length ? selectedGroups.map((group) => group.groupName || group.groupId).join(', ') : 'Not sent'}
+
Root volume{rootVolumeSize} GiB {rootVolumeType}, delete on termination
+
+
+ } -
- - + {stepError &&
{stepError}
} + {createMut.error instanceof Error &&
{createMut.error.message}
} +
+ + {step < 4 ? : }
) diff --git a/packages/frontend/src/components/DynamicResourceView.tsx b/packages/frontend/src/components/DynamicResourceView.tsx index c84dfc6..a3030f4 100644 --- a/packages/frontend/src/components/DynamicResourceView.tsx +++ b/packages/frontend/src/components/DynamicResourceView.tsx @@ -48,9 +48,11 @@ import { ApiGatewayRoutePanel } from "@/components/ApiGatewayRoutePanel"; import { S3LambdaTriggerPanel } from "@/components/S3LambdaTriggerPanel"; import { ScheduledLambdaTriggerPanel } from "@/components/ScheduledLambdaTriggerPanel"; import { SqsLambdaTriggerPanel } from "@/components/SqsLambdaTriggerPanel"; +import { EventBridgeRulePanel } from "@/components/EventBridgeRulePanel"; import { LambdaInvocationHistoryPanel } from "@/components/LambdaInvocationHistoryPanel"; import { LambdaCreatePanel } from "@/components/LambdaCreatePanel"; import { bucketDeleteWarning } from "@/lib/bucketDeletion"; +import { SnsTopicPanel } from "@/components/SnsTopicPanel"; interface DynamicResourceViewProps { cloud: CloudProvider; @@ -87,6 +89,12 @@ export function DynamicResourceView({ const [bulkDeleteError, setBulkDeleteError] = useState(null); const [deleteWarning, setDeleteWarning] = useState(null); + useEffect(() => { + if (cloud === "aws" && service === "compute") { + setCreateOpen(true); + } + }, [cloud, service]); + const handleDatabaseTabChange = (tab: "instances" | "snapshots") => { setDatabaseTab(tab); @@ -766,7 +774,7 @@ export function DynamicResourceView({ )}
)} - {renderResourceSurface({ + {!(cloud === "aws" && service === "compute" && createOpen) && renderResourceSurface({ schema, resources, selectedId: activeSelected?.id, @@ -872,6 +880,13 @@ export function DynamicResourceView({ runtimeReachable={canUseRuntime} /> )} + {service === "events" && ( + + )} {service === "configuration" && cloud === "aws" && ( )} + {service === "notifications" && ( + + )} {editingResource && schema.updateFields && (
({ + createEventBridgeRule: vi.fn(), + deleteEventBridgeRule: vi.fn(), + listCloudResources: vi.fn(), + listEventBridgeRules: vi.fn(), +})) + +vi.mock('@/api/cloudProxyClient', () => apiMocks) + +const eventBus: CloudResource = {id: 'event-bus:orders', name: 'orders', cloud: 'aws', service: 'events', type: 'event-bus', region: null, createdAt: null, metadata: {}} +const lambda: CloudResource = {id: 'worker', name: 'worker', cloud: 'aws', service: 'serverless', type: 'lambda', region: null, createdAt: null, metadata: {arn: 'arn:aws:lambda:us-east-1:000000000000:function:worker'}} +const topic: CloudResource = {id: 'orders-topic', name: 'orders-topic', cloud: 'aws', service: 'notifications', type: 'topic', region: null, createdAt: null, metadata: {arn: 'arn:aws:sns:us-east-1:000000000000:orders-topic'}} + +function renderPanel() { + const queryClient = new QueryClient({defaultOptions: {queries: {retry: false}}}) + render() +} + +test('creates a scheduled EventBridge rule with the selected resource ARN', async () => { + apiMocks.listCloudResources.mockImplementation((_: string, service: string) => Promise.resolve(service === 'serverless' ? [lambda] : [])) + apiMocks.listEventBridgeRules.mockResolvedValue([]) + apiMocks.createEventBridgeRule.mockResolvedValue({name: 'hourly-report'}) + const user = userEvent.setup() + renderPanel() + + await screen.findByRole('option', {name: 'worker'}) + await user.type(screen.getByLabelText(/rule name/i), 'hourly-report') + await user.selectOptions(screen.getByLabelText(/target resource/i), String(lambda.metadata.arn)) + expect(screen.getByText(/No Lambda, SQS queue, SNS topic, or Step Functions resources will be created/i)).toBeVisible() + await user.click(screen.getByRole('button', {name: 'Create rule'})) + + await waitFor(() => expect(apiMocks.createEventBridgeRule).toHaveBeenCalledWith('aws', 'event-bus:orders', { + name: 'hourly-report', scheduleExpression: 'rate(5 minutes)', state: 'ENABLED', targets: [{id: 'worker', arn: lambda.metadata.arn}], + })) +}) + +test('creates an EventBridge rule with a selected SNS topic target', async () => { + apiMocks.listCloudResources.mockImplementation((_: string, service: string) => Promise.resolve(service === 'notifications' ? [topic] : [])) + apiMocks.listEventBridgeRules.mockResolvedValue([]) + apiMocks.createEventBridgeRule.mockResolvedValue({name: 'topic-notifications'}) + const user = userEvent.setup() + renderPanel() + + await screen.findByRole('option', {name: 'orders-topic'}) + await user.selectOptions(screen.getByLabelText(/target service/i), 'sns') + await user.type(screen.getByLabelText(/rule name/i), 'topic-notifications') + await user.selectOptions(screen.getByLabelText(/target resource/i), String(topic.metadata.arn)) + await user.click(screen.getByRole('button', {name: 'Create rule'})) + + await waitFor(() => expect(apiMocks.createEventBridgeRule).toHaveBeenCalledWith('aws', eventBus.id, { + name: 'topic-notifications', scheduleExpression: 'rate(5 minutes)', state: 'ENABLED', targets: [{id: 'orders-topic', arn: topic.metadata.arn}], + })) +}) + +test('creates an event-pattern rule and confirms before deletion', async () => { + apiMocks.listCloudResources.mockImplementation((_: string, service: string) => Promise.resolve(service === 'serverless' ? [lambda] : [])) + apiMocks.listEventBridgeRules.mockResolvedValue([{name: 'billing-events', busName: 'orders', busId: eventBus.id, arn: null, eventPattern: '{"source":["billing"]}', state: 'DISABLED', targets: [{id: 'worker', arn: String(lambda.metadata.arn)}]}]) + apiMocks.createEventBridgeRule.mockResolvedValue({name: 'billing-events'}) + apiMocks.deleteEventBridgeRule.mockResolvedValue(undefined) + const user = userEvent.setup() + renderPanel() + + await user.click(screen.getByLabelText(/mode/i)) + await user.selectOptions(screen.getByLabelText(/mode/i), 'event-pattern') + await user.type(screen.getByLabelText(/rule name/i), 'billing-events') + await user.selectOptions(screen.getByLabelText(/target resource/i), String(lambda.metadata.arn)) + await user.click(screen.getByRole('button', {name: 'Create rule'})) + await waitFor(() => expect(apiMocks.createEventBridgeRule).toHaveBeenCalledWith('aws', eventBus.id, expect.objectContaining({eventPattern: '{\n "source": ["orders"]\n}'}))) + + await user.click(await screen.findByRole('button', {name: 'Delete rule billing-events'})) + expect(screen.getByText('Delete rule?')).toBeVisible() + await user.click(screen.getByRole('button', {name: 'Delete'})) + await waitFor(() => expect(apiMocks.deleteEventBridgeRule).toHaveBeenCalledWith('aws', eventBus.id, 'billing-events')) +}) diff --git a/packages/frontend/src/components/EventBridgeRulePanel.tsx b/packages/frontend/src/components/EventBridgeRulePanel.tsx new file mode 100644 index 0000000..3159c81 --- /dev/null +++ b/packages/frontend/src/components/EventBridgeRulePanel.tsx @@ -0,0 +1,170 @@ +import {useEffect, useState} from 'react' +import {CalendarClock, Loader2, Plus, Radio, Trash2} from 'lucide-react' +import {useMutation, useQuery, useQueryClient} from '@tanstack/react-query' +import {createEventBridgeRule, deleteEventBridgeRule, listCloudResources, listEventBridgeRules, type EventBridgeRuleOverview} from '@/api/cloudProxyClient' +import type {CloudProvider, CloudServiceType} from '@/types/cloud' +import type {CloudResource} from '@/types/resource' + +interface EventBridgeRulePanelProps { + cloud: CloudProvider + resource?: CloudResource + runtimeReachable: boolean +} + +type TargetService = 'lambda' | 'sqs' | 'sns' | 'step-functions' + +const targetServiceDetails: Record boolean}> = { + lambda: {label: 'Lambda', service: 'serverless', matches: (resource) => resource.type === 'lambda'}, + sqs: {label: 'SQS', service: 'messaging', matches: (resource) => resource.type === 'queue' || resource.type === 'fifo-queue'}, + sns: {label: 'SNS', service: 'notifications', matches: (resource) => resource.type === 'topic'}, + 'step-functions': {label: 'Step Functions', service: 'workflows', matches: (resource) => resource.type === 'state-machine'}, +} + +export function EventBridgeRulePanel({cloud, resource, runtimeReachable}: EventBridgeRulePanelProps) { + const [name, setName] = useState('') + const [description, setDescription] = useState('') + const [mode, setMode] = useState<'schedule' | 'event-pattern'>('schedule') + const [scheduleExpression, setScheduleExpression] = useState('rate(5 minutes)') + const [eventPattern, setEventPattern] = useState('{\n "source": ["orders"]\n}') + const [enabled, setEnabled] = useState(true) + const [targetService, setTargetService] = useState('lambda') + const [targetArn, setTargetArn] = useState('') + const [deleteTarget, setDeleteTarget] = useState(null) + const queryClient = useQueryClient() + const targetQueries = { + serverless: useQuery({ + queryKey: ['cloud-resources', cloud, 'serverless'], + queryFn: ({signal}) => listCloudResources(cloud, 'serverless', undefined, signal), + enabled: cloud === 'aws' && Boolean(resource) && runtimeReachable, + }), + messaging: useQuery({ + queryKey: ['cloud-resources', cloud, 'messaging'], + queryFn: ({signal}) => listCloudResources(cloud, 'messaging', undefined, signal), + enabled: cloud === 'aws' && Boolean(resource) && runtimeReachable, + }), + notifications: useQuery({ + queryKey: ['cloud-resources', cloud, 'notifications'], + queryFn: ({signal}) => listCloudResources(cloud, 'notifications', undefined, signal), + enabled: cloud === 'aws' && Boolean(resource) && runtimeReachable, + }), + workflows: useQuery({ + queryKey: ['cloud-resources', cloud, 'workflows'], + queryFn: ({signal}) => listCloudResources(cloud, 'workflows', undefined, signal), + enabled: cloud === 'aws' && Boolean(resource) && runtimeReachable, + }), + } + const rulesQuery = useQuery({ + queryKey: ['eventbridge-rules', cloud, resource?.id], + queryFn: ({signal}) => listEventBridgeRules(cloud, resource!.id, signal), + enabled: cloud === 'aws' && resource?.service === 'events' && resource.type === 'event-bus' && runtimeReachable, + }) + + useEffect(() => { + setName('') + setDescription('') + setMode('schedule') + setScheduleExpression('rate(5 minutes)') + setEventPattern('{\n "source": ["orders"]\n}') + setEnabled(true) + setTargetService('lambda') + setTargetArn('') + setDeleteTarget(null) + }, [resource?.id]) + + const resourcesByTargetService = (Object.keys(targetServiceDetails) as TargetService[]).reduce>((resources, service) => { + const details = targetServiceDetails[service] + const sourceResources = details.service === 'serverless' + ? targetQueries.serverless.data ?? [] + : details.service === 'messaging' + ? targetQueries.messaging.data ?? [] + : details.service === 'notifications' + ? targetQueries.notifications.data ?? [] + : targetQueries.workflows.data ?? [] + resources[service] = sourceResources.filter((candidate) => details.matches(candidate) && typeof candidate.metadata.arn === 'string' && candidate.metadata.arn.length > 0) + return resources + }, {lambda: [], sqs: [], sns: [], 'step-functions': []}) + const availableTargetServices = (Object.keys(targetServiceDetails) as TargetService[]).filter((service) => resourcesByTargetService[service].length > 0) + const targetResources = resourcesByTargetService[targetService] + const selectedTarget = targetResources.find((candidate) => candidate.metadata.arn === targetArn) + const patternValid = mode !== 'event-pattern' || isJsonObject(eventPattern) + + useEffect(() => { + if (availableTargetServices.length > 0 && !availableTargetServices.includes(targetService)) { + setTargetService(availableTargetServices[0]) + setTargetArn('') + } + }, [availableTargetServices, targetService]) + + const createMutation = useMutation({ + mutationFn: () => createEventBridgeRule(cloud, resource!.id, { + name: name.trim(), + ...(mode === 'schedule' ? {scheduleExpression: scheduleExpression.trim()} : {eventPattern: eventPattern.trim()}), + state: enabled ? 'ENABLED' : 'DISABLED', + ...(description.trim() ? {description: description.trim()} : {}), + targets: [{id: targetId(selectedTarget!), arn: targetArn}], + }), + onSuccess: () => { + setName('') + setDescription('') + setTargetArn('') + void queryClient.invalidateQueries({queryKey: ['eventbridge-rules', cloud, resource?.id]}) + }, + }) + const canCreate = Boolean(name.trim() && targetArn && (mode === 'schedule' ? scheduleExpression.trim() : eventPattern.trim()) && patternValid) && !createMutation.isPending + const deleteMutation = useMutation({ + mutationFn: (rule: EventBridgeRuleOverview) => deleteEventBridgeRule(cloud, resource!.id, rule.name), + onSuccess: () => { + setDeleteTarget(null) + void queryClient.invalidateQueries({queryKey: ['eventbridge-rules', cloud, resource?.id]}) + }, + }) + + if (!resource || resource.service !== 'events' || resource.type !== 'event-bus') return null + + return
+
+
+

EventBridge Rules

+

Add rule to {resource.name}

+

Route a schedule or matching events from this event bus to one existing target.

+
+
+
+
{ + event.preventDefault() + if (canCreate) createMutation.mutate() + }}> + + + + {mode === 'schedule' ? :

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 z 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 { keyName: 'my-key', subnetId: 'subnet-abc', securityGroupIds: 'sg-111, sg-222', + rootVolumeSize: '30', + rootVolumeType: 'gp3', }}) expect(launched).toHaveLength(1) expect(launched[0].name).toBe('test-box') expect(launched[0].imageId).toBe('ami-0abcdef123') expect(launched[0].instanceType).toBe('t3.micro') expect(launched[0].securityGroupIds).toEqual(['sg-111', 'sg-222']) + expect(launched[0].rootVolumeSize).toBe(30) + expect(launched[0].rootVolumeType).toBe('gp3') expect(result.type).toBe('instance') expect(result.cloud).toBe('aws') }) diff --git a/packages/api/src/adapter-aws/AwsComputeAdapter.ts b/packages/api/src/adapter-aws/AwsComputeAdapter.ts index 13b472b..3e4663b 100644 --- a/packages/api/src/adapter-aws/AwsComputeAdapter.ts +++ b/packages/api/src/adapter-aws/AwsComputeAdapter.ts @@ -1,4 +1,5 @@ import {awsComputeSchema} from '../cloud-spi/computeSchema' +import {ValidationError} from '../cloud-spi/errors' import type { CloudResource, CloudServiceAdapter, @@ -51,6 +52,7 @@ export class AwsComputeAdapter implements CloudServiceAdapter { const v = input.values const sgRaw = typeof v.securityGroupIds === 'string' ? v.securityGroupIds : '' const securityGroupIds = sgRaw ? sgRaw.split(',').map((s: string) => s.trim()).filter(Boolean) : undefined + const rootVolumeSize = positiveInteger(v.rootVolumeSize) const runInput: RunInstanceInput = { name: String(v.name ?? ''), imageId: String(v.imageId ?? ''), @@ -58,6 +60,8 @@ export class AwsComputeAdapter implements CloudServiceAdapter { keyName: v.keyName ? String(v.keyName) : undefined, subnetId: v.subnetId ? String(v.subnetId) : undefined, securityGroupIds, + rootVolumeSize, + rootVolumeType: v.rootVolumeType ? String(v.rootVolumeType) : undefined, } const instance = await this.service_.runInstance(runInput) return instanceToResource(instance) @@ -68,6 +72,13 @@ export class AwsComputeAdapter implements CloudServiceAdapter { } } +function positiveInteger(value: unknown): number | undefined { + if (value === undefined || value === null || String(value).trim() === '') return undefined + const parsed = Number(value) + if (!Number.isInteger(parsed) || parsed <= 0) throw new ValidationError('rootVolumeSize must be a positive whole number') + return parsed +} + function instanceToResource(instance: Ec2Instance): CloudResource { return { id: instance.instanceId, diff --git a/packages/api/src/adapter-aws/AwsEventBridgeAdapter.test.ts b/packages/api/src/adapter-aws/AwsEventBridgeAdapter.test.ts index f82c296..43c3a9b 100644 --- a/packages/api/src/adapter-aws/AwsEventBridgeAdapter.test.ts +++ b/packages/api/src/adapter-aws/AwsEventBridgeAdapter.test.ts @@ -2,10 +2,17 @@ import {describe, expect, test} from 'bun:test' import { CreateEventBusCommand, DeleteEventBusCommand, + DeleteRuleCommand, DescribeEventBusCommand, ListEventBusesCommand, + ListRulesCommand, + ListTargetsByRuleCommand, + PutRuleCommand, + PutTargetsCommand, + RemoveTargetsCommand, type EventBridgeClient, } from '@aws-sdk/client-eventbridge' +import {AddPermissionCommand, type LambdaClient} from '@aws-sdk/client-lambda' import {AwsEventBridgeAdapter} from './AwsEventBridgeAdapter' type SendHandler = (command: unknown) => Promise @@ -74,8 +81,64 @@ describe('AwsEventBridgeAdapter', () => { expect(commands[1]).toBeInstanceOf(DeleteEventBusCommand) expect((commands[1] as DeleteEventBusCommand).input.Name).toBe('orders') }) + + test('lists every rule and its targets for an event bus', async () => { + const adapter = createAdapter(async (command) => { + if (command instanceof ListRulesCommand) { + expect(command.input.EventBusName).toBe('orders') + return command.input.NextToken + ? {Rules: [{Name: 'nightly', Arn: 'arn:aws:events:us-east-1:000000000000:rule/orders/nightly', EventPattern: '{"source":["billing"]}', State: 'DISABLED'}]} + : {Rules: [{Name: 'hourly', Arn: 'arn:aws:events:us-east-1:000000000000:rule/orders/hourly', ScheduleExpression: 'rate(1 hour)'}], NextToken: 'next'} + } + if (command instanceof ListTargetsByRuleCommand) { + return {Targets: [{Id: 'worker', Arn: 'arn:aws:lambda:us-east-1:000000000000:function:worker'}]} + } + return {} + }) + + await expect(adapter.listEventBridgeRules('event-bus:orders')).resolves.toEqual([ + {name: 'hourly', busName: 'orders', busId: 'event-bus:orders', arn: 'arn:aws:events:us-east-1:000000000000:rule/orders/hourly', scheduleExpression: 'rate(1 hour)', state: 'ENABLED', targets: [{id: 'worker', arn: 'arn:aws:lambda:us-east-1:000000000000:function:worker'}]}, + {name: 'nightly', busName: 'orders', busId: 'event-bus:orders', arn: 'arn:aws:events:us-east-1:000000000000:rule/orders/nightly', eventPattern: '{"source":["billing"]}', state: 'DISABLED', targets: [{id: 'worker', arn: 'arn:aws:lambda:us-east-1:000000000000:function:worker'}]}, + ]) + }) + + test('creates a rule, attaches targets, and permits Lambda invocation', async () => { + const commands: unknown[] = [] + const adapter = createAdapter(async (command) => { + commands.push(command) + if (command instanceof PutRuleCommand) return {RuleArn: 'arn:aws:events:us-east-1:000000000000:rule/orders/hourly'} + return {} + }) + + await expect(adapter.createEventBridgeRule('event-bus:orders', { + name: 'hourly', scheduleExpression: 'rate(1 hour)', state: 'DISABLED', description: 'Run the worker', + targets: [{id: 'worker', arn: 'arn:aws:lambda:us-east-1:000000000000:function:worker'}], + })).resolves.toMatchObject({name: 'hourly', busName: 'orders', state: 'DISABLED'}) + + expect((commands[0] as PutRuleCommand).input).toEqual({Name: 'hourly', EventBusName: 'orders', ScheduleExpression: 'rate(1 hour)', State: 'DISABLED', Description: 'Run the worker'}) + expect((commands[1] as PutTargetsCommand).input).toEqual({Rule: 'hourly', EventBusName: 'orders', Targets: [{Id: 'worker', Arn: 'arn:aws:lambda:us-east-1:000000000000:function:worker'}]}) + expect((commands[2] as AddPermissionCommand).input).toMatchObject({FunctionName: 'arn:aws:lambda:us-east-1:000000000000:function:worker', Principal: 'events.amazonaws.com', SourceArn: 'arn:aws:events:us-east-1:000000000000:rule/orders/hourly'}) + }) + + test('removes targets before deleting a rule', async () => { + const commands: unknown[] = [] + const adapter = createAdapter(async (command) => { + commands.push(command) + if (command instanceof ListTargetsByRuleCommand) return {Targets: [{Id: 'worker', Arn: 'arn:aws:lambda:us-east-1:000000000000:function:worker'}]} + return {} + }) + + await adapter.deleteEventBridgeRule('event-bus:orders', 'hourly') + + expect(commands[0]).toBeInstanceOf(ListTargetsByRuleCommand) + expect((commands[1] as RemoveTargetsCommand).input).toEqual({Rule: 'hourly', EventBusName: 'orders', Ids: ['worker']}) + expect((commands[2] as DeleteRuleCommand).input).toEqual({Name: 'hourly', EventBusName: 'orders'}) + }) }) function createAdapter(handler: SendHandler = async () => ({EventBuses: []})): AwsEventBridgeAdapter { - return new AwsEventBridgeAdapter({send: handler} as unknown as EventBridgeClient) + return new AwsEventBridgeAdapter( + {send: handler} as unknown as EventBridgeClient, + {send: handler} as unknown as LambdaClient, + ) } diff --git a/packages/api/src/adapter-aws/AwsEventBridgeAdapter.ts b/packages/api/src/adapter-aws/AwsEventBridgeAdapter.ts index acbace5..088761c 100644 --- a/packages/api/src/adapter-aws/AwsEventBridgeAdapter.ts +++ b/packages/api/src/adapter-aws/AwsEventBridgeAdapter.ts @@ -2,10 +2,19 @@ import { CreateEventBusCommand, DeleteEventBusCommand, DescribeEventBusCommand, + DeleteRuleCommand, ListEventBusesCommand, + ListRulesCommand, + ListTargetsByRuleCommand, + PutRuleCommand, + PutTargetsCommand, + RemoveTargetsCommand, type EventBridgeClient, type EventBus, + type Rule, + type Target, } from '@aws-sdk/client-eventbridge' +import {AddPermissionCommand, type LambdaClient} from '@aws-sdk/client-lambda' import {awsEventBridgeSchema} from '../cloud-spi/eventbridgeSchema' import {ValidationError} from '../cloud-spi/errors' import type { @@ -13,6 +22,9 @@ import type { CloudServiceAdapter, CloudServiceDescriptorOverride, CreateResourceInput, + EventBridgeRuleInput, + EventBridgeRuleOverview, + EventBridgeRuleTarget, ResourceQuery, ServiceSchema, } from '../cloud-spi/types' @@ -24,7 +36,10 @@ export class AwsEventBridgeAdapter implements CloudServiceAdapter { readonly cloud = 'aws' as const readonly service = 'events' as const - constructor(private readonly eventbridge: EventBridgeClient) {} + constructor( + private readonly eventbridge: EventBridgeClient, + private readonly lambda: LambdaClient, + ) {} schema(): ServiceSchema { return awsEventBridgeSchema() @@ -67,6 +82,90 @@ export class AwsEventBridgeAdapter implements CloudServiceAdapter { async delete(id: string): Promise { await this.eventbridge.send(new DeleteEventBusCommand({Name: eventBusName(id)})) } + + async listEventBridgeRules(eventBusId: string): Promise { + const busName = eventBusName(eventBusId) + const rules: Rule[] = [] + let nextToken: string | undefined + do { + const response = await this.eventbridge.send(new ListRulesCommand({ + ...eventBusInput(busName), + NextToken: nextToken, + })) + rules.push(...(response.Rules ?? [])) + nextToken = response.NextToken + } while (nextToken) + + return Promise.all(rules.filter((rule) => Boolean(rule.Name)).map(async (rule) => { + const name = rule.Name as string + return ruleOverview(rule, busName, await this.listTargets(name, busName)) + })) + } + + async createEventBridgeRule(eventBusId: string, input: EventBridgeRuleInput): Promise { + const busName = eventBusName(eventBusId) + const name = requiredValue(input.name, 'name') + const targetInput = ruleInput(input) + const response = await this.eventbridge.send(new PutRuleCommand({ + Name: name, + ...eventBusInput(busName), + ...(targetInput.scheduleExpression ? {ScheduleExpression: targetInput.scheduleExpression} : {}), + ...(targetInput.eventPattern ? {EventPattern: targetInput.eventPattern} : {}), + State: targetInput.state, + ...(targetInput.description ? {Description: targetInput.description} : {}), + })) + const arn = response.RuleArn + if (!arn) throw new ValidationError(`EventBridge rule ${name} did not return an ARN`) + + await this.eventbridge.send(new PutTargetsCommand({ + Rule: name, + ...eventBusInput(busName), + Targets: input.targets.map((target) => ({Id: target.id, Arn: target.arn})), + })) + await Promise.all(input.targets.filter((target) => isLambdaArn(target.arn)).map((target) => + this.lambda.send(new AddPermissionCommand({ + FunctionName: target.arn, + StatementId: permissionStatementId(busName, name, target.id), + Action: 'lambda:InvokeFunction', + Principal: 'events.amazonaws.com', + SourceArn: arn, + })), + )) + return { + name, + busName, + busId: `${EVENT_BUS_PREFIX}${busName}`, + arn, + ...targetInput, + targets: input.targets, + } + } + + async deleteEventBridgeRule(eventBusId: string, ruleName: string): Promise { + const busName = eventBusName(eventBusId) + const name = requiredValue(ruleName, 'ruleName') + const targets = await this.listTargets(name, busName) + const targetIds = targets.map((target) => target.Id).filter((id): id is string => Boolean(id)) + if (targetIds.length > 0) { + await this.eventbridge.send(new RemoveTargetsCommand({Rule: name, ...eventBusInput(busName), Ids: targetIds})) + } + await this.eventbridge.send(new DeleteRuleCommand({Name: name, ...eventBusInput(busName)})) + } + + private async listTargets(ruleName: string, busName: string): Promise { + const targets: Target[] = [] + let nextToken: string | undefined + do { + const response = await this.eventbridge.send(new ListTargetsByRuleCommand({ + Rule: ruleName, + ...eventBusInput(busName), + NextToken: nextToken, + })) + targets.push(...(response.Targets ?? [])) + nextToken = response.NextToken + } while (nextToken) + return targets + } } function eventBusResource(eventBus: EventBus): CloudResource { @@ -122,3 +221,55 @@ function isNotFound(error: unknown): boolean { const value = error as {name?: string; $metadata?: {httpStatusCode?: number}} return value.name === 'ResourceNotFoundException' || value.$metadata?.httpStatusCode === 404 } + +function eventBusInput(busName: string): {EventBusName?: string} { + return busName === 'default' ? {} : {EventBusName: busName} +} + +function ruleInput(input: EventBridgeRuleInput): Pick { + const scheduleExpression = stringValue(input.scheduleExpression) + const eventPattern = stringValue(input.eventPattern) + if (Boolean(scheduleExpression) === Boolean(eventPattern)) { + throw new ValidationError('exactly one of scheduleExpression or eventPattern is required') + } + if (eventPattern) { + try { + JSON.parse(eventPattern) + } catch { + throw new ValidationError('eventPattern must be a JSON string') + } + } + if (!Array.isArray(input.targets) || input.targets.length === 0) throw new ValidationError('at least one target is required') + const targetsValid = input.targets.every((target) => requiredValue(target.id, 'target.id') && requiredValue(target.arn, 'target.arn')) + if (!targetsValid) throw new ValidationError('target id and arn are required') + const state = input.state ?? 'ENABLED' + if (state !== 'ENABLED' && state !== 'DISABLED') throw new ValidationError('state must be ENABLED or DISABLED') + return { + ...(scheduleExpression ? {scheduleExpression} : {}), + ...(eventPattern ? {eventPattern} : {}), + state, + ...(stringValue(input.description) ? {description: stringValue(input.description)} : {}), + } +} + +function ruleOverview(rule: Rule, busName: string, targets: Target[]): EventBridgeRuleOverview { + return { + name: rule.Name ?? '', + busName, + busId: `${EVENT_BUS_PREFIX}${busName}`, + arn: rule.Arn ?? null, + ...(rule.ScheduleExpression ? {scheduleExpression: rule.ScheduleExpression} : {}), + ...(rule.EventPattern ? {eventPattern: rule.EventPattern} : {}), + state: rule.State === 'DISABLED' ? 'DISABLED' : 'ENABLED', + ...(rule.Description ? {description: rule.Description} : {}), + targets: targets.flatMap((target) => target.Id && target.Arn ? [{id: target.Id, arn: target.Arn}] : []), + } +} + +function isLambdaArn(arn: string): boolean { + return arn.split(':')[2] === 'lambda' +} + +function permissionStatementId(busName: string, ruleName: string, targetId: string): string { + return `floci-events-${busName}-${ruleName}-${targetId}`.replace(/[^A-Za-z0-9_-]/g, '_').slice(0, 100) +} diff --git a/packages/api/src/adapter-aws/AwsSnsAdapter.test.ts b/packages/api/src/adapter-aws/AwsSnsAdapter.test.ts new file mode 100644 index 0000000..ffafb35 --- /dev/null +++ b/packages/api/src/adapter-aws/AwsSnsAdapter.test.ts @@ -0,0 +1,138 @@ +import {describe, expect, test} from 'bun:test' +import { + CreateTopicCommand, + DeleteTopicCommand, + GetSubscriptionAttributesCommand, + GetTopicAttributesCommand, + ListSubscriptionsByTopicCommand, + ListTopicsCommand, + PublishCommand, + SubscribeCommand, + type SNSClient, + UnsubscribeCommand, +} from '@aws-sdk/client-sns' +import {AwsSnsAdapter} from './AwsSnsAdapter' +import {ValidationError} from '../cloud-spi/errors' + +const ORDERS_ARN = 'arn:aws:sns:us-east-1:000000000000:orders' +const ALERTS_ARN = 'arn:aws:sns:us-east-1:000000000000:alerts' + +function stubSns() { + const sent: object[] = [] + const client = { + async send(command: object) { + sent.push(command) + if (command instanceof ListTopicsCommand) return {Topics: [{TopicArn: ORDERS_ARN}, {TopicArn: ALERTS_ARN}]} + if (command instanceof GetTopicAttributesCommand) { + return {Attributes: {DisplayName: 'Order notifications', FifoTopic: 'false'}} + } + if (command instanceof CreateTopicCommand) { + return {TopicArn: `arn:aws:sns:us-east-1:000000000000:${command.input.Name}`} + } + if (command instanceof PublishCommand) return {MessageId: 'e5a98c5b-cd94-4c38-a9ac-7260ec3e575f'} + if (command instanceof ListSubscriptionsByTopicCommand) return {Subscriptions: [{ + SubscriptionArn: 'arn:aws:sns:us-east-1:000000000000:orders:sub-1', + Protocol: 'sqs', + Endpoint: 'arn:aws:sqs:us-east-1:000000000000:orders', + }]} + if (command instanceof GetSubscriptionAttributesCommand) return {Attributes: {FilterPolicy: '{"eventType":["created"]}'}} + if (command instanceof SubscribeCommand) return {SubscriptionArn: 'arn:aws:sns:us-east-1:000000000000:orders:sub-2'} + return {} + }, + } as unknown as SNSClient + return {client, sent} +} + +describe('AwsSnsAdapter', () => { + test('lists SNS topic ARNs as topic resources', async () => { + const {client} = stubSns() + const [topic] = await new AwsSnsAdapter(client).list() + + expect(topic).toMatchObject({id: ORDERS_ARN, name: 'orders', service: 'notifications', type: 'topic'}) + expect(topic?.metadata.arn).toBe(ORDERS_ARN) + }) + + test('gets a topic with its SNS attributes', async () => { + const {client, sent} = stubSns() + const topic = await new AwsSnsAdapter(client).get(ORDERS_ARN) + + expect(sent[0]).toBeInstanceOf(GetTopicAttributesCommand) + expect(topic?.metadata.displayName).toBe('Order notifications') + }) + + test('creates and reads back an SNS topic', async () => { + const {client, sent} = stubSns() + const topic = await new AwsSnsAdapter(client).create({values: {name: 'orders'}}) + + expect(sent[0]).toBeInstanceOf(CreateTopicCommand) + expect((sent[0] as CreateTopicCommand).input.Name).toBe('orders') + expect(sent[1]).toBeInstanceOf(GetTopicAttributesCommand) + expect(topic.id).toBe(ORDERS_ARN) + }) + + test('deletes a topic by ARN', async () => { + const {client, sent} = stubSns() + await new AwsSnsAdapter(client).delete(ORDERS_ARN) + + expect((sent[0] as DeleteTopicCommand).input.TopicArn).toBe(ORDERS_ARN) + }) + + test('publishes a message with optional subject and string message attributes', async () => { + const {client, sent} = stubSns() + const result = await new AwsSnsAdapter(client).publish(ORDERS_ARN, { + message: 'Order placed', + subject: 'Order update', + messageAttributes: {orderId: '1234'}, + }) + + expect(result.messageId).toBe('e5a98c5b-cd94-4c38-a9ac-7260ec3e575f') + expect((sent[0] as PublishCommand).input).toEqual({ + TopicArn: ORDERS_ARN, + Message: 'Order placed', + Subject: 'Order update', + MessageAttributes: {orderId: {DataType: 'String', StringValue: '1234'}}, + }) + }) + + test('manages SNS subscriptions with direct SDK commands and exposes their attributes', async () => { + const {client, sent} = stubSns() + const adapter = new AwsSnsAdapter(client) + + const created = await adapter.createSnsSubscription(ORDERS_ARN, { + protocol: 'sqs', + endpoint: 'arn:aws:sqs:us-east-1:000000000000:orders', + }) + const subscriptions = await adapter.listSnsSubscriptions(ORDERS_ARN) + await adapter.deleteSnsSubscription('arn:aws:sns:us-east-1:000000000000:orders:sub-1') + + expect((sent[0] as SubscribeCommand).input).toEqual({ + TopicArn: ORDERS_ARN, + Protocol: 'sqs', + Endpoint: 'arn:aws:sqs:us-east-1:000000000000:orders', + }) + expect((sent[1] as ListSubscriptionsByTopicCommand).input).toEqual({TopicArn: ORDERS_ARN}) + expect((sent[2] as GetSubscriptionAttributesCommand).input).toEqual({ + SubscriptionArn: 'arn:aws:sns:us-east-1:000000000000:orders:sub-1', + }) + expect((sent[3] as UnsubscribeCommand).input).toEqual({ + SubscriptionArn: 'arn:aws:sns:us-east-1:000000000000:orders:sub-1', + }) + expect(created).toMatchObject({arn: 'arn:aws:sns:us-east-1:000000000000:orders:sub-2', protocol: 'sqs', status: 'Confirmed'}) + expect(subscriptions).toEqual([{ + arn: 'arn:aws:sns:us-east-1:000000000000:orders:sub-1', + protocol: 'sqs', + endpoint: 'arn:aws:sqs:us-east-1:000000000000:orders', + status: 'Confirmed', + filterPolicy: '{"eventType":["created"]}', + }]) + }) + + test('rejects invalid topic names and blank messages before calling SNS', async () => { + const {client, sent} = stubSns() + const adapter = new AwsSnsAdapter(client) + + await expect(adapter.create({values: {name: 'has space'}})).rejects.toBeInstanceOf(ValidationError) + await expect(adapter.publish(ORDERS_ARN, {message: ''})).rejects.toBeInstanceOf(ValidationError) + expect(sent).toEqual([]) + }) +}) diff --git a/packages/api/src/adapter-aws/AwsSnsAdapter.ts b/packages/api/src/adapter-aws/AwsSnsAdapter.ts new file mode 100644 index 0000000..e310588 --- /dev/null +++ b/packages/api/src/adapter-aws/AwsSnsAdapter.ts @@ -0,0 +1,200 @@ +import { + CreateTopicCommand, + DeleteTopicCommand, + GetSubscriptionAttributesCommand, + GetTopicAttributesCommand, + ListSubscriptionsByTopicCommand, + ListTopicsCommand, + PublishCommand, + SubscribeCommand, + type SNSClient, + type Subscription, + type Topic, + UnsubscribeCommand, +} from '@aws-sdk/client-sns' +import {ValidationError} from '../cloud-spi/errors' +import {awsNotificationsSchema} from '../cloud-spi/notificationsSchema' +import type { + CloudResource, + CloudServiceAdapter, + CreateResourceInput, + PublishNotificationInput, + PublishNotificationResult, + ResourceQuery, + ServiceSchema, + SnsSubscriptionInput, + SnsSubscriptionOverview, +} from '../cloud-spi/types' + +/** Amazon SNS topics through the provider-neutral Notifications category. */ +export class AwsSnsAdapter implements CloudServiceAdapter { + readonly cloud = 'aws' as const + readonly service = 'notifications' as const + + constructor(private readonly sns: SNSClient) {} + + schema(): ServiceSchema { + return awsNotificationsSchema() + } + + async list(query: ResourceQuery = {}): Promise { + const topics: Topic[] = [] + let nextToken: string | undefined + do { + const response = await this.sns.send(new ListTopicsCommand(nextToken ? {NextToken: nextToken} : {})) + topics.push(...(response.Topics ?? [])) + nextToken = response.NextToken + } while (nextToken) + + return filterBySearch(topics.map((topic) => topicResource(topic)), query.search) + } + + async get(id: string): Promise { + try { + const response = await this.sns.send(new GetTopicAttributesCommand({TopicArn: id})) + return topicResource({TopicArn: id}, response.Attributes) + } catch (error) { + if (isMissing(error)) return null + throw error + } + } + + async create(input: CreateResourceInput): Promise { + const name = requiredName(input.values.name) + const response = await this.sns.send(new CreateTopicCommand({Name: name})) + const arn = response.TopicArn + if (!arn) throw new ValidationError(`SNS did not return an ARN for ${name}`) + return (await this.get(arn)) ?? topicResource({TopicArn: arn}) + } + + async delete(id: string): Promise { + await this.sns.send(new DeleteTopicCommand({TopicArn: id})) + } + + async publish(id: string, input: PublishNotificationInput): Promise { + const message = requiredMessage(input.message) + const subject = optionalSubject(input.subject) + const MessageAttributes = toMessageAttributes(input.messageAttributes) + const response = await this.sns.send(new PublishCommand({ + TopicArn: id, + Message: message, + ...(subject ? {Subject: subject} : {}), + ...(MessageAttributes ? {MessageAttributes} : {}), + })) + return {messageId: response.MessageId ?? null} + } + + async createSnsSubscription(topicArn: string, input: SnsSubscriptionInput): Promise { + const protocol = requiredSubscriptionValue(input.protocol, 'protocol') + const endpoint = requiredSubscriptionValue(input.endpoint, 'endpoint') + const response = await this.sns.send(new SubscribeCommand({ + TopicArn: topicArn, + Protocol: protocol, + Endpoint: endpoint, + })) + return { + arn: response.SubscriptionArn ?? null, + protocol, + endpoint, + status: response.SubscriptionArn === 'PendingConfirmation' ? 'PendingConfirmation' : 'Confirmed', + filterPolicy: null, + } + } + + async listSnsSubscriptions(topicArn: string): Promise { + const subscriptions: Subscription[] = [] + let nextToken: string | undefined + do { + const response = await this.sns.send(new ListSubscriptionsByTopicCommand({ + TopicArn: topicArn, + ...(nextToken ? {NextToken: nextToken} : {}), + })) + subscriptions.push(...(response.Subscriptions ?? [])) + nextToken = response.NextToken + } while (nextToken) + + return Promise.all(subscriptions.map((subscription) => this.subscriptionOverview(subscription))) + } + + async deleteSnsSubscription(subscriptionArn: string): Promise { + await this.sns.send(new UnsubscribeCommand({SubscriptionArn: subscriptionArn})) + } + + async health(): Promise { + await this.sns.send(new ListTopicsCommand({})) + } + + private async subscriptionOverview(subscription: Subscription): Promise { + const arn = subscription.SubscriptionArn ?? null + const pending = arn === 'PendingConfirmation' + const attributes = !arn || pending + ? undefined + : await this.sns.send(new GetSubscriptionAttributesCommand({SubscriptionArn: arn})) + return { + arn, + protocol: subscription.Protocol ?? '', + endpoint: subscription.Endpoint ?? '', + status: pending ? 'PendingConfirmation' : 'Confirmed', + filterPolicy: attributes?.Attributes?.FilterPolicy ?? null, + } + } +} + +function topicResource(topic: Topic, attributes: Record = {}): CloudResource { + const arn = topic.TopicArn ?? '' + return { + id: arn, + name: topicName(arn), + cloud: 'aws', + service: 'notifications', + type: attributes.FifoTopic === 'true' ? 'fifo-topic' : 'topic', + region: arn.split(':')[3] || null, + createdAt: null, + metadata: {arn, fifoTopic: attributes.FifoTopic === 'true', displayName: attributes.DisplayName}, + } +} + +function topicName(arn: string): string { + return arn.split(':').pop() ?? arn +} + +function filterBySearch(resources: CloudResource[], search?: string): CloudResource[] { + const normalized = search?.trim().toLowerCase() + if (!normalized) return resources + return resources.filter((resource) => resource.name.toLowerCase().includes(normalized)) +} + +function requiredName(value: unknown): string { + if (typeof value !== 'string' || !value.trim()) throw new ValidationError('name is required') + const name = value.trim() + if (!/^[A-Za-z0-9_-]{1,256}$/.test(name) && !/^[A-Za-z0-9_-]{1,251}\.fifo$/.test(name)) { + throw new ValidationError('name must be up to 256 letters, numbers, hyphens, underscores, or end in .fifo') + } + return name +} + +function requiredMessage(value: unknown): string { + if (typeof value !== 'string' || !value) throw new ValidationError('message is required') + return value +} + +function requiredSubscriptionValue(value: unknown, field: string): string { + if (typeof value !== 'string' || !value.trim()) throw new ValidationError(`${field} is required`) + return value.trim() +} + +function optionalSubject(value: unknown): string | undefined { + if (value === undefined || value === '') return undefined + if (typeof value !== 'string') throw new ValidationError('subject must be a string') + if (value.length > 100) throw new ValidationError('subject must be 100 characters or fewer') + return value +} + +function toMessageAttributes(values: Record | undefined) { + if (!values || Object.keys(values).length === 0) return undefined + return Object.fromEntries(Object.entries(values).map(([Name, Value]) => [Name, {DataType: 'String', StringValue: Value}])) +} + +function isMissing(error: unknown): boolean { + return typeof error === 'object' && error !== null && (error as {name?: string}).name === 'NotFound' +} diff --git a/packages/api/src/aws.ts b/packages/api/src/aws.ts index 97a57d4..beed793 100644 --- a/packages/api/src/aws.ts +++ b/packages/api/src/aws.ts @@ -16,6 +16,7 @@ import { DynamoDBClient } from "@aws-sdk/client-dynamodb"; import { APIGatewayClient } from "@aws-sdk/client-api-gateway"; import { CloudFormationClient } from "@aws-sdk/client-cloudformation"; import { AppConfigClient } from "@aws-sdk/client-appconfig"; +import { SNSClient } from "@aws-sdk/client-sns"; const endpoint = process.env.FLOCI_ENDPOINT; const region = process.env.AWS_REGION || "us-east-1"; @@ -63,6 +64,7 @@ export type AwsClients = { apiGateway: APIGatewayClient; cloudformation: CloudFormationClient; appConfig: AppConfigClient; + sns: SNSClient; }; export type AwsClientName = keyof AwsClients; @@ -94,6 +96,7 @@ function buildClients(accountId: string): AwsClients { apiGateway: new APIGatewayClient(base), cloudformation: new CloudFormationClient(base), appConfig: new AppConfigClient(base), + sns: new SNSClient(base), }; } diff --git a/packages/api/src/cloud-spi/notificationsSchema.ts b/packages/api/src/cloud-spi/notificationsSchema.ts new file mode 100644 index 0000000..2d2a390 --- /dev/null +++ b/packages/api/src/cloud-spi/notificationsSchema.ts @@ -0,0 +1,33 @@ +import type {ServiceSchema} from './types' + +export function awsNotificationsSchema(): ServiceSchema { + return { + cloud: 'aws', + service: 'notifications', + displayName: 'Amazon SNS', + fields: [ + { + name: 'name', + label: 'Topic Name', + type: 'text', + required: true, + description: 'Up to 256 letters, numbers, hyphens, and underscores.', + }, + ], + actions: ['list', 'create', 'inspect', 'delete'], + filters: [{name: 'search', label: 'Search', type: 'text', required: false}], + columns: [ + {name: 'name', label: 'Name'}, + {name: 'arn', label: 'Topic ARN', path: 'metadata.arn', format: 'code'}, + {name: 'type', label: 'Type'}, + ], + capabilities: { + resourceActions: [ + {name: 'list', label: 'List topics', enabled: true, status: 'available', runtimeRequired: true}, + {name: 'create', label: 'Create topic', enabled: true, status: 'available', runtimeRequired: true}, + {name: 'delete', label: 'Delete topic', enabled: true, status: 'available', runtimeRequired: true}, + {name: 'inspect', label: 'Inspect topic', enabled: true, status: 'available', runtimeRequired: false}, + ], + }, + } +} diff --git a/packages/api/src/cloud-spi/serviceCatalog.ts b/packages/api/src/cloud-spi/serviceCatalog.ts index bed5d96..b4c0114 100644 --- a/packages/api/src/cloud-spi/serviceCatalog.ts +++ b/packages/api/src/cloud-spi/serviceCatalog.ts @@ -111,6 +111,13 @@ export const SERVICE_CATALOG = { group: 'Integration', order: 10, }, + notifications: { + displayName: 'Notifications', + displayNameByCloud: {aws: 'SNS'}, + iconKey: 'notifications', + group: 'Integration', + order: 11, + }, events: { displayName: 'Events', displayNameByCloud: {aws: 'EventBridge'}, diff --git a/packages/api/src/cloud-spi/types.ts b/packages/api/src/cloud-spi/types.ts index 8607e19..19f3dd6 100644 --- a/packages/api/src/cloud-spi/types.ts +++ b/packages/api/src/cloud-spi/types.ts @@ -450,6 +450,29 @@ export interface ServerlessInvokeResult { executionDuration?: number } +export interface PublishNotificationInput { + message: string + subject?: string + messageAttributes?: Record +} + +export interface PublishNotificationResult { + messageId: string | null +} + +export interface SnsSubscriptionInput { + protocol: string + endpoint: string +} + +export interface SnsSubscriptionOverview { + arn: string | null + protocol: string + endpoint: string + status: 'Confirmed' | 'PendingConfirmation' + filterPolicy: string | null +} + export interface ApiGatewayLambdaRouteInput { path: string method: string @@ -530,6 +553,27 @@ export interface EventBridgeLambdaTriggerOverview { state: string | null } +export interface EventBridgeRuleTarget { + id: string + arn: string +} + +export interface EventBridgeRuleInput { + name: string + scheduleExpression?: string + eventPattern?: string + state?: 'ENABLED' | 'DISABLED' + description?: string + targets: EventBridgeRuleTarget[] +} + +export interface EventBridgeRuleOverview extends EventBridgeRuleInput { + busName: string + busId: string + arn: string | null + state: 'ENABLED' | 'DISABLED' +} + export interface SqsLambdaEventSourceMappingInput { functionName: string queueArn: string @@ -608,6 +652,10 @@ export interface CloudServiceAdapter { createDatabaseSnapshot?(input: CreateDatabaseSnapshotInput): Promise listDatabaseOrderableInstanceClasses?(engine?: string): Promise invoke?(id: string, payload: string): Promise + publish?(id: string, input: PublishNotificationInput): Promise + createSnsSubscription?(topicArn: string, input: SnsSubscriptionInput): Promise + listSnsSubscriptions?(topicArn: string): Promise + deleteSnsSubscription?(subscriptionArn: string): Promise createApiGatewayLambdaRoute?(apiId: string, input: ApiGatewayLambdaRouteInput): Promise testApiGatewayRoute?(apiId: string, input: ApiGatewayTestRouteInput): Promise listApiGatewayRoutes?(apiId: string): Promise @@ -618,6 +666,9 @@ export interface CloudServiceAdapter { createEventBridgeLambdaTrigger?(input: EventBridgeLambdaTriggerInput): Promise listEventBridgeLambdaTriggers?(functionName: string): Promise deleteEventBridgeLambdaTrigger?(functionName: string, triggerId: string): Promise + listEventBridgeRules?(eventBusId: string): Promise + createEventBridgeRule?(eventBusId: string, input: EventBridgeRuleInput): Promise + deleteEventBridgeRule?(eventBusId: string, ruleName: string): Promise createSqsLambdaEventSourceMapping?(input: SqsLambdaEventSourceMappingInput): Promise listSqsLambdaEventSourceMappings?(functionName: string): Promise deleteSqsLambdaEventSourceMapping?(functionName: string, mappingId: string): Promise diff --git a/packages/api/src/cloudProxy.ts b/packages/api/src/cloudProxy.ts index a709d0a..08e53da 100644 --- a/packages/api/src/cloudProxy.ts +++ b/packages/api/src/cloudProxy.ts @@ -36,6 +36,7 @@ import {AwsCloudFormationAdapter} from './adapter-aws/AwsCloudFormationAdapter' import {AwsSecretsAdapter} from './adapter-aws/AwsSecretsAdapter' import {AwsSesAdapter} from './adapter-aws/AwsSesAdapter' import {AwsAppConfigAdapter} from './adapter-aws/AwsAppConfigAdapter' +import {AwsSnsAdapter} from './adapter-aws/AwsSnsAdapter' import {awsClientsForAccount, resolveAccountId} from './aws' import {createEc2Service} from './services/ec2' import {createEksService} from './services/eks' @@ -67,13 +68,14 @@ export function createCloudAdapterRegistry(accountId?: string | null): CloudAdap new AwsKmsAdapter(clients.kms), new AwsStepFunctionsAdapter(clients.sfn), new AwsLoadBalancingAdapter(clients.elbv2), - new AwsEventBridgeAdapter(clients.eventbridge), + new AwsEventBridgeAdapter(clients.eventbridge, clients.lambda), new AwsIamAdapter(clients.iam), new AwsApiGatewayAdapter(clients.apiGateway, clients.lambda, resolveAccountId(accountId)), new AwsCloudFormationAdapter(clients.cloudformation), new AwsSecretsAdapter(clients.secretsManager), new AwsSesAdapter(), new AwsAppConfigAdapter(clients.appConfig), + new AwsSnsAdapter(clients.sns), new AzureStorageAdapter(), new AzureServiceBusAdapter(), new AzureDatabaseAdapter(), diff --git a/packages/api/src/routes/clouds.test.ts b/packages/api/src/routes/clouds.test.ts index 70e73ae..23e1b30 100644 --- a/packages/api/src/routes/clouds.test.ts +++ b/packages/api/src/routes/clouds.test.ts @@ -17,6 +17,8 @@ import {awsKmsSchema} from '../cloud-spi/kmsSchema' import {awsStorageSchema, azureStorageSchema, gcpStorageSchema} from '../cloud-spi/storageSchema' import {awsSesEmailSchema} from '../cloud-spi/emailSchema' import {awsAppConfigSchema} from '../cloud-spi/appConfigSchema' +import {awsEventBridgeSchema} from '../cloud-spi/eventbridgeSchema' +import {awsNotificationsSchema} from '../cloud-spi/notificationsSchema' import type { AppConfigConfigurationProfile, AppConfigDeployment, @@ -99,6 +101,88 @@ function appWithRoutes( return app } +describe('EventBridge rule routes', () => { + test('routes rule lifecycle requests through the Events adapter using the event bus resource id', async () => { + const calls: Array<{operation: string; args: unknown[]}> = [] + const adapter = mockAdapter('aws', { + service: 'events', + schema: awsEventBridgeSchema, + listEventBridgeRules: async (...args) => { + calls.push({operation: 'list', args}) + return [] + }, + createEventBridgeRule: async (...args) => { + calls.push({operation: 'create', args}) + return { + name: 'hourly', busName: 'orders', busId: 'event-bus:orders', arn: null, + scheduleExpression: 'rate(1 hour)', state: 'ENABLED', targets: [], + } + }, + deleteEventBridgeRule: async (...args) => { + calls.push({operation: 'delete', args}) + }, + }) + const app = appWithRoutes([adapter]) + + const create = await app.request('/api/clouds/aws/services/events/resources/event-bus:orders/rules', { + method: 'POST', + headers: {'content-type': 'application/json'}, + body: JSON.stringify({ + name: 'hourly', scheduleExpression: 'rate(1 hour)', + targets: [{id: 'worker', arn: 'arn:aws:lambda:us-east-1:000000000000:function:worker'}], + }), + }) + expect(create.status).toBe(201) + await app.request('/api/clouds/aws/services/events/resources/event-bus:orders/rules') + const remove = await app.request('/api/clouds/aws/services/events/resources/event-bus:orders/rules/hourly', {method: 'DELETE'}) + + expect(remove.status).toBe(200) + expect(calls).toEqual([ + {operation: 'create', args: ['event-bus:orders', {name: 'hourly', scheduleExpression: 'rate(1 hour)', eventPattern: undefined, state: undefined, description: undefined, targets: [{id: 'worker', arn: 'arn:aws:lambda:us-east-1:000000000000:function:worker'}]}]}, + {operation: 'list', args: ['event-bus:orders']}, + {operation: 'delete', args: ['event-bus:orders', 'hourly']}, + ]) + }) +}) + +describe('SNS subscription routes', () => { + test('routes subscription lifecycle requests through the Notifications adapter', async () => { + const calls: Array<{operation: string; args: unknown[]}> = [] + const adapter = mockAdapter('aws', { + service: 'notifications', + schema: awsNotificationsSchema, + createSnsSubscription: async (...args) => { + calls.push({operation: 'create', args}) + return {arn: 'subscription-1', protocol: 'sqs', endpoint: 'arn:aws:sqs:us-east-1:000000000000:orders', status: 'Confirmed', filterPolicy: null} + }, + listSnsSubscriptions: async (...args) => { + calls.push({operation: 'list', args}) + return [] + }, + deleteSnsSubscription: async (...args) => { + calls.push({operation: 'delete', args}) + }, + }) + const app = appWithRoutes([adapter]) + + const create = await app.request('/api/clouds/aws/services/notifications/resources/orders/subscriptions', { + method: 'POST', + headers: {'content-type': 'application/json'}, + body: JSON.stringify({protocol: 'sqs', endpoint: 'arn:aws:sqs:us-east-1:000000000000:orders'}), + }) + expect(create.status).toBe(201) + await app.request('/api/clouds/aws/services/notifications/resources/orders/subscriptions') + const remove = await app.request('/api/clouds/aws/services/notifications/resources/orders/subscriptions/subscription-1', {method: 'DELETE'}) + + expect(remove.status).toBe(200) + expect(calls).toEqual([ + {operation: 'create', args: ['orders', {protocol: 'sqs', endpoint: 'arn:aws:sqs:us-east-1:000000000000:orders'}]}, + {operation: 'list', args: ['orders']}, + {operation: 'delete', args: ['subscription-1']}, + ]) + }) +}) + const databaseSnapshot: DatabaseSnapshot = { id: 'orders-db-snapshot-1', name: 'orders-db-snapshot-1', diff --git a/packages/api/src/routes/clouds.ts b/packages/api/src/routes/clouds.ts index ce07a77..6b26598 100644 --- a/packages/api/src/routes/clouds.ts +++ b/packages/api/src/routes/clouds.ts @@ -620,6 +620,42 @@ export function createCloudRoutes(injectedService?: CloudProxyService) { }) }) + app.get('/:cloud/services/events/resources/:id/rules', async (c) => { + const cloud = c.req.param('cloud') as CloudProvider + if (cloud !== 'aws') return c.json({error: 'Unknown cloud or service'}, 404) + return withRuntime(c, async () => c.json(await svc(c).listEventBridgeRules(cloud, c.req.param('id')))) + }) + + app.post('/:cloud/services/events/resources/:id/rules', async (c) => { + const cloud = c.req.param('cloud') as CloudProvider + if (cloud !== 'aws') return c.json({error: 'Unknown cloud or service'}, 404) + return withRuntime(c, async () => { + const input = await c.req.json>() + const rule = await svc(c).createEventBridgeRule(cloud, c.req.param('id'), { + name: typeof input.name === 'string' ? input.name : '', + scheduleExpression: typeof input.scheduleExpression === 'string' ? input.scheduleExpression : undefined, + eventPattern: typeof input.eventPattern === 'string' ? input.eventPattern : undefined, + state: input.state === 'DISABLED' ? 'DISABLED' : input.state === 'ENABLED' ? 'ENABLED' : undefined, + description: typeof input.description === 'string' ? input.description : undefined, + targets: Array.isArray(input.targets) ? input.targets.flatMap((target) => { + if (!target || typeof target !== 'object' || Array.isArray(target)) return [] + const value = target as {id?: unknown; arn?: unknown} + return typeof value.id === 'string' && typeof value.arn === 'string' ? [{id: value.id, arn: value.arn}] : [] + }) : [], + }) + return c.json(rule, 201) + }) + }) + + app.delete('/:cloud/services/events/resources/:id/rules/:ruleName', async (c) => { + const cloud = c.req.param('cloud') as CloudProvider + if (cloud !== 'aws') return c.json({error: 'Unknown cloud or service'}, 404) + return withRuntime(c, async () => { + await svc(c).deleteEventBridgeRule(cloud, c.req.param('id'), c.req.param('ruleName')) + return c.json({ok: true}) + }) + }) + app.get('/:cloud/services/serverless/resources/:id/sqs-event-source-mappings', async (c) => { const cloud = c.req.param('cloud') as CloudProvider if (cloud !== 'aws') return c.json({error: 'Unknown cloud or service'}, 404) @@ -867,6 +903,60 @@ export function createCloudRoutes(injectedService?: CloudProxyService) { }) }) + app.post('/:cloud/services/notifications/resources/:id/publish', async (c) => { + const cloud = c.req.param('cloud') as CloudProvider + if (!isCloudProvider(cloud)) return c.json({error: 'Unknown cloud'}, 404) + + return withRuntime(c, async () => { + const body = await jsonBody<{message?: unknown; subject?: unknown; messageAttributes?: unknown}>(c) + if (typeof body.message !== 'string' || !body.message) { + throw new ValidationError('message is required') + } + if (body.subject !== undefined && typeof body.subject !== 'string') { + throw new ValidationError('subject must be a string') + } + if (body.messageAttributes !== undefined && !isStringRecord(body.messageAttributes)) { + throw new ValidationError('messageAttributes must be an object of string values') + } + const result = await svc(c).publishNotification(cloud, c.req.param('id'), { + message: body.message, + ...(body.subject ? {subject: body.subject} : {}), + ...(body.messageAttributes ? {messageAttributes: body.messageAttributes} : {}), + }) + return c.json(result) + }) + }) + + app.get('/:cloud/services/notifications/resources/:id/subscriptions', async (c) => { + const cloud = c.req.param('cloud') as CloudProvider + if (!isCloudProvider(cloud)) return c.json({error: 'Unknown cloud'}, 404) + return withRuntime(c, async () => c.json(await svc(c).listSnsSubscriptions(cloud, c.req.param('id')))) + }) + + app.post('/:cloud/services/notifications/resources/:id/subscriptions', async (c) => { + const cloud = c.req.param('cloud') as CloudProvider + if (!isCloudProvider(cloud)) return c.json({error: 'Unknown cloud'}, 404) + return withRuntime(c, async () => { + const body = await jsonBody<{protocol?: unknown; endpoint?: unknown}>(c) + if (typeof body.protocol !== 'string' || !body.protocol.trim()) throw new ValidationError('protocol is required') + if (typeof body.endpoint !== 'string' || !body.endpoint.trim()) throw new ValidationError('endpoint is required') + const subscription = await svc(c).createSnsSubscription(cloud, c.req.param('id'), { + protocol: body.protocol, + endpoint: body.endpoint, + }) + return c.json(subscription, 201) + }) + }) + + app.delete('/:cloud/services/notifications/resources/:id/subscriptions/:subscriptionArn', async (c) => { + const cloud = c.req.param('cloud') as CloudProvider + if (!isCloudProvider(cloud)) return c.json({error: 'Unknown cloud'}, 404) + return withRuntime(c, async () => { + await svc(c).deleteSnsSubscription(cloud, c.req.param('subscriptionArn')) + return c.json({ok: true}) + }) + }) + app.post('/:cloud/services/kms/resources/:id/encrypt', async (c) => { const cloud = c.req.param('cloud') as CloudProvider if (!isCloudProvider(cloud)) return c.json({error: 'Unknown cloud'}, 404) @@ -984,6 +1074,13 @@ function encryptionContext(value: unknown): Record | undefined { return entries.length === 0 ? undefined : Object.fromEntries(entries) as Record } +function isStringRecord(value: unknown): value is Record { + return typeof value === 'object' + && value !== null + && !Array.isArray(value) + && Object.values(value).every((item) => typeof item === 'string') +} + function stringHeaders(value: unknown): Record { if (value === undefined) return {} if (!value || typeof value !== 'object' || Array.isArray(value)) { diff --git a/packages/api/src/routes/ec2.test.ts b/packages/api/src/routes/ec2.test.ts index 84eb3af..ccff367 100644 --- a/packages/api/src/routes/ec2.test.ts +++ b/packages/api/src/routes/ec2.test.ts @@ -12,6 +12,7 @@ import type { Ec2IpPermission, Ec2KeyPair, Ec2KeyPairMaterial, + Ec2KeyPairType, Ec2NatGateway, Ec2RouteTable, Ec2SecurityGroup, @@ -75,7 +76,7 @@ const fakeService = { getConsoleOutput: async (instanceId: string): Promise => ({instanceId, output: 'boot log'}), listAmis: async (): Promise => [], listKeyPairs: async (): Promise => [], - createKeyPair: async (name: string): Promise => ({keyPairId: 'key-0a1b2c3d4e5f6a7b', keyName: name, keyMaterial: '---PEM---'}), + createKeyPair: async (name: string, _keyType: Ec2KeyPairType = 'rsa'): Promise => ({keyPairId: 'key-0a1b2c3d4e5f6a7b', keyName: name, keyMaterial: '---PEM---'}), deleteKeyPair: async () => {}, listSecurityGroups: async (): Promise => [], createSecurityGroup: async () => ({groupId: 'sg-0a1b2c3d4e5f6a7b'}), @@ -257,6 +258,46 @@ describe('POST /key-pairs', () => { expect(body.keyName).toBe('my-key') expect(body.keyMaterial).toBe('---PEM---') }) + + test('accepts ed25519 key type', async () => { + let receivedKeyType: Ec2KeyPairType | undefined + const router = createEc2Router({...fakeService, createKeyPair: async (name: string, keyType: Ec2KeyPairType) => { + receivedKeyType = keyType + return {keyPairId: 'key-0a1b2c3d4e5f6a7b', keyName: name, keyMaterial: '---PEM---'} + }}) + const res = await router.request('/key-pairs', { + method: 'POST', + headers: {'content-type': 'application/json'}, + body: JSON.stringify({name: 'my-ed25519-key', keyType: 'ed25519'}), + }) + expect(res.status).toBe(200) + expect(receivedKeyType).toBe('ed25519') + }) + + test('defaults key type to rsa', async () => { + let receivedKeyType: Ec2KeyPairType | undefined + const router = createEc2Router({...fakeService, createKeyPair: async (name: string, keyType: Ec2KeyPairType) => { + receivedKeyType = keyType + return {keyPairId: 'key-0a1b2c3d4e5f6a7b', keyName: name, keyMaterial: '---PEM---'} + }}) + const res = await router.request('/key-pairs', { + method: 'POST', + headers: {'content-type': 'application/json'}, + body: JSON.stringify({name: 'my-rsa-key'}), + }) + expect(res.status).toBe(200) + expect(receivedKeyType).toBe('rsa') + }) + + test('rejects unsupported key types', async () => { + const res = await app.request('/key-pairs', { + method: 'POST', + headers: {'content-type': 'application/json'}, + body: JSON.stringify({name: 'my-key', keyType: 'dsa'}), + }) + expect(res.status).toBe(400) + expect((await res.json() as {error: string}).error).toBe('keyType must be rsa or ed25519') + }) }) describe('GET /internet-gateways', () => { diff --git a/packages/api/src/routes/ec2.ts b/packages/api/src/routes/ec2.ts index 7000fb6..d381792 100644 --- a/packages/api/src/routes/ec2.ts +++ b/packages/api/src/routes/ec2.ts @@ -4,6 +4,7 @@ import type { CreateAmiInput, CreateNatGatewayInput, CreateRouteInput, + Ec2KeyPairType, Ec2Tag, IpPermissionInput, RunInstanceInput, @@ -12,6 +13,11 @@ import type { import {ec2Service} from '../services/ec2' type Ec2Service = typeof ec2Service +type CreateKeyPairInput = {name: string; keyType?: Ec2KeyPairType} + +function isEc2KeyPairType(value: unknown): value is Ec2KeyPairType { + return value === 'rsa' || value === 'ed25519' +} function handleError(c: Context, error: unknown) { const msg = error instanceof Error ? error.message : 'Unknown error' @@ -124,8 +130,11 @@ export function createEc2Router(svc: Ec2Service = ec2Service) { app.post('/key-pairs', async (c) => { try { - const {name} = await c.req.json<{name: string}>() - return c.json(await svc.createKeyPair(name)) + const {name, keyType = 'rsa'} = await c.req.json() + if (!isEc2KeyPairType(keyType)) { + return c.json({error: 'keyType must be rsa or ed25519'}, 400) + } + return c.json(await svc.createKeyPair(name, keyType)) } catch (error) { return handleError(c, error) } diff --git a/packages/api/src/service/CloudProxyService.ts b/packages/api/src/service/CloudProxyService.ts index bb3e1f4..4229810 100644 --- a/packages/api/src/service/CloudProxyService.ts +++ b/packages/api/src/service/CloudProxyService.ts @@ -30,6 +30,8 @@ import type { S3LambdaTriggerOverview, EventBridgeLambdaTriggerInput, EventBridgeLambdaTriggerOverview, + EventBridgeRuleInput, + EventBridgeRuleOverview, SqsLambdaEventSourceMappingInput, SqsLambdaEventSourceMappingOverview, DatabaseSnapshot, @@ -42,6 +44,10 @@ import type { KmsEncryptInput, KmsEncryptResult, NoSqlItem, + PublishNotificationInput, + PublishNotificationResult, + SnsSubscriptionInput, + SnsSubscriptionOverview, ResourceQuery, ServerlessInvokeResult, SqlConnectionInput, @@ -310,6 +316,24 @@ export class CloudProxyService { await adapter.deleteEventBridgeLambdaTrigger(functionName, triggerId) } + async listEventBridgeRules(cloud: CloudProvider, eventBusId: string): Promise { + const adapter = this.requireAdapter(cloud, 'events') + if (!adapter.listEventBridgeRules) throw new NotSupportedError(`EventBridge rules are not supported for ${cloud}`) + return adapter.listEventBridgeRules(eventBusId) + } + + async createEventBridgeRule(cloud: CloudProvider, eventBusId: string, input: EventBridgeRuleInput): Promise { + const adapter = this.requireAdapter(cloud, 'events') + if (!adapter.createEventBridgeRule) throw new NotSupportedError(`EventBridge rules are not supported for ${cloud}`) + return adapter.createEventBridgeRule(eventBusId, input) + } + + async deleteEventBridgeRule(cloud: CloudProvider, eventBusId: string, ruleName: string): Promise { + const adapter = this.requireAdapter(cloud, 'events') + if (!adapter.deleteEventBridgeRule) throw new NotSupportedError(`EventBridge rules are not supported for ${cloud}`) + await adapter.deleteEventBridgeRule(eventBusId, ruleName) + } + async createSqsLambdaEventSourceMapping(cloud: CloudProvider, input: SqsLambdaEventSourceMappingInput): Promise { const adapter = this.requireAdapter(cloud, 'serverless') if (!adapter.createSqsLambdaEventSourceMapping) throw new NotSupportedError(`SQS Lambda event source mappings are not supported for ${cloud}`) @@ -360,6 +384,29 @@ export class CloudProxyService { if (!adapter.invoke) throw new NotSupportedError(`${cloud}/${service} invoke is not supported`) return adapter.invoke(id, payload) } + + async publishNotification(cloud: CloudProvider, topicArn: string, input: PublishNotificationInput): Promise { + const adapter = this.requireAdapter(cloud, 'notifications') + if (!adapter.publish) throw new NotSupportedError(`Publishing notifications is not supported for ${cloud}`) + return adapter.publish(topicArn, input) + } + async createSnsSubscription(cloud: CloudProvider, topicArn: string, input: SnsSubscriptionInput): Promise { + const adapter = this.requireAdapter(cloud, 'notifications') + if (!adapter.createSnsSubscription) throw new NotSupportedError(`SNS subscriptions are not supported for ${cloud}`) + return adapter.createSnsSubscription(topicArn, input) + } + + async listSnsSubscriptions(cloud: CloudProvider, topicArn: string): Promise { + const adapter = this.requireAdapter(cloud, 'notifications') + if (!adapter.listSnsSubscriptions) throw new NotSupportedError(`SNS subscriptions are not supported for ${cloud}`) + return adapter.listSnsSubscriptions(topicArn) + } + + async deleteSnsSubscription(cloud: CloudProvider, subscriptionArn: string): Promise { + const adapter = this.requireAdapter(cloud, 'notifications') + if (!adapter.deleteSnsSubscription) throw new NotSupportedError(`SNS subscriptions are not supported for ${cloud}`) + await adapter.deleteSnsSubscription(subscriptionArn) + } async listObjects(cloud: CloudProvider, service: CloudServiceType, resourceId: string, prefix?: string): Promise { const adapter = this.requireAdapter(cloud, service) if (!adapter.listObjects) throw new NotSupportedError(`Object listing is not supported for ${cloud}/${service}`) diff --git a/packages/api/src/services/ec2.test.ts b/packages/api/src/services/ec2.test.ts index 7ca5b0d..017fbde 100644 --- a/packages/api/src/services/ec2.test.ts +++ b/packages/api/src/services/ec2.test.ts @@ -214,7 +214,7 @@ describe('ec2Service key pairs', () => { expect(result).toEqual([]) }) - test('createKeyPair sends CreateKeyPairCommand and returns material', async () => { + test('createKeyPair sends CreateKeyPairCommand with the requested key type and returns material', async () => { const sent: unknown[] = [] const client: EC2Client = { send: async (cmd: unknown) => { @@ -222,12 +222,25 @@ describe('ec2Service key pairs', () => { return {KeyPairId: 'kp-1', KeyName: 'my-key', KeyMaterial: '-----BEGIN RSA-----'} }, } as unknown as EC2Client - const result = await createEc2Service(client).createKeyPair('my-key') + const result = await createEc2Service(client).createKeyPair('my-key', 'ed25519') expect(sent[0]).toBeInstanceOf(CreateKeyPairCommand) + expect((sent[0] as CreateKeyPairCommand).input).toMatchObject({KeyName: 'my-key', KeyType: 'ed25519'}) expect(result.keyName).toBe('my-key') expect(result.keyMaterial).toBe('-----BEGIN RSA-----') }) + test('createKeyPair defaults to rsa', async () => { + const sent: CreateKeyPairCommand[] = [] + const client: EC2Client = { + send: async (cmd: CreateKeyPairCommand) => { + sent.push(cmd) + return {} + }, + } as unknown as EC2Client + await createEc2Service(client).createKeyPair('my-key') + expect(sent[0].input.KeyType).toBe('rsa') + }) + test('deleteKeyPair sends DeleteKeyPairCommand', async () => { const sent: unknown[] = [] const client: EC2Client = {send: async (cmd: unknown) => { sent.push(cmd); return {} }} as unknown as EC2Client diff --git a/packages/api/src/services/ec2.ts b/packages/api/src/services/ec2.ts index 4085b10..417fb59 100644 --- a/packages/api/src/services/ec2.ts +++ b/packages/api/src/services/ec2.ts @@ -142,6 +142,8 @@ export type Ec2KeyPairMaterial = { keyMaterial: string } +export type Ec2KeyPairType = 'rsa' | 'ed25519' + export type Ec2Vpc = { vpcId: string cidrBlock: string @@ -588,8 +590,8 @@ export function createEc2Service(client: EC2Client = awsClients.ec2) { } }, - async createKeyPair(name: string): Promise { - const res = await client.send(new CreateKeyPairCommand({KeyName: name})) + async createKeyPair(name: string, keyType: Ec2KeyPairType = 'rsa'): Promise { + const res = await client.send(new CreateKeyPairCommand({KeyName: name, KeyType: keyType})) return { keyPairId: res.KeyPairId ?? '', keyName: res.KeyName ?? name, diff --git a/packages/frontend/src/api/api.ts b/packages/frontend/src/api/api.ts index 9823c24..265137d 100644 --- a/packages/frontend/src/api/api.ts +++ b/packages/frontend/src/api/api.ts @@ -22,6 +22,10 @@ export const apiEndpointKeys = { update: "clouds.services.resources.update", delete: "clouds.services.resources.delete", invoke: "clouds.services.resources.invoke", + publish: "clouds.services.resources.notifications.publish", + createSnsSubscription: "clouds.services.resources.notifications.subscription.create", + listSnsSubscriptions: "clouds.services.resources.notifications.subscriptions.list", + deleteSnsSubscription: "clouds.services.resources.notifications.subscription.delete", encrypt: "clouds.services.resources.encrypt", decrypt: "clouds.services.resources.decrypt", createApiGatewayRoute: "clouds.services.resources.apigateway.route.create", @@ -33,7 +37,10 @@ export const apiEndpointKeys = { deleteS3LambdaTrigger: "clouds.services.resources.storage.lambda-trigger.delete", createEventBridgeLambdaTrigger: "clouds.services.resources.serverless.eventbridge-trigger.create", listEventBridgeLambdaTriggers: "clouds.services.resources.serverless.eventbridge-triggers.list", - deleteEventBridgeLambdaTrigger: "clouds.services.resources.serverless.eventbridge-trigger.delete", + deleteEventBridgeLambdaTrigger: "clouds.services.resources.serverless.eventbridge-trigger.delete", + createEventBridgeRule: "clouds.services.resources.events.rule.create", + listEventBridgeRules: "clouds.services.resources.events.rules.list", + deleteEventBridgeRule: "clouds.services.resources.events.rule.delete", createSqsLambdaEventSourceMapping: "clouds.services.resources.serverless.sqs-event-source-mapping.create", listSqsLambdaEventSourceMappings: "clouds.services.resources.serverless.sqs-event-source-mappings.list", deleteSqsLambdaEventSourceMapping: "clouds.services.resources.serverless.sqs-event-source-mapping.delete", @@ -297,7 +304,7 @@ export const endpointRegistry: EndpointRegistry = new Map([ }, ], [ - apiEndpointKeys.clouds.resources.invoke, + apiEndpointKeys.clouds.resources.invoke, { path: "/clouds/:cloud/services/:service/resources/:id/invoke", method: "POST", @@ -312,6 +319,38 @@ export const endpointRegistry: EndpointRegistry = new Map([ telemetry: { service: "apigateway" }, }, ], + [ + apiEndpointKeys.clouds.resources.publish, + { + path: "/clouds/:cloud/services/notifications/resources/:id/publish", + method: "POST", + telemetry: { service: "notifications" }, + }, + ], + [ + apiEndpointKeys.clouds.resources.createSnsSubscription, + { + path: "/clouds/:cloud/services/notifications/resources/:id/subscriptions", + method: "POST", + telemetry: { service: "notifications" }, + }, + ], + [ + apiEndpointKeys.clouds.resources.listSnsSubscriptions, + { + path: "/clouds/:cloud/services/notifications/resources/:id/subscriptions", + method: "GET", + telemetry: { service: "notifications" }, + }, + ], + [ + apiEndpointKeys.clouds.resources.deleteSnsSubscription, + { + path: "/clouds/:cloud/services/notifications/resources/:id/subscriptions/:subscriptionArn", + method: "DELETE", + telemetry: { service: "notifications" }, + }, + ], [ apiEndpointKeys.clouds.resources.listApiGatewayRoutes, { @@ -384,6 +423,30 @@ export const endpointRegistry: EndpointRegistry = new Map([ telemetry: { service: "serverless" }, }, ], + [ + apiEndpointKeys.clouds.resources.createEventBridgeRule, + { + path: "/clouds/:cloud/services/events/resources/:id/rules", + method: "POST", + telemetry: { service: "events" }, + }, + ], + [ + apiEndpointKeys.clouds.resources.listEventBridgeRules, + { + path: "/clouds/:cloud/services/events/resources/:id/rules", + method: "GET", + telemetry: { service: "events" }, + }, + ], + [ + apiEndpointKeys.clouds.resources.deleteEventBridgeRule, + { + path: "/clouds/:cloud/services/events/resources/:id/rules/:ruleName", + method: "DELETE", + telemetry: { service: "events" }, + }, + ], [ apiEndpointKeys.clouds.resources.createSqsLambdaEventSourceMapping, { diff --git a/packages/frontend/src/api/aws/ec2.api.ts b/packages/frontend/src/api/aws/ec2.api.ts index 60fadd2..68665ef 100644 --- a/packages/frontend/src/api/aws/ec2.api.ts +++ b/packages/frontend/src/api/aws/ec2.api.ts @@ -77,6 +77,8 @@ export type Ec2KeyPairMaterial = { keyMaterial: string; }; +export type Ec2KeyPairType = "rsa" | "ed25519"; + export type Ec2Vpc = { vpcId: string; cidrBlock: string; @@ -344,10 +346,10 @@ export async function listEc2KeyPairs(signal?: AbortSignal): Promise { - const res = await apiClient.call( +export async function createEc2KeyPair(name: string, keyType: Ec2KeyPairType = "rsa"): Promise { + const res = await apiClient.call( apiEndpointKeys.aws.ec2.keyPairs.create, - { body: JSON.stringify({ name }), headers: { "content-type": "application/json" } }, + { body: { name, keyType } }, ); return res.data; } diff --git a/packages/frontend/src/api/cloudProxyClient.ts b/packages/frontend/src/api/cloudProxyClient.ts index d2cd720..575efa0 100644 --- a/packages/frontend/src/api/cloudProxyClient.ts +++ b/packages/frontend/src/api/cloudProxyClient.ts @@ -204,6 +204,16 @@ export interface ServerlessInvokeResult { executionDuration?: number; } +export interface PublishNotificationInput { + message: string; + subject?: string; + messageAttributes?: Record; +} + +export interface PublishNotificationResult { + messageId: string | null; +} + export interface CreateApiGatewayLambdaRouteInput { path: string; method: string; @@ -268,6 +278,19 @@ export interface S3LambdaTriggerOverview { suffix: string | null; } +export interface CreateSnsSubscriptionInput { + protocol: string; + endpoint: string; +} + +export interface SnsSubscriptionOverview { + arn: string | null; + protocol: string; + endpoint: string; + status: "Confirmed" | "PendingConfirmation"; + filterPolicy: string | null; +} + export interface CreateEventBridgeLambdaTriggerInput { ruleName: string; scheduleExpression: string; @@ -283,6 +306,27 @@ export interface EventBridgeLambdaTriggerOverview { state: string | null; } +export interface EventBridgeRuleTarget { + id: string; + arn: string; +} + +export interface CreateEventBridgeRuleInput { + name: string; + scheduleExpression?: string; + eventPattern?: string; + state?: "ENABLED" | "DISABLED"; + description?: string; + targets: EventBridgeRuleTarget[]; +} + +export interface EventBridgeRuleOverview extends CreateEventBridgeRuleInput { + busName: string; + busId: string; + arn: string | null; + state: "ENABLED" | "DISABLED"; +} + export interface CreateSqsLambdaEventSourceMappingInput { queueArn: string; batchSize?: number; @@ -393,6 +437,46 @@ export async function deleteS3LambdaTrigger( ); } +export async function createSnsSubscription( + cloud: CloudProvider, + topicArn: string, + input: CreateSnsSubscriptionInput, + signal?: AbortSignal, +): Promise { + const res = await apiClient.call( + apiEndpointKeys.clouds.resources.createSnsSubscription, + requestOptions(cloud, "notifications", {signal, body: input}), + {cloud, id: topicArn}, + ); + return res.data; +} + +export async function listSnsSubscriptions( + cloud: CloudProvider, + topicArn: string, + signal?: AbortSignal, +): Promise { + const res = await apiClient.call( + apiEndpointKeys.clouds.resources.listSnsSubscriptions, + requestOptions(cloud, "notifications", {signal}), + {cloud, id: topicArn}, + ); + return res.data; +} + +export async function deleteSnsSubscription( + cloud: CloudProvider, + topicArn: string, + subscriptionArn: string, + signal?: AbortSignal, +): Promise { + await apiClient.call( + apiEndpointKeys.clouds.resources.deleteSnsSubscription, + requestOptions(cloud, "notifications", {signal}), + {cloud, id: topicArn, subscriptionArn}, + ); +} + export async function createEventBridgeLambdaTrigger( cloud: CloudProvider, functionName: string, @@ -433,6 +517,46 @@ export async function deleteEventBridgeLambdaTrigger( ); } +export async function createEventBridgeRule( + cloud: CloudProvider, + eventBusId: string, + input: CreateEventBridgeRuleInput, + signal?: AbortSignal, +): Promise { + const res = await apiClient.call( + apiEndpointKeys.clouds.resources.createEventBridgeRule, + requestOptions(cloud, "events", {signal, body: input}), + {cloud, id: eventBusId}, + ); + return res.data; +} + +export async function listEventBridgeRules( + cloud: CloudProvider, + eventBusId: string, + signal?: AbortSignal, +): Promise { + const res = await apiClient.call( + apiEndpointKeys.clouds.resources.listEventBridgeRules, + requestOptions(cloud, "events", {signal}), + {cloud, id: eventBusId}, + ); + return res.data; +} + +export async function deleteEventBridgeRule( + cloud: CloudProvider, + eventBusId: string, + ruleName: string, + signal?: AbortSignal, +): Promise { + await apiClient.call( + apiEndpointKeys.clouds.resources.deleteEventBridgeRule, + requestOptions(cloud, "events", {signal}), + {cloud, id: eventBusId, ruleName}, + ); +} + export async function createSqsLambdaEventSourceMapping( cloud: CloudProvider, functionName: string, @@ -525,6 +649,20 @@ export async function invokeCloudResource( return res.data; } +export async function publishNotification( + cloud: CloudProvider, + topicArn: string, + input: PublishNotificationInput, + signal?: AbortSignal, +): Promise { + const res = await apiClient.call( + apiEndpointKeys.clouds.resources.publish, + requestOptions(cloud, "notifications", { signal, body: input }), + { cloud, id: topicArn }, + ); + return res.data; +} + export async function encryptKmsResource( cloud: CloudProvider, id: string, diff --git a/packages/frontend/src/components/ComputePanel.tsx b/packages/frontend/src/components/ComputePanel.tsx index 7166389..1d925a4 100644 --- a/packages/frontend/src/components/ComputePanel.tsx +++ b/packages/frontend/src/components/ComputePanel.tsx @@ -1,4 +1,4 @@ -import { type FormEvent, useState } from 'react' +import { useState } from 'react' import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query' import { AlertTriangle, @@ -10,6 +10,7 @@ import { RefreshCw, RotateCcw, Save, + Search, Terminal, Trash2, X, @@ -17,6 +18,7 @@ import { import { authorizeEc2SecurityGroupIngress, createEc2Ami, + createEc2KeyPair, createEc2SecurityGroup, deregisterEc2Ami, describeEc2Instance, @@ -42,6 +44,10 @@ import { import { createCloudResource } from '@/api/cloudProxyClient' import type { CloudProvider } from '@/types/cloud' import type { CloudResource } from '@/types/resource' +import amazonLinuxImage from '../../../../OS_img/amazon_Linux.png' +import debianImage from '../../../../OS_img/Debian_linux.png' +import redHatImage from '../../../../OS_img/red-hat-logo.png' +import ubuntuImage from '../../../../OS_img/Ubuntu_Linux.png' // ─── Props ──────────────────────────────────────────────────────────────────── @@ -343,11 +349,16 @@ function InstancePanel({ instanceId }: { instanceId: string }) { const query = useQuery({ queryKey: ['ec2', 'instance', instanceId], queryFn: ({ signal }) => describeEc2Instance(instanceId, signal), + refetchInterval: (query) => { + const state = query.state.data?.state + return state === 'pending' || state === 'stopping' || state === 'shutting-down' ? 1_500 : false + }, }) const invalidate = () => { void qc.invalidateQueries({ queryKey: ['ec2', 'instance', instanceId] }) void qc.invalidateQueries({ queryKey: ['ec2', 'instances'] }) + void qc.invalidateQueries({ queryKey: ['cloud-resources', 'aws', 'compute'] }) } const startMut = useMutation({ @@ -678,6 +689,32 @@ export function ComputePanel({ cloud, resource, runtimeReachable }: ComputePanel type InboundRule = { id: string; protocol: string; portInput: string; cidr: string } +type LaunchStep = 1 | 2 | 3 | 4 + +type AmiFamily = 'amazon-linux' | 'fedora' | 'ubuntu' | 'red-hat' | 'debian' | 'suse' | 'other' + +type AmiClassification = { family: AmiFamily; label: string; mark: string; color: string } + +function classifyAmi(ami: Ec2Image): AmiClassification { + const metadata = `${ami.name} ${ami.description ?? ''} ${ami.platform ?? ''}`.toLowerCase() + if (metadata.includes('ubuntu')) return { family: 'ubuntu', label: 'Ubuntu', mark: 'U', color: '#e95420' } + if (metadata.includes('amazon linux') || metadata.includes('amzn')) return { family: 'amazon-linux', label: 'Amazon Linux', mark: 'A', color: '#ff9900' } + if (metadata.includes('fedora')) return { family: 'fedora', label: 'Fedora', mark: 'F', color: '#51a2da' } + if (metadata.includes('red hat') || metadata.includes('rhel')) return { family: 'red-hat', label: 'Red Hat', mark: 'R', color: '#ee0000' } + if (metadata.includes('debian')) return { family: 'debian', label: 'Debian', mark: 'D', color: '#a80030' } + if (metadata.includes('suse')) return { family: 'suse', label: 'SUSE', mark: 'S', color: '#30ba78' } + return { family: 'other', label: ami.platform || 'Other', mark: '?', color: 'var(--text-2)' } +} + +const QUICK_START_AMIS: Array<{ family: Exclude; label: string; image: string; preferredImageId?: string }> = [ + { family: 'amazon-linux', label: 'Amazon Linux 2023', image: amazonLinuxImage, preferredImageId: 'ami-0abcdef1234567891' }, + { family: 'fedora', label: 'Fedora', image: 'data:image/svg+xml,%3Csvg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64"%3E%3Crect width="64" height="64" rx="8" fill="%2351a2da"/%3E%3Ctext x="32" y="43" text-anchor="middle" font-family="Arial" font-size="34" font-weight="bold" fill="white"%3EF%3C/text%3E%3C/svg%3E' }, + { family: 'ubuntu', label: 'Ubuntu', image: ubuntuImage }, + { family: 'suse', label: 'openSUSE', image: 'data:image/svg+xml,%3Csvg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64"%3E%3Crect width="64" height="64" rx="8" fill="%2330ba78"/%3E%3Ctext x="32" y="43" text-anchor="middle" font-family="Arial" font-size="30" font-weight="bold" fill="white"%3ES%3C/text%3E%3C/svg%3E' }, + { family: 'red-hat', label: 'Red Hat', image: redHatImage }, + { family: 'debian', label: 'Debian', image: debianImage }, +] + const SG_PRESETS: Array<{ label: string; protocol: string; portInput: string; cidr: string }> = [ { label: 'SSH', protocol: 'tcp', portInput: '22', cidr: '0.0.0.0/0' }, { label: 'HTTP', protocol: 'tcp', portInput: '80', cidr: '0.0.0.0/0' }, @@ -714,18 +751,23 @@ export function LaunchInstanceForm({ onCancel: () => void }) { const qc = useQueryClient() - - // Instance fields + const [step, setStep] = useState(1) + const [stepError, setStepError] = useState('') const [name, setName] = useState('') const [imageId, setImageId] = useState(selectedResource?.type === 'image' ? selectedResource.id : '') + const [architectureFilter, setArchitectureFilter] = useState('') + const [amiSearch, setAmiSearch] = useState('') + const [showAmiBrowser, setShowAmiBrowser] = useState(false) const [instanceType, setInstanceType] = useState('t3.micro') - - // Networking fields const [keyName, setKeyName] = useState('') + const [keyPairMode, setKeyPairMode] = useState<'existing' | 'new'>('existing') + const [newKeyName, setNewKeyName] = useState('') + const [newKeyType, setNewKeyType] = useState<'rsa' | 'ed25519'>('rsa') + const [createdKeyMaterial, setCreatedKeyMaterial] = useState<{ name: string; material: string }>() + const [rootVolumeSize, setRootVolumeSize] = useState('20') + const [rootVolumeType, setRootVolumeType] = useState('gp3') const [subnetId, setSubnetId] = useState('') const [selectedSgs, setSelectedSgs] = useState([]) - - // Inline SG creation const [showCreateSg, setShowCreateSg] = useState(false) const [newSgName, setNewSgName] = useState('') const [newSgDesc, setNewSgDesc] = useState('') @@ -756,6 +798,15 @@ export function LaunchInstanceForm({ }, }) + const createKeyMut = useMutation({ + mutationFn: () => createEc2KeyPair(newKeyName.trim(), newKeyType), + onSuccess: (keyPair) => { + setKeyName(keyPair.keyName) + setCreatedKeyMaterial({ name: keyPair.keyName, material: keyPair.keyMaterial }) + void qc.invalidateQueries({ queryKey: ['ec2', 'key-pairs'] }) + }, + }) + const createSgMut = useMutation({ mutationFn: async (vars: {name: string; desc: string; vpc: string; rules: InboundRule[]}) => { const { groupId } = await createEc2SecurityGroup(vars.name, vars.desc || vars.name, vars.vpc || undefined) @@ -793,8 +844,7 @@ export function LaunchInstanceForm({ setSelectedSgs((prev) => checked ? [...prev, groupId] : prev.filter((id) => id !== groupId)) } - function submit(e: FormEvent) { - e.preventDefault() + function launch() { createMut.mutate({ name, imageId, @@ -802,9 +852,34 @@ export function LaunchInstanceForm({ keyName: keyName || undefined, subnetId: subnetId || undefined, securityGroupIds: selectedSgs.length ? selectedSgs.join(',') : undefined, + rootVolumeSize, + rootVolumeType, }) } + function nextStep() { + if (step === 1 && (!name.trim() || !imageId)) { + setStepError('Enter an instance name and select an AMI to continue.') + return + } + if (step === 2 && keyPairMode === 'new' && !keyName) { + setStepError('Create the new key pair before continuing, or choose an existing key pair.') + return + } + setStepError('') + setStep((current) => Math.min(4, current + 1) as LaunchStep) + } + + function downloadPrivateKey() { + if (!createdKeyMaterial) return + const href = URL.createObjectURL(new Blob([createdKeyMaterial.material], { type: 'application/x-pem-file' })) + const link = document.createElement('a') + link.href = href + link.download = `${createdKeyMaterial.name}.pem` + link.click() + URL.revokeObjectURL(href) + } + const vpcs = vpcsQ.data ?? [] const subnets = subsQ.data ?? [] const groupByVpc = vpcs.length > 2 @@ -814,75 +889,148 @@ export function LaunchInstanceForm({ return tag ? `${tag} (${vpc.vpcId})` : vpc.vpcId } + const amis = amisQ.data ?? [] + const architectures = [...new Set(amis.map((ami) => ami.architecture).filter((architecture): architecture is string => Boolean(architecture)))].sort() + const filteredAmis = amis.filter((ami) => !architectureFilter || ami.architecture === architectureFilter) + const quickStartAmis = QUICK_START_AMIS.map((catalogAmi) => ({ + ...catalogAmi, + ami: filteredAmis.find((candidate) => candidate.imageId === catalogAmi.preferredImageId) + ?? filteredAmis.find((candidate) => classifyAmi(candidate).family === catalogAmi.family), + })) + const quickStartImageIds = new Set(quickStartAmis.flatMap((catalogAmi) => catalogAmi.ami ? [catalogAmi.ami.imageId] : [])) + const normalizedAmiSearch = amiSearch.trim().toLowerCase() + const visibleQuickStartAmis = quickStartAmis.filter((catalogAmi) => { + const searchable = `${catalogAmi.label} ${catalogAmi.ami?.imageId ?? ''} ${catalogAmi.ami?.name ?? ''} ${catalogAmi.ami?.description ?? ''}`.toLowerCase() + return !normalizedAmiSearch || searchable.includes(normalizedAmiSearch) + }) + const browsableAmis = filteredAmis.filter((ami) => { + const searchable = `${ami.imageId} ${ami.name} ${ami.description ?? ''} ${classifyAmi(ami).label}`.toLowerCase() + return !quickStartImageIds.has(ami.imageId) && (!normalizedAmiSearch || searchable.includes(normalizedAmiSearch)) + }) + const selectedAmi = amis.find((ami) => ami.imageId === imageId) + const selectedSubnet = subnets.find((subnet) => subnet.subnetId === subnetId) + const selectedGroups = (sgsQ.data ?? []).filter((group) => selectedSgs.includes(group.groupId)) + const steps: Array<{ number: LaunchStep; label: string }> = [ + { number: 1, label: 'Name and AMI' }, + { number: 2, label: 'Instance and key pair' }, + { number: 3, label: 'Network and security' }, + { number: 4, label: 'Storage and review' }, + ] + return ( -