From 5c8aa80b24d0bfb83fa423f0e0f721d808c54478 Mon Sep 17 00:00:00 2001 From: Hugo Averty Date: Sun, 14 Jun 2020 11:32:15 +0200 Subject: [PATCH 001/313] Add story of Leymah to landing page --- .gitignore | 3 +- website/dist/index.html | 147 ++++++++++++++++++ website/dist/static/images/playicon.png | Bin 0 -> 684 bytes .../dist/static/images/story/Story-map-1.png | Bin 0 -> 740989 bytes website/dist/static/images/story/bird.gif | Bin 0 -> 912 bytes .../static/images/story/character-static.png | Bin 0 -> 4495 bytes .../images/story/character-walk-right.gif | Bin 0 -> 6658 bytes .../story/bubble-border-bottom-left.png | Bin 0 -> 500 bytes .../story/bubble-border-bottom-right.png | Bin 0 -> 628 bytes website/src/images/story/bubble-revert.png | Bin 0 -> 2450 bytes website/src/images/story/bubble.png | Bin 0 -> 2460 bytes website/src/images/story/mountains.png | Bin 0 -> 80925 bytes website/src/images/story/sky.jpg | Bin 0 -> 584031 bytes website/src/sass/styles.scss | 133 ++++++++++++++++ 14 files changed, 282 insertions(+), 1 deletion(-) create mode 100644 website/dist/static/images/playicon.png create mode 100644 website/dist/static/images/story/Story-map-1.png create mode 100644 website/dist/static/images/story/bird.gif create mode 100644 website/dist/static/images/story/character-static.png create mode 100644 website/dist/static/images/story/character-walk-right.gif create mode 100644 website/src/images/story/bubble-border-bottom-left.png create mode 100644 website/src/images/story/bubble-border-bottom-right.png create mode 100644 website/src/images/story/bubble-revert.png create mode 100644 website/src/images/story/bubble.png create mode 100644 website/src/images/story/mountains.png create mode 100644 website/src/images/story/sky.jpg diff --git a/.gitignore b/.gitignore index 7931b7a2..659dab86 100644 --- a/.gitignore +++ b/.gitignore @@ -2,4 +2,5 @@ .idea .vagrant Vagrantfile -docker-compose.override.yaml \ No newline at end of file +docker-compose.override.yaml +*.DS_Store \ No newline at end of file diff --git a/website/dist/index.html b/website/dist/index.html index 003fa5fe..5ba80321 100644 --- a/website/dist/index.html +++ b/website/dist/index.html @@ -56,6 +56,9 @@ window.location.assign(playUrl); } + + + @@ -108,6 +111,150 @@
+
+
+
+ + +
+ + + + + + + + +
+
+
+

Hello,

+

I'm Leymah of WorkAdventure !

+

During COVID, everybody were far from each other.

+
+
+
+
+

So, my developper’s team decide to build a plateform to keep proximity.

+

This is how I’m born.

+
+
+
+
+

With WorkAdventure, you can meet people and discuss with them.

+

To try, press button public mode

+

+ + START IN PUBLIC MODE +

+
+
+
+
+

You can also create a private room with your friends or your team !

+

To try, press button private mode

+

+ + START IN PRIVATE MODE +

+
+
+ + +
+

diff --git a/website/dist/static/images/playicon.png b/website/dist/static/images/playicon.png new file mode 100644 index 0000000000000000000000000000000000000000..0b318c8d1fdc00a12ab399f77fa27e793205e0f4 GIT binary patch literal 684 zcmeAS@N?(olHy`uVBq!ia0vp^B0wz4!N$PAXn5(L9gxG4?&#~tz_78O`%fY(kZ+M1 z;hE;^%b*2hb1*QrXELw=S&Tp|1;h*tObeLcA|eZz;cQWmDr?mB3&9`VNrMIC!9Kb z%t1ja;7s?$I}a800|N{T=iaQHo%6};7zhu7m@qj}Gn}5O{?#3n}zgs=Kh1jhY_-Kjf zeb6~-^Gg5PLc<=%IhSSr_5ORuwPlU>oE?EI&-P_Co_u2UpedW?v=7WJ~i6PAE%WS?Ar1bP0l+XkKS_U8% literal 0 HcmV?d00001 diff --git a/website/dist/static/images/story/Story-map-1.png b/website/dist/static/images/story/Story-map-1.png new file mode 100644 index 0000000000000000000000000000000000000000..e401c172ffae1be9c6edfcd2c2db6dd95c1f0a3d GIT binary patch literal 740989 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

?7WyroUn1iY|o?*?C&9t1Z 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%0Aw3?p6=!sGGf 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 literal 0 HcmV?d00001 diff --git a/website/src/images/story/sky.jpg b/website/src/images/story/sky.jpg new file mode 100644 index 0000000000000000000000000000000000000000..75e590a8f0c94367a37a11e662aa2c20c1f68e5e GIT binary patch literal 584031 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 tIvqT6I2N&ooetIEGh}crRSR~~C&G4zQR2X) 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�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

2ORh{b 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⁡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

  • *`uo;x28hmr(zGIEF21imn2Yt~5%#HtK~$m` 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 literal 0 HcmV?d00001 diff --git a/website/src/sass/styles.scss b/website/src/sass/styles.scss index ea791a73..f698c150 100644 --- a/website/src/sass/styles.scss +++ b/website/src/sass/styles.scss @@ -125,6 +125,7 @@ header { } } .custom-link{ + cursor: pointer; font-family: "VCR OSD Mono"; font-size: 1.125rem; letter-spacing: 5px; @@ -208,6 +209,138 @@ img{ } } +.story-wrapper { + background: white; + position: relative; + min-height: calc(672px + 75px); + padding-top: 75px; + width: 100%; + overflow: hidden; + @include media-breakpoint-down(sm) { + display: none; + } + img { + max-width: none; + } + .sky { + z-index: 1; + position: absolute; + top: 0; + width: 100%; + height: 242px; + background: url(../images/story/sky.jpg) repeat-x top left; + } + .mountains { + z-index: 5; + position: absolute; + bottom: 200px; + width: calc(100% + 200px); + height: 242px; + background: url(../images/story/mountains.png) repeat-x top center; + } + .story-1 { + position: absolute; + z-index: 10; + left: 0; + overflow: hidden; + } + .character { + position: absolute; + z-index: 15; + bottom: 75px; + left: 0; + right: 0; + margin: auto; + } + .birds { + position: absolute; + z-index: 20; + right: -200px; + $birds: 8; + @for $i from 1 through $birds { + @keyframes fly-#{$i} { + 0% { + transform: translate(0px, 0px); + } + 25% { + transform: translate(#{25+random(50)}px, #{10+random(35)}px); + } + 50% { + transform: translate(#{25+random(50)}px, #{10+random(35)}px); + } + 75% { + transform: translate(#{25+random(50)}px, #{10+random(35)}px); + } + 100% { + transform: translate(#{25+random(50)}px, #{10+random(35)}px); + } + } + .bird-#{$i} { + margin: 0 #{random(7)}vw; + transition-timing-function: cubic-bezier(0.150, -0.600, 0.155, 1.650); + animation-duration: 15s; + animation-name: fly-#{$i}; + animation-iteration-count: infinite; + animation-direction: alternate; + } + } + } + .bubble { + color: black; + position: absolute; + z-index: 25; + bottom: 160px; + left: 263px; + right: -50px; + margin: auto; + opacity: 0; + height: 151px; + width: 289px; + line-height: 22px; + padding: 5px; + background: black; + transform: translateY(25px); + & > div { + padding: 15px 15px 30px; + position: relative; + width: 100%; + height: 100%; + background: white; + &:before { + content: ""; + position: absolute; + background: url(../images/story/bubble-border-bottom-left.png) no-repeat bottom left; + left: -4px; + width: 28px; + height: 25px; + bottom: -20px; + } + p { + &.bubble-legend { + font-size: 12px; + color: grey; + margin: 0; + } + &.bubble-action { + cursor: pointer; + text-decoration: underline + } + + } + } + &.b-revert { + left: -363px; + & > div:before { + left: auto; + right: -4px; + background: url(../images/story/bubble-border-bottom-right.png) no-repeat bottom left; + } + } + } +} +.pin-spacer { + background: white; +} .section{ padding-top: 2rem; padding-bottom: 5rem; From 81630979c73474b9642662ed15aba3f73c41f067 Mon Sep 17 00:00:00 2001 From: Hugo Averty Date: Sun, 14 Jun 2020 11:50:06 +0200 Subject: [PATCH 002/313] Fix images missing --- website/dist/index.html | 2 +- .../dist/static/images/story/Story-map-1.png | Bin 740989 -> 0 bytes 2 files changed, 1 insertion(+), 1 deletion(-) delete mode 100644 website/dist/static/images/story/Story-map-1.png diff --git a/website/dist/index.html b/website/dist/index.html index 5ba80321..509bfa10 100644 --- a/website/dist/index.html +++ b/website/dist/index.html @@ -114,7 +114,7 @@
    - +
    diff --git a/website/dist/static/images/story/Story-map-1.png b/website/dist/static/images/story/Story-map-1.png deleted file mode 100644 index e401c172ffae1be9c6edfcd2c2db6dd95c1f0a3d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 740989 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

    ?7WyroUn1iY|o?*?C&9t1Z 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%0Aw3?p6=!sGGf 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%0AJG5N=LSu?yh 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 Date: Sun, 14 Jun 2020 11:59:25 +0200 Subject: [PATCH 003/313] Fix images missing --- website/dist/index.html | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/website/dist/index.html b/website/dist/index.html index 509bfa10..8e68cca6 100644 --- a/website/dist/index.html +++ b/website/dist/index.html @@ -92,13 +92,13 @@

    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

    @@ -114,7 +114,7 @@
    - +
    From f9ff8d7ddcdfbce2193521f07e9303eb838c52cd Mon Sep 17 00:00:00 2001 From: Hugo Averty Date: Sun, 14 Jun 2020 12:02:46 +0200 Subject: [PATCH 004/313] Fix images missing --- .../dist/static/images/story/story-map-bg.png | Bin 0 -> 740989 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 website/dist/static/images/story/story-map-bg.png diff --git a/website/dist/static/images/story/story-map-bg.png b/website/dist/static/images/story/story-map-bg.png new file mode 100644 index 0000000000000000000000000000000000000000..e401c172ffae1be9c6edfcd2c2db6dd95c1f0a3d GIT binary patch literal 740989 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

    ?7WyroUn1iY|o?*?C&9t1Z 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%0Aw3?p6=!sGGf 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
  • txdD7oYPpKZ^%ei3m30dVIK*=!bI$ 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 z zmT;z6vaZ4J)tEw}3A7(oDpU%}t3f>pg$fLE0hHXbsAorw!H;KC6_>f-ywhrfwr5KQ zt!Bm997;^XUAOk!^GG{Po1l|-h7VodwN6F{iCyAw`E5TWeEnO;b}9w%K|$v3V({$f z+D5Op?a)|BxR+>3f%?W3OF-C%<$g|0<7eGYzBYQIXwv%1p=T;8*N(Ff3}24?)n&+Vnq!{j0+6w~0I@!XQO$MJN;u0{2tgq2P1>sboAK*egTj-1v&TJhA92~<(O zA+-k33k&FJ-k-U+ceUl`ZK)UZ(0Ew2e06k0mKuNSXY8LBHwLOd6wRi2NaeIav*1$V zr|4_9F4%F(T0wj)IjDMW5){rQ(G+a4ci5Sz~cF!gn zn>M(>7$(VoMHUutWrlW~8c^~WFJi;T-+Qx@7#X{&OFnRpG2u;Ca$HSUaat`IOBWOI zHeK~PzMS6I7IO>4++3)r6q(h8__m#IpICyMHYayX?I~B4r`Yu@6t_IyI8rM_fj4Wk zw~f7d>c$}kI)6Dbc{IzG-yW#aaP)nop{eO|v_QAtRQ7!6KT;Maw1<^5>CvYiO`1>N z?D<#Hha%Z8PMs_v=(|lBv8-8;CVDVS)vI)sc@y5P5c#{m8r&Zbe+@JhM!U*LKB!nx zQNecNe*ehP73{|;)h-VTq6GvY3+2CDFTi^q-*%#nT#lGSWyVyVlOKh3hqCNeWEPp9 zMC(jCH%`G5G{y|vB4PZKTBE+lAC2_BCl*H=%~ah-Ao3~P!NFjv?_X6E^VXjAc*#hz zsTpRi%H&uXSc|H9U|(;LpKJ@2m*!Z2kPv`Ds&L0S@2Kw_MQdpI|7i^_|DV<%vrcv; ziEU$zk-B48)}L5KEFaS!1CGT%$AYJIMw&1$FW&uy=MM+{>Q)M3a6Dr>#{lOWed;^f z#b>5#O^A?5p@7olK~bOQ7tKUAAWlKxu1P9bKn(yeMFKq#cr632wQ4XTLD0B%O~0|B z(`4-=1RoYPtG3;i?qb;#SZvmH48qSE4gxEx(EIcl2at@`YvSNbP{*Zk_h+W9MkjQ5dH07yWSG_ zZ6HayU%^MREQYM3G9}PoBdRkYY2nKQG~c?-O>aFCU)?m6BkW!~E(G)`DX26>Yp0^m z>x@W#dKteg{G5$hvbEdfB|6FItui~+aNMUtswSYse@dT$-nD_HOKG#i+JQQeEsmrx z?r*`*Nz~ZNV6NQ9d#33{u8Cv3v*kA2ld?&4r=8d97R|E5>}WPsIwnQ$``+AV+ajWc`z*2hWM&^^EvHwjlYM=!91{BZD{>bv(A0Phf!fszJ)|KZ6P2% zhCOw0$=u!FZ*??v*`>p$ALs@_;kea~$EsT?NI2i6Ah(VA1ntS8DgF9z@(P?9rn=oW z?3w?oeO&xd`BN3a;_5-wr+7#m_t5_gCSa1Xb zdbSGZ7EZX;za*=rNJ*N6YPBkfShq^76r4BPxlcOj3$%c zuNV30?kLG@47uV2y=_|A|IT`4Lj|#lyeZAD;H#%6T|bYa$(7Ur9GzU^(YAZsad3T* zn6!4)RPDCQ?DH=!kO~}DF2CeAy^bSifi=IL3+!n?5olv{uBoWZ_RC)7M+*V!T^m@> zLy@&jw)a=V5q247L^nGea@@~_!NI`;kr$Hz|svX~@QH>EiXxucF z{k1k!)c6ziFc6f|G}~vh6m4sU`*%&C{FC_N;?P=O!mYuHBIbIUyQY?bY~7Ub433x= z83Bc2JlZ2nH=`FB8TPfAIE_&Vj3UL>v!mksKsEU}xOb z(D4$jZ#ySok3o#R%Y>p#xMf=o)BmpXKXZdjqnAGUPW-s)xLp$shaoZXqWb^82|FtH}>)1_sU8=^&b_QLA!DP7^T=*OoYbI zR(%3Xl$%Zj47?C6r?y9KD_%+Ry#h{n;9&1SFvs$LlxN39O>{K4?njGdk@?1~$L#Y4 ziZBlfr!EuX;#p}q-k zbgcOfGZbU-*wQxFYOJu&-=NSylM7GhCvRfDiW^>*>@fS2alLw~5dy=j`pzI=wY^$RU-4%6T&3h@Cb zi3l!RY+dH-|6A*x3cJM=s^i;LN5tgig^8u>=gr#Q*=VQ1(=pEmP|~&!r=tJBCFrc( zxVUrmfnzVL8emWVU3;mNn-}OGa%(ULKQWXNBt30qQ|q_>F0HD6G&_l}-Ep_K>ur02 zH>KgD&j1f#C;Im??!8L1HoKz_juOrlH(oQ3r{(uw>nbt!oqvidUSSg~rf8i1r$@|N za8mS$lMRnsDk{)&8sG!(1V^)65O^0qe`>AJteIxjGKg{OVzE6*+5LCzim}WvigHlD zu(l&7z$q@4ldQ8d>Q;4gcBc0mW$6*ULjJCF#~;yaIGOU7LsPavrN09|b)=UG`tiQI3IAy&)FmU@MieqTiEP_E?#(4E((b-gU7@Hu^TyrnFot|qvQ^0#{4tth zSPb1kJXh}-Db?Q@ z@r#%{f6!5W4Y@AyRd?Ot95uzm3{(zMO4Ge=Ow&1wvdsr?!Ugkv!)e)5e--2?0<`zy zjoosYghr$5<5r9SK{`UlD=Y2{weu^qfjDL5wrsWSCqS2z%@M@7lIry|c3ro1Rr*(4-6am#|Sw&cvoC!R!*>ZNYD7F+{Q0%JuJG zfFbS(96Rek2qz!FZiUj)`EGiHQ!qlKS!=Q0pjbqDK9VG~T%%Hd!xWT2ku7dTVwL=k zlB0MS?@1%&NW4XbM)*NC-sMvNRN5u7MB>%8VEL1fvVc7`-q|IK^(O5?a)=Z)&aLZM zX>j3lRrwkpcTVUE71d-#$y7Na>$r$A0X`6Per@BrkXE%A08Ge#uyoR|2 zVr{8U$<7gAvlYyfY0XnMkU;he5tJJ8n#jRC-vv7W4nCin_4~#v!@a!XtxL7_Bv!mu zS4_7SaQsD{?uZ5L4-V|9*STwDrf!>8O8gO*aIegeCTw5VdeD$K%N%kCNI`2hF*k>7tH4ZOfm0S5hyPk1g=?A~2L|0h1ibg}z%??^q z-oY1boi*6rGQk`hl7>;kJl1nxE{W^C+gKUX?yo*xu=`n7UPOK|rv|;#tZzD^&*l#H zd$Wq3ZV>Wnl4?>>mQg&J-u-1jp-y+{6rjpp9EQbgAr&KUoi)~4eldF~0mHXHtNRRb zRr2|sF7o!bL!+L<>i-ay>O_vRUctB6C%hlzgpw^+g>_xLum)ve9I>A6BdL`~I5_VT zSV%|>AR_MUQh$6#nc~gvR32hyPvk96o(I{Hi6KFR$uqTP5{;ieHTdf!zV(LA*Qh^k z`dkOvH`OV>YNFUx9(H!lx-U%VoLcx>N`cw!?I4_P0GaE+wcygz<4DN1ZPiyi9km7t+{)yZk~LAFNo|4h{(-ilzdR}$)WtBMUuFTqJtV;MYP};r3 zCq#NBu&^*v*es%8MH|U#A#C(+Oy38x6u#Ecu3|u7VXb^0{sQd< z=j+z3SU+QlykPmb9K7=g>BK;Ig^uX+VncCV$FYM2Ea?)7&q`&v1n6SpzvL%kg$NHK z=1FwU3KgMY)j!=iJNC4F%p?dC-J|IHx89oAF!e$EN`^iQN~ji`l{RP+jz(1QD)+e z|Ja5e^si5OrFtpEC=gl|2-R^bh*gYw6=k-$AN*0E*Ga+3)KR#>G5QxK78|wVU1sxe zgWwg#5MQ)>FV^){D#N?lsb>DgZmfFpo3w+uJ_(d#BjA4B@2dKgN6lKoFZMH5B;b-U zdGm+KZy1=agVrNc-7`M_TuUV^-Y!! zxqtN@em`fP6={yJ3`k=&DMIv$HRh5kOgD5K*hOEd;v38mLKWh|-U&=h+JBCHQ0t() z+7y3KL?Cxfw1|)FEIh}kcBjDx7GZKQ zp;($bkw6kKNPV`svH#`EvcVw_8pxQZf`*udj_9O`=s2N|int#g-m2Ffj&HdhJpk>} zD%kYf;b_l1ei!f8}I`@}4y)>mzkLJrR+BTo0+p@XaHzUJHlDiKAxLjiU3S8r>b(8R1%f!8# z`cLA;2Y9;gvDn;bsLAZ(!fkMluF@%32wa{NLl?Ml+&`lo}e4DKJ49}b>+Gg z=|U3s{c$v~a9Emm%>Xs;5#{F{4s(lw&Gat@%~%MY`ga>9NT1|cop_-)*wa5$z*hE< zIsF3BzWSDi6Uke(bo4XK>DxAZBL3B*V(aX_C=0PvEa7W%~fcGA?jBd$N(OR%<1o?_-u)*UQ zF1Cv#Eh^5=RQ4KUpit^Yll6Kp*%t%JarJT!2q0LE=QRom&KgK3p}QNc@2}Ct5WQrD zNAqKGx0F&j!Qic>x+ETyz$0e^N&kpS=FtV9`rF^_k38J%63+~oE);Z{&3E|seO2K< z26T|@yay+xI!o8P*Odyi-)FSsi7>K--O3xOi4^@(bz!OS9QeSEBUNLhT`oCM59a6} z=mXds9DI|MloX*NGwMBbpwQok4;BF)AG?1o-G=*3g(jtkdL*W&R6&Cse=^e$doL5p zSr_Vb*nAjIkcG5Fb{1c)KnwqYpZQIFb5{!%;tu03l{Iu~vqx{C4%4jiv-aJQN3QNO=K{hTLno11R)ZEQ*R_i#54 zCQBJ{kZ#&^cWKY#fE8z>yRj>O-;$KFmlZ1LM`StOL5F&P&6K*u#H+(fN)oR}mM!H! z)D24uDcdY<#X!-hwle<8-;?P3FTN<%LLpioL>4Yo!=3G5xBc=?uxK@yt zSd*2$zo=ZKb;Qeh8qaI@25Z}Pe%~*Xhyv?TrH#S`bZ#JDdzv^yjNoWJDh<{EU`>P_ z3%HZApk#L!sNX=4^i$U@)J|g&=y;7aFpi?pq+v4{0!6aF!cYNvw8cU35&}$2VKp4$ zZrqf4Rd4oOSX6QV@6rj6{@8_V*-5d8--OJ9`=U4JR=JSYz-+0O%{e%rgc#PNY(TF_h?aGiZ=WOYv`zt z$PGYaBmU1mcP{xtsn2K2PePjDq;SFaR_n#uJxZ{Xf4GSmuX7}7A|EJ)ToV`+5#w$? z#HaUC51>o-{JYl9jbf=ZT;5fC@Hs?FhV|$M*Ke)>29n)p6HBj8b&{_VIYo5nZ0R|j znSG23A*CR~3a$97_>GD;`%t;cCaWg5J$d4=S*IF18i>gG9JQG=(i}kv zDVS}j1pmACyb%Pnc0%-R6-}lCpapSFMq^h`?%WrlROvr&D0OT=f^;?L_&Xi3Vg@?k zesBTF?xCF5TIkTOkn{)-M*ZET1g^dd>7ore7U8Uv0Qmb!$g%Z=Lm;?(hR4M&7Qos( zEc(8n^0x{NDG^M%bzxyJS^m=h~0Y-NW$UYUV(CwD;y=uyY5S zKeuORpU+DJyNIrl0Z+wPY}$DKy?w0aoun>8Dmtc%jBWBs6t*JHU=IXkc~kSnLwUYG zL+Kc#*~a5+A_d8OpNzZuQBG?&*NYY)V23`UDJYbT9Nii@4yh-c{&`f%-J?#k90()F zU2V8XLT|jHcQ}!fPGp?5%B1|?Qd&S21 zzRRa?bJ6qWeWG?llL_`nd3f60fxK_icNB<(C8vJEr`3Ayv9cQS|Q;I zGMu1Tf$7l4ZRu5;VKwdBR9GuYv<_vxJg;j(;dd@GWiAl)rLKJh-khVWSp@YvgX0h9 z<^qa4=OxZKblDZm2J%(|q6cs%W{e?R4YqQ_(!u@3jy-B)(gO$g`&(7iL_{zeIl+G7 zbx(0hzzSnijDW0#wlJ7?S)cdU&Q7TPg~WGhVSLpzYD%(eqQ?yTDMvw%Mi5Kp-55?g zG2_!WaF^8YE6O?YRy`vwt5kj0YLC6Rjt-sjlUrBnuzMV3@hg2GjJ~BssQ0o?-n^xdQUj3X?9VGi!b^R2CBa`Kv0m|)3!+)gtxGZ!yGc=YOnkXc z`sa{m|E^^?qJcj!0>vyvPP0qkwScMCleLhi&6GFX?kDrD%=jD6CstqTZf!k|yfBEN zVo=Y(a!s?)e2RHIxqBwNi-KKE_4tqYg!l^@%t3bh3JW(DR#tJ|OA(xs?MHu{wnsw1 zw#3VckV}>Nq!{(2Uwh6;!IrntWxpY<3+Y|kPdk+>>C6{qA>XlOCsAuG)Irz{$4cIF zn`0A6jmEA!-hY-#cm1!gTu`Nq6TO={%g9)J0b`bJFWPJbR>>C&6qx}Pr<%C*l)zVUmHuFEQ~`{ix@OI+-rXC+^^Q%zTx<3#5e65z1DGE!37Vn9JS zdS8NQ^Moylc{#E~lJkYgdvffFu0xf1xo`);9rbm;kfU_}c)`$38$TWruV@k|3zPek z)MUJDIqddOIv|}i;C7=VUMqj|$D6s&Sl&-pq78s+0e$Zu(qCrxSv>VOL)d;#A8C#x z3GiijxuvG8da$J^V;A~t&zbjH4_E5y-3rn_w>&0AS5odu{nAF8TQQehQwaOm8ZlHo zajL497rM-SO)yYpzBmb|{he$pC6}0 zU*y|$%7+G$lkQV({|#X@s-39dtDP#($(3)|qxq$#?Qme{6qBK$@!3kceQMV>9HrVZ zv%q;Q(Y-by8Q{v=%DoCA8Xo{PxcG0HPSjJlQED)Zn-|n ztcl)?PEb@!$$a3^TU84qpGcrB=GEFl#4SaglF%=JOye|a-2nSS4 zOO|9VWGK?>8Tr)@a1td}hnEuxnxgHEyL6LWz2w&99{nbhw# zKnda&lg@Vpu?qE(=^|lH|E_`EH}%%bcHE(VMfNh1YOOJ`!Pj^Lx4RR46YRAF7?eJ) z1|Vk)9^cEg(0Wzw$yq2MbCqZ%v0XySm5<}((_{pxZ)a+xS}T%Bj>HsgG4*l)F-sn% zvj_kH)bE}+nntQ`4-nH#HU`^|V4Qqfd{-N3rQSRBd7_)H>Rj+ZdDdXZ-QDygKK>tv zgu1{dnkn!kW?{jsCo6$v^r%KL-paSlJowxL)Uq#bH%@kC);IVXntgQeMsEZRsxnAu3JqFH!vfaTPdn8U**NJ@P1)ZQ1~M$v{baao7T04};=kaN!yO*Pmf*a&=P zps!7xbp$+;q>ycflinpJlQ=4GTe{j%kJer?cH77zgzzB}#%<$=x`*nFo9x6-_t{sF z%}nQB<{#=4t``KxNYYv!w5jcCMl1Aws^Zj1>h-!QnX$q4#yR>M+4CVKhmB6WgY-l} z_!RyQ+t2E|x&krG92{GT`=xg0+3qnv`F<}`rh^Y>C^HTU@yr*Muet0uvCn7E2pszJ za2y@j{?1^sB~Y!-FyY3Q_K+dNg`(Q)r_iS(7tiU#q%(hn^_UJ+0e}5JqTVyC$u#N~ z#&Im5f*?h@O7GHJgb@TJH0hm4lipj9Kt`okfdJAK2pFoA5PB2{NS7|1geE-!fdB!| zGw=I-=lsgQTzQh*`(Asmz1C_r8a~|?fqm=Xx#Vk&R-820r4{$rQ@|wlA>9Srax ztaYC4RE;}IkRw6BqpI)pbsTqYADmS{QWkX!IjR9DhathcaBdG=rTL>O>RuK<+J8>b zp?`^dcc-#4@e|(F$@F!0I2+jv&@gxt*4z}~SZCVZh9jfCoXw5!g`Ic*VNCds6RGLT zZ`jj}OP!5??;r>%V!yjXmh4gL4$Kas&^o~+&@_=h3AtrMVl86$vg!)oy)#SCjOro zbGGRVHy^U)&F#_`S9x&bD6gN+-8=g%0zk-Sp9 z>?7-IEASsp=}}*7Tsmh8Y1d^*A3XWxk|9P&&)X=ido1q;A2;>GlG`~nc#%etjnkk@Ih#Gg#!v+-iKBg5HLPvo&d` zhOy(4rGnip=JQX>N_AK*gN+V-bihbF-5tw=jnKS?cI=EPrMaUb@Pesfa;5>6RpZ|H zI_BHb-%Hf;qDt4shaS9@NtS9c-Oqlw_$uvYwz^D&ZsICa(#&XK$nRjT+_HokcDKE~ zh21^tQ}6T56Ca833b4eDNW+jdz==N#vUt87e6 zTK=HJ#PP?2wKBfs%EtTdrnMh(&>J+ujh03w_N)dcz8TuBf&u+{0RxAuWXIH3XwrR( zzDKtGmc#Z4y@HyBrG`n3ypcPNg*l&oUde+LV4%B}Y92oBB zWX9SZ>qr8*SD_13qST(_P48Do3=jO8>pVb{D7FKf#Ygkm$S{>=@$ya8Q1C89E5ho3 zAOQF8Cxh4nKp&oMd-;b7tESK)KkxRd#+iVP`R;Yl$9>FPtLP+}BnoEl{&gUeTC7=Q z$;p}*+V_YGVF0}QB&0o=u;}73u-&XSBU{&J1Re{~_A1S~M|>B};By`#9Z_h8?I(K# zZgu!!+gI7jaO^cKlow+=LAE|!ITb(2BDf#GvHH0cOzOlKls>Nr4C3@L50VPCNEQs% zV$bAoLPw;3<6>Wn;9d?8wlwt|YZ#)~r#K=rG|ldrPI;(9s%UK3R>I(1gdxA>-Egw)B(HVIkZn40oybs6NMA%BwZ zl1R=8Jmz_7J`K8tf(8@d46_T`E~QWXDxo1JEGe| z*bP#CN3g(uQJ5tsJ`oNocxckqk8mnYFWy%|R0v#S8%sA#+Gi@)J`5-MkQxbQ+TLx( z#4SyXa4o$1opqFY>F${3jrjQnu~yG3*_J$#Yd$o;;C%Kw(L9plF>p4c=7#|G?t@P{cCu>fjL*w-veLG2MRnh74P-#PWNyaH zesw(?=w0JI6m_E+AXo-#u--10!sUj(Z@y_xqpBs&l2^-Epq#+*n4EE+FS%baw}36m z4eaIA*Q{vTh-q-BYD>Kfv@0&cqoL~#8A|c=9$V9HV@RX@iww&{le8tLM$ic%t2h6Z z&tK5a=}U$sssS%Qe7mD=Q}i7=>v+QY*ttR5Tfr*JHfzy)i&`5EI($Q|J7Qd4A0;_L zTpj`20zC$K&WdPJpL@d{mf0@@gz38p2dL2u*meHQM`@KPXU1(M{lKCU)a1KWFCii2 z-ZDD851li)Qcfw_?}J&z+ipB5aB~Qc5H{(WOmfvU>+I1Ne*t!ve&^>srpL3+J*##$ zwt-*6Z7GNPL$5<8XB8&Z^*G~2^&Z}l`aV`C+>^B0s12**k@(GJ%yQc(!P)_J6fUfi z6Mj71f2^uLxLO8gNEpRKYQ9Zl7B9`)I&z6Oc16m`WoqMSZM0AHEJxZ?FLsOSxEdSV z&JS)0cHb{Wo~Ofvk4X)N(JlvUdTSi2hnXV3COhq>%EX;<876t9yNUgdOhQkJVflRr z?bSO~Vf=Hdl1RJ+ty#(w-4*GQHU5dvFLj4N59q8XP^1IN-{n?ISh0v#bc8TalourD z$C9{hwXfb~>PL{2gtM6pAvdp2{-w%$r)o%|*ymPX=^?H7*gR@QDmYDl({i;>Cf6%K zpna|tXr6!$;eX4+G+^lIoJCkWoJdwpHqUvjam>w30X=1_q)GbdaqkW5Vrn#m4CayG z@OdP&=%L+lb8WuVMQS_?fW7YWLXJ>OHbzLb#+h1TIl63`+AQ_U%G`(hq zq6psir2of6OpGa7Y z-3&|F&99DZv~{5GqZ_oApr<_UqdeI(SWP{}1kAVhC63GMaW8Al z*PvinGN{ogH!WgYCFBX7qcz?S>iofhWT6pRCQFT9(-1LtHx4iroboDD6BZV~wFsM^ z^}nd%?m-E>FqGBi7w=6_JyUpf@}dg~N?CP!>w_vML&!M_1KO-WlZ}{Pto7ZjpjG=Lca0j5$qX;NsJCeZGe%ac}o}Tdtk7_ zV7{$AiOKcp(m8v!?0u1H7xo1~oTZi$pd20~%-0Y0$r?2To;6Nv>(j&cTAOh4>$4d3 zz6cSD&jgx|TD`~?n*Q~qC44CsCgLU5k@ab7DyN~!i;%?jo1L1U^kkvw&E-h*l(l*C zlRBwRUZ=pb4mzTAOp`(E7aR3AI1-cYt80$VnwiQ>nUkH`D~}Z_87D1%^#3wHaU-}0 z9+<{p?>7fLRnQslhbet0!=*ace}cw2I%;q7tPOGz@Ib>y44d5kf3z2tjm63_bAhxMk!i&P5PDT7g~ z>De!*07#vdSXu6xVu4{Sumd5jTO&76p&yx6MPsqk(a2V^so3L}^t`7caQ>4Zig%5b zmk=Iu*M4*5^UC84KEctR7iaC-o%5tJ$cZr`v}k3xSZ*aqp{(U~_c^=TMbQx*gT?F? z=JiJBh0^*jbT`WFBRQ(zXRIOHtX4X15p1xo%`y5J16?si@ZasOg+DPllObj(f@Kc5 z#87(5mX1=fJ=%>I69=y*!e-53eJW0s5#a`%D(ra<8+q%2^Xc9kKP~-F<-WWRnRfP3 z~FOBwx;Pp5BuZx`5$59OZ8`PL`e12fRo zc#Lq*>hbK*(mC5%6<4N*hEtL%;jVA*1zmsyrST8dy2}!!2)$PFhl;(%^Q)IC4okZd zz84DJFVCKjqE&&)Ww6pq@;bHWa!%?aOgQYM zCHk9kvYZ5=7m)jLWcB|V&mpWtIT8aowryyPH)}pb?kC+y`dt{`f}EVn4+{@k8Db8L z3)Er8jPnA#x9?sZroDB7rkA}NG&HsjT3@*5{`W;|w1Ur_&QLq;_scGE6_EqJP4P0q zjslt%DB%zBO)&hz`&OoIgN|ds4640CCsG6Tg9GdZqqx!jFQqPS{m@*=0(pQ+wHG!r`wOI$aA8pUwjxTN^$&-JWrWps!Fum2O@7t#BY4?GU8be z7G^o|Y`TtBhG;G_>#5cNbF4rkV2YVv~aWU70t<*WQV=UQAylE2k3q0WF8rpjoK(J!_$=%>DxB*soJv=WHJm znfZ+)eVc>X$}5rY-kMi@FBU4hK5r9#$-eAa7!~mRl>$dEYXZs)K}?H&_+vFm3GHSY zU|6P!XhwYgCNR9qs;%G&>msrDGQdFOZ_5(QKW}NZk5fX*2mW$@obI{}U%pV+$_!-~ zv({dV=A9UA>k8oP?E9B@j_ulofHJ;PfQ8uT)dh@N^|`6D?R|+=<~M|O?p=!>BtpNp z_}A#rYuiDgsB(le%MIR)Swy%B-+-Wt0!-gJ4rP{q+tgKP;v=EFcLwXlrKO;+1msxl zQ`?ClTM!XjUoJjYA0>$BBn-jvR^N|PCBqEppl=nru0Lh#f#byv+I~hd^adw*ratG> zec9se81t@tQCrhUP76W;W9RN>iP^WibZ2LKo$A1i$8HW_N#rV(8=E(wK@`+Ik)N zIwc;RZ@D(q(Qfa9_I5MjqFuolFpYr5yVyX^7`7$}aiF zy{xg$@v}zDx8Ky$6cX$2DT52x?x6HA@^ZN;!YLa~SlT+9bIyc8Qg){5Eo*v1urE?n zx$L!@A(*~^%cw3&u-|696;WATC>l|LAx{T^j%!C&xUcB;=s@4F$$c3t7L2lYqiD-~ zzE4%oW-j^JMDspBPQI7q84lgSs9#DK6Yk zz`eM_qv;gq8!VU+|4})3|34T!Jl#tQ5skQi5hCE`UU)(6Jvj#C9#Ak_ZUChg6U{;y z2@q4=VfsV0SB;fF+zO?wA}O|Mkhs6)=CBvaNXP^Ii$ z=jX#V&xac9whJ)mWzP2DAxJa>$7U9&i21hiOB1nX7tK$LD2^|b z31!Sfh>jU2Hj`5xboy~BDcp8`{aZ+#UR2j5CPQIpIOo_+dlG2`%0nahn~l9iOkbsR z{Klq)KpYOd+q8+DTk_{Jts^l(6H?D_mTd$~tyl#;z z@N;U`k0f^VoF3S4QLFHWvL;7_EZ%awA#BTqC0I9^YJ(LPB@$0P*GZ?!-nN8Ht@}Mn zR*x~Qqh*yS^3%=}J(uSE-Kxv-y)*2INyh$k?&Llk|;Y_aw$ao z29Ff zlM_#LTUSVItY&`EjW0J$%bGkGeB!iRF3&_W8lPtj`>`Ik>D0mPl&6@DueV`#NyeFd z+|n?rB+e(9MxwOQx1T7sYI^ldKAJ=Cdg!dDq(le<$XvbW%pk$Dt+Zt{f}gBzS8x46 zYi5sc3@yfW`M8q>Q{Wo>6|^Mf^j>^b>lrnq3SdNB{)Z9Su*zirUq-~3cDbT6Q<~bE z&dkIHZ_bSz)vXhu={066(nh+F27+)HF0Q%vc$^ zUei+VGMjUwx60TEGkzpe!%R`qESNWtZHVBWO#DmzAodl4oX64{tr3*xdAGrnxGOk< zJw1kNE;77D2(3WNwGHM`M}yUy5^ITdF-)|5Rby%OTHlO`3DIl!n_WWlcvqMSiwrh3 zmDXqFt>)7UuXldy?ubVyvNx?ZDFMQ5XsLG9gdS}|wV;|q%ip42gpfp*2MSkUXxBFu z)3=>h;99iI(fk?Lk_nSE4Sr0oI@%HLn*0%}vesdqK^QxQIcV_k%w zG(wWa&n~Sq^68O>j$F2Zzy^SCMWX%1C){YH)u>}#_)*g2fy=U%&e9F=d8ikw=Y{&)cD?<(O z2kVz64GRzEcoua0KZ9`ZpI={Etg|U9(1`5!hk+_gy4FH90cOOQUQp@q|6@k-g-wLO zmBreM=SnZ$rF%ct{@nXpmzgd3DsSi7gs?sm^tUS>kabFcHh+|{y+GtS-fsp=>g!8J z`UIwp=dv8zkxytteosnk?{pBkWTc68@p zZ_{dAd>H#ra^pRA~O2^UU@h0<%5Dkm}f`3 zNtpp{zW(d_w!AzJN5M|jt117>jj&{|{6B6)wffR7?ad29n0w@TzR`_)4D)VyoLm|SyKk~nFc)#3YR_yLC_URt^wa{7r+EJm7 zUQhP^ihoK_RgRBmf)r;Nvur_ib*DHDp15$>cW74pFdQOyh6-7 zDCK7=7KOl!!|^hvIqT9IekcR4Ub;<5$H7_HZAm^|oV5EU#Gs)ZXi?a9An`b(!phw* zPDam&N$;N}XpAxD?$^U+6}_hSZHY6&rYw6+0-ZL6ZzMyj-7*P>gZcvOSvptE6sviz zn8lYJ#WS6v!i}%IODkWCi3}}WhXrf`9k8gqUNqqpY9IrS0SZruM7BqyqORAgbQB>n8;hj14{3KNcD%eU{?$<`4}x}L%} z5m&b0c8EyWz4Y`Kn+RYwb+i20BLB-qyYr{G4Bm4jMq2o1n+hGL))ghRuT(LIZUpLs zy(HoyxBEr+n9Zc1ru2HTgkS$uy3GPe8-YI@d}342WP}!0h$s2y-?%xMP^{|3Wp0#j z;UVlUPK?+Np6Xp>F60PepLk2y=qaT8@L|l2_ubPeCUMZ}Aw5r1diQ}2FMafChPIV2 zAA>lf#PSkJY+itgj|0La%Lh21H9G5LL6Wr2AN3nq$xJreR;H&O0Lz`MQ>S~c3i5rc zLdGw0TN?YfcPb9@IeU9mRfgwvYG87Fx2HChe&x)E(&t(}o#Bof)!nkq)Moe1QLKF= zE!^(k`)j3hpUEtzm*npIDdzLMU$c^bkV|~&9=5hQ(8Qdtc&`=h#o-Lq>Qb2nX0Dh3 z5zTx>6ujPj3tZ=+D{KbN!Bk^@uFI+>W2P$jRwD$+ZoZxb`J0&6*IOPPypS5A&ZJ{j z>oM1|zdu{tKj?v;DT(-S!LDF#0cdFbycCA*j%sJrcg92dUW4V^JohVRg-s=HLfwV_ zV@dLBI+!5+`?o|?HD=^8nj=i6(biAYm-pZLL}ptA-YUy^`WLTX##jxkkM6^G-`^VQ z_bJ(y-$mG4i=V(X@tZBs7E)uu-tOY!8a8vkqcHg3LaCvM2-RSTFd>|823_oToSj}2 zY#jSv6w991MA=dQ;I<>mC3)fDG_EQfjcDwcY(l%*`W>!*F{#pHWo=W*j!;~S z-fCw2J({}}{@?N4p9jx*|JlcGIREy>Tk>W~ zCp=24Z(H3I@2nmsa%sR%Gog+j<_Q z`UP=TCuaJ3wta_mom}^||69;|wHxAm~|m{-OvaB$H>=(A;>qW!A2 zw!USOqKwMkz>L?(5G!fZsDAFmOBp@J^BR0yS^TS?qK4nHH1moZ^lk99Y-E>4g6g19 z^L%%xXfT`1DoMf9R9^o@_fXS;P(Y7ddWwvJYAiJ5Mt5!3OFw`Vdu_4}QbWaL2oB^6 zXe}N$RETQ;TnQL7tzBAq+Clk3K13Dk$Sg{d!+E1;w{UEFH>~>kCZl=^LGRlxMVb(w zl9!*Xz8UeT4z6u+d2}hxkzwLrS7y`WKe4Qwfxa$b4 zo;23C{0M5*uJZbQ$4ekhOiRBNV=|7+#ii}FK7Aa^YV!HfqwC$Ne8&f>#rwC{Sci>s z$9nyqkrZD!z8w_2aAeKsPuyDeGx3wb+c6&G1O(b_YUmjwocV;Tz+T`d3h-OdFmarH z?QiMC9<(Pjf3$dpVw;S;B7RG=@*(e+Xk!uJ@XZscw{!rCc2-Ma4n4*(6J7k8(dLNRq{?-5bEa4)qoKB&z zWq5$_0RP_pMKRSq|7C9pOJEW~-6I{3^Rx1wqT8M^*gG=U1{E0k1$&it@aOtu_AHTZ zkRcGV?cg7(gK4-jKL58*`P4|!i!2lJet>VhJ?Td0QQ?5am;qS}y&O;Ek@0_COKuc& zh#R$1eB0UYEO+oo^VuRy>(@+YUt>M3c#2$Iqq4x%u^#dwi4^3e(7tnY4;ZMtcFE2K z>WAG3{8*1gkFhYb^0Z*PM`T5hosd}^5MmDxlTQv563Er8a}7Lwrt~Vqn`?@FyIrHP zSPe9l=CGv=Rr{icZSw8CgKshr>GS8fO_F__9n5|Y97#$q6V);Gll7CB?N1VxncD!| zZ)jeCCAG`=0`?C)F?Z5dAv5=_CPl`+^=amVs~J!V!$APwqjopJ-IR^&u~XB6De0*H7pLkr6ql23yypJc zOplvA*H_%Q`!tc%LHmrdt`$JJ)o6t#vk4s&LigNG4CvG_ub39sP3y^z&Q- z*V6l~8;`u)7jk`al~m}76Tik#q9>C20EgLok=fTz-B37bJ?<4A*i4(Jpacr#^n3>c&e3LmoxA^;(G3xL6%^q=LX4345QOf)ockhJ}p-0gfSnBu11ecFhvR!YirEJym zy2(@cKtn#O1M4lF)k&giR~bItAv0bk+3*eRtu!@igU#T!{eX#h^@?cbYdigEA1~_= zm)@>UE;hFSmr#VYHX0_H=2HYWovg|q+p7s4IDmOJeb`IyQK3rhbFkB+GtL-Z$z#dt zmQsGXx)&@Z`ASMUjRpVI<$w0NReyzNpDfW} zes>`ctb?`wOpuG01v!m`afGodn^s z9lUyuP|vMQG5-0P-2%sW}3Vo~b$tX?>MRnFb(%+j~*L}{F|v$GAd8$!iD@OWSjt36gi z;u=ajP&k_u6O6<0#oP1t;~bJ4xg7tgtwE&A zUsGkJm_-TuB5@tV^kp}{fns8KKiyx@lr`P-~+zNn9vU*pjE^#%5uipq+<1VMCMjG*$svXr5ajzBUY zei^81W3;zRRu%YI(GTUgLo+GC;cU@jT#oufH8A{ag)zK0hN74MD*HF_G*bmy{`l)u z)lL2U`?F{zvNLOs$>uo1saPr1s$VYM1_K*C9Uo5 zD|S{u<2Uph+6x{r3HE`WfU^?ud~UV^d|Z$pP1CG#olYNiUeOen#UX|7Aq@q!dyd?C zyeAn67rlJt;gk8z5jdjD4wjhX_QIANV%E}dX!zjWB|yY*T7OD$&D2|ZMS6nG4AEJ0 zx?88sICNh1ul#{rz=~=tqdi{~L18SvX0Wa@+TVN*ob6Oxq}_n18f=j!#`$3x#p>e+ z24?KjXHPJbyQQBUoNno0dOB$eTOT=VrMV)%*!54gB&tEa^+S;9gan)7SQ9+Q{i(U3W&hHzJW&>yP) zJ7tR(L8F%3g)PBYAV#2<;C>F%l;-ItDa22`4f1e!tnm5(m%F{>94)YnS1CgP zVfM>js@-g*Dd8%p&k&DJ!rrtENjxu0{w_4eu+hUML2uHtYI3Zf6BM2F506{AxHKdZ znorRBPo%;4D%2a2r*$I|h#OvHOZ=i}8blK$wIgP!Gwa}+v8@7owmqYhyUXX?pMp~; zi#w!Xo(%c|hLNT0cl3P&QJtAw+M0oGVEsd+P~%p>zK{oVMzK@)=%_l=O_Si2{}7gTeap#&B9-9w!Y{fi#43o*BY<5P6;_r7tx$`(kFRLp*tE zGUxqeKej%%_ZS6YMTvci7FwAj-6H7NJU`G@`T($=)UE~+C(n3%s%$We zZCs=K7KHe&D^5hP0(pU$OUu{~>EADLNTWMiN?`EXkezCG#d8OZMS9hTQLtHSDZtq! z2N7Ke(_MGezrMaR9kon)Qkd+yZ*^`rEjv?VtP7#86k#r|c7Gk&=$i1k_4)gc=Wf(3 z&&LE`*8K9h+SD80G=2joLoQUXtUTCA)44P7_UlX28;POa<*2T!QC&Ti$Ri~;a4}lN zT8+BjU)6v(9xH7FEVQ+au!4-cx~~6HR73FTnL_(S!A*y-0oH4~S&3#$Lj1XYF2d55^SU8fPJxKF)a=+>XR5KG zmmZxI9#F4vceqi@-~mO}y}E#_JejMMj$26JwyE&MYCBq3Swl~z^3*u7-RG_}N3dn) zC~oa&fo92eHRE|tUSVCnQdNaXltyLoohtEh?eFKUUsdZyzHP7Eb6;ega*1X)J=`tq ziFgu;1SCew+%6=IW_tBUK77F+iqalCM(Du>T{>i;acWW);sQ~Ma?Nc0Qq--Gq5^Z? z)2VpM^x}zG)=J$`v$o}mg*&Ir>_Bd@f^K})w3G1&)#`@C z{bM63%JD@-3@-j)xtkmUo#CeKa)T6JS+l8FI2vy92C{S`Pf}|_8sMWxa(?wSG;mU?Xu1cTHuFwjaP9>@6z3B z`}lR)R#zXcTT4v+DGeVJXXVy}TVZ>)OA}wAeFOxl*;%R0@-JBggCQe)(s{k>u~;bZD%X4PXLgAkVZ=zZEa^;)+wtK zFl#pyjFFg>Yg3X&chjTsefhJ`v6&+!Z7)jHLu(B;TEyzWTZ@Ki+T8w6;ICWs@3*PH z#+b>6tiwjLMA{lQf+6hS^I5st3)x*p;)EkSTB>fwzb}Bl_}FyyVq&d!2XYPT0=eSB z#Yi-(55-@Ab!;6wFS#ZpF24~Zm^U{;(`GO9KHI{JJYGETY0&W#|NbbR*K3aD8U`-n zhe_aY&e%A;gv1O_vA#S^?4?ta9yoYCRu+Sdt^Cq3Uh(GhYR1j6_zcToFY5xM%(BB$ zHylO#-Jsu3E5&>(lh2NRCY#1dq7toOS(lwGBD6TitGl6=XdnQr}@w;{EO6!Fj_H&;SfKBkp(;l=d4`Y=1CC03R;{VM z;K6F1vbg0~o``X}kD$Iy#zPj58Fc?%`uYK~XWr;y#)YY*xoCRNx5ArmBpgJAH15#7!{!{;V1+P9mUHT+M&ZhkCqupnf7!RF=dg z(y1?!u%Hn#Ap72Tc6~DtTbHxCt~X<6(<09q|A)$!T-7cef9`gkD7KUX+)`<$)@9uz znQbokeJU6mne>_L@imjdRf!)>?A4hR|I{>bWNYMc-a8F5^x)gXP6ctA9jyd@iM=BO z@~w=v&baN(>2O&@42UJiBtqp`K9IPaFHp%{BxdOw`gNVlM87B+i`&(0u07GWZbc)Z z11zdbV5th3F)u+4onzHI^?4C4nJXUa3Mhw)E>5GjRf5K4d|F#S-BV-s5R66TU@uMZ zW*5k{x=Zi<>!uk34X04pwTIT4W+>Eao}1P5$nyV(<{bf36cxg1@Y6-K|>5 z6tWx*7HXV(YduPWBm{Ka8<0|((NtXil+d&O9yhQ>7FGNFYkUA1qvt4SzUF39J%ReX zAU_g@<8q0$>~TSW8cS{C3fSkg=xN3x1qX67#sbHW8_H*=QAA|ecAd&O+3#Ek#x_w& z!P1jmtO|&g!s&V|KHOHlkNVasv$%gP3MTP9mPCA4ef`Pto6&OSC1j+{o5U8`{Ds4S zM$$NIZ_4n!i4CyeZ6KVN>pr|0^jlRD=7)PC9lt~txZ|Az|LdeZ*KOyrUrRmoTsmU- z7@#sWh$kjFH}{Z9dwk>+l9XJsOo#+e56oK9c2MpSwVax*VaOxOqOB?$$f82e1m;jI zWSm%h6S!UPSm`1A(=DF`>&ZvBC@ZR1Dl;^##AAO2KzvR~QRd?wVYdXx?I$j=5o4-< zbL`90^WodyBzNHWTIuRg&oVu0rz zhbZZW&qNy+Ng@TBoAf1ACA?eW@c>CdbPTC0as0~Qtx+aB;OlLS@OW9b#Wa?P!u1zo z?8dV)jSSP?9D!JIipS2~_d(+JA4ce-E7*3&@;RO$1xNEf?$h`pyu>XvP<>+7ddh`D z6ld&c8?b>+>(&xqb&>RkDy5B`w!(8nPTUhM68`t1=5%nCPr&1#0t+kXdh+snSk}`u zG~8gFi4^)uBhP^-eQYtvWspmFoMGZNkk-z@>5dTSGXxj5D&P)=rJ@TC+<#rXi>qZS zMgVC!pn1Q$-%L@Ouk|_`+!UXllh)D`$H+zFji};n2zA6j0abIj%skoH%)l;@zzW;wI?W!H~B z+!U=vm*+Mp0B7PQ%;&tt`QI$i@YcO&qu#QLGxyJq_Z)5xaCswJn_FCq62i99=lg>E23O-gAmP5mDIS(= z;IDma{paimeNr!R-5?P+?H9>uMQ*F1i>)wE%TSWpL`_uiqky0&lhfu02#02DQ48W{(+OA=zcvnOp!D-o~IckKc5t2cBZ%MWnr<^NMn29b)6fuv=MY1>H z50!Zv=|=4C-oDt;$UV0tQ0jJ0KC(r4(`qQGZh)!$+t^)Ri+>S~8#TQ!BhtP2CZ9Mz z0MX`F^3!JC5=BK75iOk~G|a_2CqAE&6qJr^TZ^^R+|{wdb6joh7g^mUAA;?Lyt`Hm&6gcb(#mcJv5E zfSdk7QmGlgvIM^bbE!@bD^F_4ZHR}Qq9*043~8i$GS=^#pAqtAk9^FrJe@&VyOD9G zfdErPf&p(0&l-fo&s@6E&uT$6AUdLIF)6cE1a|z)ys%z%hvfb&c!};v8FPile+l^g zAI#&_`x8NyagXA3v{M=NfFSYyhZ=&=Awu`u#tPHTt&910(F+;5FY5bEOBad?mFpuu z0{?2D(%4p4z3AMZl$h^mfnBmVArGf}eSl86gVsa!Cg704d9C4Al|j#TsV&5YoX|bH zbEp~k#B6mACx@+ef4n*HfmyaadZwBNR^Y&+2$`eYUFncoxjn5qKrU1Y&A-jBca$T8 ztv_g^L7H#>)K$*wD1OtWU+-7J*Qaf63AoA{^%O0dw*xmppL~+umD0G7& zp$O&!c_b2&YC88?=RgMLMzSj@H%(#D0Q;5cV%M`ayriKU}t;SKAE+=ftp z8!sGa*h8Ueh_~nuRX|j$;kqAY&uGyfUE}Ri8oRQ3@c}?2LmDn$RB88%+=?V;0fy@C zB@ejXHnmy$_M(XETebcw@nb~!`|sZn=AR6DAWZhc0a^D0db7ix!(aODH|w=}2(FoX z>-S4Fz)m#a)fBTGY@^85}4EZ{o<%Btn?lQPp_FX9nba{PA2}E+}fzw(MY3trLBiUe~L!C^}&`gK7 zMU{9_W6JL%rH*mxr;uleG%FFXd`r^o+g6OQf8+FzeU+<}n?x?`a>{iNc@^fC=0fuy z4FkDzu`n&dt_phs%Dz5xr^T&hH(ukoB09rhW|T+M!STg68eq==Xcgl*?9=@u?yiwN zj}=}kh>o*s(P>&n7+RTp`B7sg!^3L!buwRr2F%@^n^#Uyha%q~3?ovFe3sVG4|319Z!!GXChst@!zbG;f6wg(9syz?F7 z4YqTDd<*!lO%}6ONg$2Ml8#n3qCTV_ZRX>`Su;v^0VTA< z@vrKCe~JRmXW0{M*Q842X+rNJJvo#JUy<)xB0v2dfX{_9k^^u*wnqCZw`a!}w7ujK zn9U8R(Y8ig*9@TtI&L(Y;@?d|sc%+YJY23}B5B=U{Oai6WG^7f40&_x z+il!4YuCd?o)fn%XM1 z%nU)z%?>ld^1c__#A#Vq1S@g6dq1Huv!y5Rti1*Lm&dk_YqjhhITLL3`SZAAmGl7T zM|HCXLF@wgtBfIEUr}RrDLMp>rDz4a0#(7DaLvlYJT7i}%hAs1gsu_lq(a`}gkn49 zpv_U(XpE8{=G$Np`AzmZtKC)VxPgiRI@6UW`QX$jA*{2oskIH-UZzI&jze>c=gi5{ zTe!1N)NFG@mI*Pre5xZbPFf3?p$R&5W=YmdB*=A=LgU!&L+OR?yM)xNiEabw^LKqm zQAggqiF_Vfmkj=_no=#30nT1SGQV4s)28<1RUc)slfYPtsJX#qyS*I-a3H1L>e#K` z4VXYfW&)0VF^{`pOqB`^U*i52TLBEUuHc(;+}3kuj>)xF8qxT&_rn%SeBFj#2&z%o zE*%@lJPl>UVav2z9?%c@X`>jbpvH(u3$->}FT2UNw@d3~ou28D)PxL>%`?;YU-$Tl zuMx6*s=5ppWeI1nUg*U|h(?S+{*qaWR;3T}QvPZltW*|5VIhPEXtfpgbbzLKblTa~ z+9%9*e-G*4j4W-{Io>xIS=q!f=+!VLk`%4Z#qW?Dy9c`x6d)44B{GR>OlkS3>A4I&&7mjr< zuBpY`thx>a(){F%zq{8}?tQuN&FC2Vy(7JQENe+_Ho^^EF>QP%f6us(7L65SOGWQH z6(id!8ygEkRHDeC=ZX}?=643F#Mnh`j{v5&xO$w5d>y7hlDD?!UrT88Xz}3-kwneE zVmgJX)Zv^P1rmNe4AsK)1ST3pxjsY6@hfd3-!$z3!oXI5esYQHwgLei#;jKg4X%`2l^c81@&QYM2&4e8xo}{azQl~0 zWX^hf7O&@8*lceqph^$N!{Zcs%;hd&8gPm{7mS_-)lka8Tuw4hv|8z~1$;mTRo)=CU1^T#sRmhg#6(&7RHH zzFANQU99D>2f};+nMo*%N^*xrS-ps2RRq(fmxY+!bK_m#Wvn@_aV>;H*^iCLdR3bz zM(%brlk&Yjtmj%3ek{G2j+^b>E4+r#<_D=Cil4_s@tfUP(_o@}%Om3n;>?xIEOBG; zxkicp1>Amlrep5L{q727Wm2Q14Z&HWsxnys_|zp}Yw9{r1CN2Wr%=b%|AeKm?qp}( z>G=jxvrgPAW@ZlqdrD5Ej_y&w*SltbOxdurVhl_cmu8_%Kj%4jCRYtfg}5L+{X!Pa z$K@M_PgiY}c9jkRQH^}Y!siJ@{$f0(oF3fWo77Y;Ij&H}xF%%%6K~~hw4M%W-WHPE zTWlZ6g}cJvsa~g06IYB$AyKefWJ#p4ykb>)k zTYg(>sHIPI#}iH;DgfGC8e`vdmvP@Lrj64WdgmrkgtJ)(bHjEy!bOX=Se`@7t;@nF zavYF=X`{3>k^6|EiR&05qT#$NBNS@B8;J@Obe4T-Ws)PasOJmtRL< zLg~Hz98&b&@he=Ces=4r+&Rp=t}SVyYt{6>Uz%UWxs>UzrQVxL~G9^uYf4QUr= z)AdN~a$|v=u9?f|80!l+w}H6Laac8~^|e{Q3`eDQT(d5MF8IUR>b(tKwQS;FD-sB5 z)Js+eyq>+$ru)3XZ|rK0bH2pj|TA~pk>rkjTu;?vvsF^?NbkN z%~o_{1de~=V*T4X&kDiyUryVvq^3m3P6rTf$(v&WFr^1NBB&n!l9H~|`+)I|9;wB) zS4}nl{ok<1RrVYW;SdzVZ%-zL=27U-!uCS`TE}C3zBrVZoC}#T;YS& zc!tx1oEVF{23#=-`u;=dT;HGe`tZ%;`FpRyUJJ*?&Q~m)bbPg(Fh?003QfEXCXbf$r0k75R2zwQ99JAXTPk$kcjs-sEf6nlTajhNG-YQ$KR#QF> zDYB~o3gw&*nVK_a>?*yz)#l0_EX}3vSMG>j8VtB`8m;cAG4vqPv2R5golSobF&x9; zy^_-V!b;qb0~90pzz@$unjr8JwNL}_j&@&fr+0n(i`<-vWq{8~&!je|GF;dofec=8 zewj|d%>y7pl3mg#q&A78E42l2sak~GTb&_N>b?d)h>cAo?M2B(* zIS%M+%Z*VJ4M4=Ec~pAt`pJ@r-<5z25A(vT6_1!g3pNl@{+J7nm*d|Yd`usr7 zf%@SnM^`WW=BZ5hovG~#Zpc0#9ym~*Bc0wC$@Kwi&6ZKOCDM^}Kh`o$FRIAR+`mIZ zsw1a1Rk#&g2oX?&tTL4|9%=?yI*#s^?Dpv-8r#)6BV% z6;FU8VgjvJNiR$MToGf@mQMPv;g5k=^|Y&q!v|R!?N&Smv!N8B`S*+lo?gI%VL3@2 zJnyzIt!B(%H+j!1Xs#l@02ncl=NR|XFR%}sF|Duh}4DRIreqC!-uK)G`0w2x;^BUZmtVAl;xLx%@*T-FQp0t6xt zWZmCu1{KtH>k$NGoi;5^A4ZoG&_pf&i?_XvgQnaPeJ;vDBHAXhFY+|w^-R^uOdkc8 z5czjC6fAbj$5($&{Ht55)aB7miL=^wuYKccYs3s#5fg@1bOo1;0cMU9=8#wCTb!Rr z@rxqD+ae`BbRIDl01q?y<4I$=R!to>H5xq>6DrPOLLvVE-t1r2CQcaXbn87c_n_ul z!%&7dj;4KFF`5Fc>Sbofw&iDS zDg5jI{i0~m0IOSQ(Gp{u-3oO`{L*n7ZTee%CX}t4m8$g&R=sC`@zIC<7_)HKEg#m@ z)yGuFnCOACcYP$%15+LVDvzv9Y&eq#4&Yt9=Ctk=f8jFj_|i#kk|XDzU36)SOwMTW z5lsw+cvX*Qub*e!_~P&WYK!i#A#Xsn>t!(Zm`aGX`Fh#^lZ-6_Y`hhu7SoKl6*xxCu3Ypx{{D4b z{zpr})dl#%oOXkE?eQVq_}*Ie?ZK+XRZ!*;|A`*setM$k^csm37wf>LmQ!R zGfBOoH@TR8bkJ;`shhOwL6+32DQF&(+yEcPt{igxAI;do$H5$v;mX2WlfF&wYXQSx zhQ&u%&knbanN1NrtI5{O~!S*a=&KEhRocl)L4C``$FDcq2pEuuUfI6W8}$U%(VS~zx+kWtgk(& zPjCc=!}is>9HW+ab+{Lg*$r~K;(7!O8IB; z6=0xl?yEC}<;p}c;kpGe+ZZ4DxY%$PZScC|#)!yHT*4V8Q&y#EN0Lh+cjCF4F81N` zMdY>jEVprRHIGLd>#>|mkCE-vn|AUl`;8~2+_8$uq27vQ0JK+l)5xxb zBpZ5h*Ij+PRso+#-D>7-Z=(WAdDc%!7NuXw5Fl48o-MGcb$f={7uDf55~F6LtiZ}r z0q3@!x4tVfU{t2;(4FM>=dvGp(Ph5IJJ}$(fI(LO8gQ-J>1Nax2%i0cH;uHSqhF-2 z`DHP6^ffA=0eNH#g$!s;Lh`)pk7mCHl@8(m?ask=JuF9uZ&jtw>7SYHVM=S>2jAn) zvm!m#6E1{&;som+>9;MqA15;mLdfsMq$9CP$)e)In1{{1f4LZ1S^cK!dvTpn*%SP2 z815)wFgh;4akCS6&ueofy_hf_ke-ouL9N!^8sTj_OqfLkJ-yNa;70}d*fc!-x5IPf zt=JVEp)>7z1~Ix-GOX|zZ@}<~{*Y?f&XRe;pT&EG&_#5Xb~tCeLeGaV!mSCCs_7>W zO@v23w8CINblF;sR(7RU;8GR^eqzj6Sp3H|taP*;OXg|aKZy|MWVimf`rVHM^CBtt zaXHUq2poqJGyj-tk-r9i`nJ6 z9T#P;Kt`i>foiuCKxQIKGE^P(L&ik!16FlKrHJ)?yG6sW^qshP2Cy(=%{EsB*KP4} zs_cI=Zk_D^(|2|l`b00437ww($ZgX8PN#%|zT6Rs0qJ{^*E%$r>;t?K1K7wgMx!*4BC(N)at(&%tLsn`KHO z6#Kv;GJMP0ml`RoE%f8#{1vAC@y()t@8&G;R%+XrpyWc9ZtIALr?ZFcW1c%R?3-j! zZGYN!vLP%#Nq#Qv5HRZ<;i(2%c`^dUHD8c_&ou0!1+Hrfk0l?F!lr~ROyM+UC=7>W zr9mp@A*(~@l`tH@++?gP{Gl&OX?`QZ_GjaH9s#t@v_CJ<{zhm#_9-Pqk8&$y=-$4N zXr>CaA|#^1Qh5h^T;3UXKKzr*_R}hlT;S8*0$v;|u0s1Uyeedwso&L*P#gS$rH%K` zI6$_smFT6Pj2^QK4`9~$$Ih0GhJ7ykO7Di6Q{9_0NLHtRVCB2^n-e0aK*yWm4vZ_w z1UqNDcB%_%1yO#_21cq>^p)5pI^k zvupl8g@?#y!pB< z%d}*|pc8mDYj4gYOM={hiDd9DUT9V$vX=Po$mQeHPIIrLP|GaA?)yUh0A8uI&CWoLa0jy=gm#^3+_l7c3%@P)q9+|CE{9YD0Ph&CTgTY*1{ zDtBA{OE$J<=QQu3OUfFVnhsG!Z5#273q`u|k=zL5Gn~)K;$|#_0I*y!ee3Y! zj%G3_kRTn3iR8|5b1i?vz+d!>T@nKuH0}pCM21{##KF>5I^HQ8swXVq)Njbr(}-pT3jw=|KuE!sfwlop4&$T?3<;kcO})n`tO%Z-FD-HzKySPwp4t#E@e9L3KrOZ z9A#qi*)PTBMR?M1%z&)>to>9z_dfn;QG~%FM0wmv2+7neR^+LwpvbU%kOz~=NN~0# z3lX1@3&)wYBZR}DR^cUqA4v?>?tNJ{zDD?X>ROOqsUo_(w8gxGR3}B84 zlvJnUxawejbtiVrdB5bImo;#QN0+Q7x-H5KEH``fAW8O~2L7OON&eFY1-N%*ko$)> zQ(rh{beFB>Gi$swuMqu+fI0QQwB1%(Lfma0k{Yfobu-F2x04f^rFS!d{xxx~m0yjw zdOL2*KuY&>4N8V&C6%^wV?US<(2@?C9E|n`SKmOucHsRP)~i!_l51@}0kX9Z{MMF| zYSq-6$`1-=DpkhwWTFijpdT%3@`SWKrQgn86czk)H`;ez}7yvbK*|f%zWb)rHPQHiCzf);Qeeea>c&Y?J<}@vi0rX!r)u>RV zXRPY(gq{rGJ2hH&)LI^)UbEpe6K48L{*N7f*o!2T~9TU107M2&RIzLN_x-0ej8?W z71H88=Ef4Ui1=YIC8+wdjvu11-O8|6M@=U?Ui2-k%D*mzCXzeFluT)Xr|5BB%NVw} zpx6Y7w-0l8Z;-BDQz`$NJg)huEi$4Rk^&$Y*$)^6sGj6tGPu{U_`!vo4tX2P%)b9$ z<#7{`sI$)SDe|7=or9AG<{Y1n>iiZlvUrK%_*Pr2)a0K9cCtlRv;FEI^Wr|kKEYw3 z-|hFG(KUunp00fh@!rYz1PkIRp)-{6CKjEP>*i%j z9_1xXS{C&fRGZ?&5&lTOWBcts*Uekft@{y`L8W)bLyGEIbzR*u2Q2=l_Q<>ce&Oz=J8b?cc;^fr<9gy! zux5QjPw}_Ro2_T=47&hWlEpOG6|RAvRgU~FQ)|-Shc~frV6kObcbTBv=}^?RGVaZH z;7(aeix&JOoz5Q>er?}oCGM}~{fJcQScO*ee~z2Ajw^un0oIwzsHLZG*-N&XE6Rcd z%j`|$N1s(E((bFik^}A470Df;FbmzB^`qT${G~s{4VeXv#ol-9i^O-y$>WTf7;$|M;AiyF$z}GH z^_iAkZP5SGc%1*I@n~N*TE7Fj!*XKTbUNEit-tN1rgiayC|Y37>k1&{bw~n;u@2c{ zuss@l*xGR|;s44!8qyGDg4#9#RFO+@0(t;%LYn8?N5+<-9c!dJb-5gR&Rdqt=BU!+ z+E4tHv-)&z?-;A`39^QHs&HmIAW_aoH%q5)VXgUn0cY{_1-uVEM*kgY9V_;(Nm#il z=DE^#QY;u3>zL4O;SZro%vs5fV^}Q6QcQaMi4e>E*q+_(O~s{e(05#?w#r)AZ}Z_GfJbYvuBs z=f7?pA8IgOr&QJSJn>_z?KUri2&c;R1B?c^F8RWO3tWD!2@ zABmJ(IC8EKV{OT-q%1pd`@df{dij=qru>+8$Q)mAV+3_y2pva~&tB~t#Gyo!|M_+y zzn}AYLl(GtG}ANG5GSx2@&nukIyDc`-%ihIDJu@Ma=g#;$Nh!#?0+>fT?+PJvwPUp z%dQ06aOdE);Eu;?KjydU6HEH1pr#8_sF#rB*(*AXl_64h#M)$KE>1o+rHG4lp^Z%y z%gR`&vK+EiuW}H;qT4FLKk5EIOOj-XLRYf;-ca8e`?1lN5z)RCpWDc0RL?~jN6Owd z9}H#VIAJGmV?4f2Svtp-BF2{U*AA)9f(C;F+X*E?Us`Qf+NGAm=M+A=g=9@uS@|Pv zu_nt8f1Z7gOX}@xo#=6T0OWo_j5C$()#Z?n&=AXGOyBm_1u)*Z%~sEWP`bdUgI%|JUP+ zc`+54%)2qK^s`n-_|Va`Y0yjcm7_K314a>-&O2ZtgD(NiKAY-M+XdVY-@K6wiWC zMrUWe%xGN9VgIG@_pm$E{y3H(1oe$}>8VOqH)q|Z>^L}ptTQZ60n=?R336OSs|+hP zM$aX<@bc!+%%jY~pO@=F{gJ=6@!|Ho6R~0s&(O!H{mNxa-5c7DUpm-EmXlr2SlH^8 zJZn~YwH)J;iPxLug4>RdGcI-O+?_;~2b&-ocB<_tgJEBjGz}k7B4)l6i27CX`APX; z8Dh8PmoA&#?OBl-vx~6$iy1^>#U1#79`aWl<49JT=y+&usX;;8Fn#r^SP%<+$+d1* z90m|bakAhw$p4MvX@LdYUL~8hiz?%=nwIMV{-6)02iEDPO4+8m8t4mF`Q+_(1+=u@ z)TkpO%R!#D-16t+p%xRRvwPM@G%fE}uJz3xZ}eoaihP#oq0T0wF*i>;c-#eI4Our@ zmrU!Q^;&FEg_^(bgUy{{&%D0|KE+)%Krb{ zXaOWWZ~p(?Xi0);!EZ4~A5M!{X`cH1*W1+n{)(L)#a1~Il5dmIcR#X|HO4->q}zej zuZ$O$;w*UNe>L&m;g!xF?h|P>Moub%m0i^3D&?y6%kWQ%B`nk>tWzc37wDBkrS+NK zj?v)c<3gp^YUTA5k`t=(oJuY~YP&!cJTo~JyBHZ$Xste0U9+tq(*n6z;&Aqjci>MI zMZ`pc^&fxO9$SBoGH`#mW0pu|L8K6=jQ=M`+F$Au58C*r@UBaYZ5whNIn{{1KxwO(JRny4RCvb4z&Bo19% z+OSqAg2ItUTmp(8Qg)}UXx6>-&wcOqwiS1xd#@EXzCGilw=2?hG=^!?4{~K`BvY)Q zN{M2qZ75~s9SIbp8=RX5nDiYdUo#91k{vc*Pg+*u2M#^R9#)_~fUM=#C0VSkLS_{5 z2p%;Qa;-LGijldeY?A5*j(K7ofAUhSmHI7(x1B*>*(oHblJ$ zI&PN*G_)FfdW~9C2|n@PRwUnKDdcUh2*;YpoA7251AGXZqV5G(ic@YJ&gzi8N|!#b zeWJ=It$vrw0}^3*i4s-DRCSrV<9RpWD-g;Z(|SQ&+d#>EgR;)yWI(^wiv;B7(x4`L zm6MQv@a+A=C`H)J!6_|tW-gQI)1Zlhs+!Co101JAB?K|29 zRK{3&EiY@FyIDc-f_3gqqzzF|HBkAg!01o;z2t!KEp}lbdbDdC`*n&}%QC^6ACotC z^kI9lJO{Iyi6Q*Z-c^-goSKbM64|MVS!mj_H|j?}Dq^^_=BaA7|A_qHn#U$uc-*S0@i_!pf4}IJ? zNcjME!SQbAEzxH_E8ao_H5Vc&?DB)>84O!E(75vsCHW&jDYN)mDG*XHN#M24DZ8Gc z+-<I|Nfj&7X4`M+ zZ2xWloEY2s80kzIE3TeUP&uvY3`@OjCi0`V3>7#!|H=rX^<3%xd%2vUM=vH6aW77H zzMK)?9j9v2jeG08vZt9-j1<=I^KC{i{}vZP(1JL`UPn|jFzQ#g#zS#YQPCqAeJc+H zVx@}ZxOGCYj*k#KVu}^h^({a-giF&XW$)G&C-QYY-ze2n% zEvQ_M-hybyTNiSkf|1dR6!sY)`N~kMUD0N<3v_l%_4G&Lg5sgYxWXF$uiF*h&sBSN z>rN)V#%|L77~Ht?cI%iUsgd|st?YV8I6_`jvAky9ou5}Q{iBs1{(7CKvxgZ5LbZa%6zDp1P}mpgwS zA$%smFsLqnTE4X?Iq9vkbrUKQ<^bkUGMNYp*^?TtkZ7p8Dn3@(jf(I%5Vid$*C;TH z@K4J0#xX0qptMqcOXzY!*UN{43c^<5D*I@$a*%qf$z>xNeCmXpK-}R~w6VZI;2Bfw zmU)g(b?B`V@9vqZmrUS6TwXI{YcDb;Ag6E|rWw{hW9VA6{=Iuz(n#EVK3VcN(l5rCxMCf8;E9y{^24>OXL9)IZy5^Qcy#;+YYIc ziz*Rb_*#?4;cZ*R;cw|2pL3S^6IvZfOK4VNNtUud)t3xB<=yYilFIfYB7T0%My-tH zU03)jTj2nM!Dl|$_uP4705s=qCe%bM|H(K^_0LUY$F9_zRkX`-WV|4msdSgyYqS21 z1M5HXU8k;DcD;xgD9RUwGyYjSDQy~#3<0OsZmT+if0cn?k}qF%M#`2yBT;riyJP7| zD4`jLX>XH5G3c>eSH8&jwu&RiH_jX_IdGH8&Bqli_*-4FoMnEOW&YF-@z1*1@G3|6 zk{!q0$4RhsnGM&DcOG}n<{pp}2Lk{X<87f2dZ%lANrH{#+H#{wZADTias~uI;HHDw zENI-1R^Beg3892iSW-L7-({KOWiyy==05%!r1QP91+{3->N$;0?5dsL_^I%@ww_%z zPT{1n<&UgprFh&}t1byvUag%rBDe%SC)s}bFe}y|QEX)L!SAVTPbqg#-`wFG|DDDO zA51&jELF_tU{<@eu2dboa8yv^YaK)=s7Z(SgEpvmuLcUGlMe0U%7GOVxIDpX2qwmJNM?AzAH;PepA#h3m;qZ`&{E(jpMbuahG~e3 zGZMe3b&kYmKJbc=U`QUto;_JMG5+R@PJF6rPNp<()q2{5dKW&PbZ6gU&rAk>+Pxno zO-TuV%2h@ciO6DY7w^K|{yi=|ewB4CZqT=6>Px?OP2>24BZbRoXc( zhV$8vMSKGMis4(cy&WO+tF5{rZ_4_KeZEJBj`|+O8+-CbJW6XbRF9xbPk2;2d)N3+ z9}P}(Xfs&&N)!4mX?A&6Ut4WSR?|$N@@I9rq-loC7|DXuT(5`#q^g_pibE_4DADxI z=I}H^W=OY2+->U^V;gzPd*}(m;IgRgBE$x&AcSRx@AUV`^nLrbUNcd*HYuL$BTsf~ z^?Ll!DznpTNc`CZ->EGun=hJ#SdN#^CXAu*3EpE-I!jy zIk^KQ8x3XDFQN#8vx#OxZ&IJo?xq}>P6pXpjb2?zppQ@6va4(nPtx03ZRo!*wTu7y zetG@rO*RK0VMo^Kn|gl$eV<}4_}#PJCS;&os_Lf&Gc~)jN+#O?f1A#a9_5A>7d510LF$P^5rXH*7o2EV z?+fG+%Yb8+D7`;a5L-!6kaIu*9uZ)0JH-CHmySaokAFX3hKCvDc~Aa5&Vy(Aucx=| zj#5}%A{yfVvdW5A?M!Zr+v0et8^y>Ya|7I@{%9Yrb+ILbTRilFjv-`9k$q~-kouO^ zkg|6S$g=7?^0f84~b#Xu(s z5Foq|oHaX{JQwJsp@@*Yw4CAQx;Va;;hk59Qq5U29X^^aZk_e-r=vWcj?eCyOfYxfUV#Of73zq=i6coF?Nz>uG7-F@{NT9eJIcL2vCXvEvPXiu+O;mqg?Z?1~ zkFs&gMU7cU-dv2Fl;fuWDmqxh-5%GQ0`IxJkBQ3&FE@z=pj>?8hc7l88v zli@aKy>l~?qPPdrcc}1=}Nm6r? z;OANpDib1?H)#5oh`Dnm1|HA8N5~iyece2@vBqcch!4f$4aiUm1gjftxorA^BpSRi z^%~yq09VkJZeM8bh>=F2j-h9LT6p9lCvA7VskSPHelgJ2TsPs|21^DF+XLvs)7`iA z3&eNy2DCaFZ0})4PW7||E_cqo6c4@A+948Mj0I7gLhDGw1P~-yK-)?at89@2pD&FV z_9MBe8TG^F>>DRZ1J_!N^bZz~YSv86Tjnftj1(ZvYt^euysQ+q5Z&-?kkZZLzn@&j z?zC5y9fK_=6s;F`uZ)%}26+a(;X>fn1PGb4lWlbzzv-*-)qE5Vs8yQSf6d8|zUp^{ zA2=W>9p6dicna*IBL)Hi6FoGdUNN`Oozj5lH$_d->cbXqkwwz7odAavt8AAV_#18a zn~hT+=%qcxei;x*5o^1PS3Q9(XaR$9saeP3Oz^SA{zOmk#oaoFL)*#{&mt6^{$i|< zhM!Qtd_!~!6r)6EB@~)B$GyrZQJ(o5<5F^=Ev)P2dLm0#STC zaP5nO6j795!0_Z0}%lAJF0D09)7g_2=Bo2?L`v3wDfv-X8IWD zY*@)PC!_VlLiP{+q*?d3e!PUD+BdO##&3dr+*7XIO$0^l_Q?OxDCCkzCMZm;<}4U* z_^D_{&MMj|K2z|~T>&b8o`;mKeIb}}-ViPnx;W%iw<`HYlvJ00hBrXs5|iv5Y)?yV z;`&PZ4i)}vRGxNWl^ z(AzGL*`4SOWx;*x9{a%B+8g&P;v|!4xeYWyLM)apbTxbumZv%HL|Q}|U;ZNJ<>Tjr zL`4Rcoi5s}?1{PBT@m}$QGt4R{n%LYI!}NxtNXTB^9~N^@mIHrfkQ6^=^LZTnT}Ts z#YAs*Qq~{s?&sh2Xw?2)S&^r-HxGD~4v_8bsLg;DPgc<9t;hXBdle2B4&OZfQg9uu zWj6L*PK@1P58vk!s6ryQ_lc8xv%ijz5Di-5w#&FVQ!sU_vFKruHPhxM(kkt81hBy6 zaNb)@xySt=v3H;xKt~J%U3Ts{K#~FbEo&KWR^tRyBUz2fsJzLq;SP$$_bEtpDZ?5st76F?QE zp|&e}0}x?hF5-s%mP2guFr`X8f~^s0itvsYOT04!-U_HR#o^6OGYZsttn;=@E%1@*nDM+JFO|&SG>H7^kBOF5wvAsdS_B(Yogi5a7MAs07L{O*_@t&+ z1+``IUBeIIrG7y^g8l?CaN_1|CDRMt@kaE0SQ=SmL?(+}(-A(iseZ1s zD>bI1qN=$YU%8R~#EWcekH`x4J&rRD3vq96zy&r;s(jlkAM_SvZ}jH+W+v>Uv({` zUGN7=e-}t$Jb4^0~JP!z>BC#~zpB z68&*i0RABL*2b4iDa(6_$%4T9rIRFCiUrOhF-vz9o~pJ7Sa#8;yMXf_#?=!6V~{9J zA`&4Z(^s&@Bk8rbr&38_anOT78%B;cLCuTLG<%rYPV&LH4|DZpW%8=3xR|NIOorWY ziiouF)DMOGC$5=WfnFYEvqjSnjCZq?ul)v39A{GAezd75Gfgl15&j5^0KBkR?*wx? za+q=6vYqfYrCe{V%5WKC#o@DRzosV%r`KdA9D%o&uno1y^Al9@tgOwH$`bn)&NR=( zgD_(z+Jc`0U#^?;cAEVD*mU%!v+bDT%NxxBU_at!{r$UXT|A~Yw@g3b%rD0Or6cJP zwGMgkT25)}at+dCVM^DO&&@q`BLgext5gp2SyRN)jQ`;Peg`o!t3SYvS2>|Th!Cau z$OTM>qr$?3HN2%jz_X)T>|?S;H|_N}>yiRqZV}O2v8>;Z_TOm8lyebnt3XWS!W>%V zw1b;X3zz@72O~*i=yEv%-WaP#vkiNV1w|b1cn-|APgb)Xr@fXDU-EsZ350|oz?Xf> zay%2@PuTIZto93FTCUsy0j&g{oC4w&tr%=N`MT5~Z{xkGRsTCM9Ocq<;||FW_JI&Kz##RWR|)jLSzNtTv*o|ag^cNRA9f|gV% zE44BL3M?*Y>%ZfN-1s(`8)83Mk%xPoFcs7?(cdCa&z~>YF>R2gnB(3YlZc!J_F|5{ zz{Pkx9qig;uL)>>+WGOkLf-wIn`^=WxJ)WIfu=Q=Qrf6(FD(B6R4=~y1F>AKGd%<3 zf7=tF7hRyF0w+xppxl(n!aG**6#qh_W`A>wx(sMyi;0}-r2PbjGMSY}e$BdE95GUv zZ;pc)kuS!8T4d;6XIAVP_iND*1WZN_qo!J zRI+!FEZHsdo{L+_CN4SUuhN-pX|$qKbJV|^e8H=)(stZqKc6S|11Pco(yQ;pz3mz( zcdrCxz?~G4lb+_R@6zOIv>Tfd&9c-a%+#*e!n`E!qaGwn-onQcV}l}4u+3UpLGAzj z;+4Ic{NecDb!Y&f+cr)kCtaXLYBJKUDII z1+Zt5i4wQFEvN*R@Aa?~4SG9R)9NkGo=jb5-DrMDvI%DFKf((R)V@uAK7iE*8X5AN z+Qii`Nny6LkG^%%y1y_~{L~Qx*w9 zl=waQsTE^79@tg5;4ou|cl?i4xNv*&d!p83Q`%>J6c6_kKNZ1lbEsL6{FvU5`T>S6 zQz^$R-|8Dy8$P(Y5A^H&sTJ5H&0^ zHq5qb6?KLWg>O_*WJe3Hb;?c=1W2Z88L;qSkWpjZ_R5}QSkdIg80GDgu>O0at{7&o zLZs#XP}`v1K-ioJ%s9Au{QC(n=kPt58S|5?=ZjDK#4pFVkn|Wvsmdnx zvZ3;eT%?}A=I$?miew(idm zCHApZqj?A&Q)5ZZT^zi&n89<;k;BxKpwSK*Ajm+l-%Czl3GlCt>g34GhoN5X>Cick zA!69(LQbkqb3ycK+eBSU$*UcEMHP*`qQ*8YpFkgOARZlQ@t2#OgT@MM%RDee(y^wC z`86xN!^QOT>Pg(x`n#lRe!reh?Tm^-$6t3OQ;OyvFFHVh!XjC%=Q#K-Mq?rAS4e=VMAX&%K}a3iLjWMQf`d=rYqdtY8pcbwjH? z(wROriK~SLNPC6t>ZI;>EQ@ur99$8cQ}X4M_@qo+InEtVf&)8dhW4k|Mir&o8vk}) zb#JgBvA<70^0mLqsp2Qu98Tn8IPx+UgUomn@NAG`?ztD8<5oh+*PLA9nU>D!8J4aK z(gM1y(38nP`5AoTVV?)O;a#^Hr0AdddqVyCu=sbKpjmOPkKiN?WF#JIK~ zU8i=kM&`+&j7e$1fF7H`s&S&28wf&#LWtJsR^qbbWkLfv-Veh6?-9~Y&fzDpKDBT? z;^Dqw=SX5Z8$;(Uo#(H*ocO>Uy_>%39$ecOOBx#O8^HQFrBaKUxN{#oBFK!^5M)6r z#RP-!nmBx>OZAM7W{T1^7Vqhrdhf#|vXzGaaAISP468n8E)Jwo{`|9qQ8gU-J0ev$g_rdPlqb%Tlcvcaz57?(8z#J2Fi8oM->XByY(JF_v-IB)_H4T6@)j+@l2O~;#SXoW#DXT* z?JT-TpzGRGQ#!WNLjsGm)8e0E)Hy6kAmTBUR_BnLDFbH zQ}8m+MIBTue;`K8Ec)Qv5^~1Gn#gT|z`XRb_)4C9r_mTj` zdY)?5$(27wKC(!JknVtQLN#TnTb$SpV84K*hl$<2f!t+T0|ZIh9fyQ&whvA1mhXsR zf>ZnR)z1Ic5ezq*u53lN-)Bfip(tdji5`dhgT%=nlfzK7kJYwz&Gy0OzU}<94k|i}DE2_tmy3flf;}o{PLn?)QY%rRLUj2(C zU`g0y$rxbaUT^1t* zj)j&-qHIj|P2&kqxxZbq8e^&SK{5`zK78Nw#7nl*$lcW+%k&>d?EIRm^YJj)9>o@!`DyTOOHI=+i@#u~2OZ`;P3r0cXq>toopBw0kUF&zVvZ=0 z^`9)<-dg@Tu||NhAL-sux7V;QL*0sub-dY>ksn_~pG@!QoLCEfMzhHjY|Ep}Z=+Bi z3dpKf_T1Q^lJBQ!$}v zsBc1o7q8~`jZ?vdKnwrcJln8-%NPKuvBMwLYu@Z-Ir(ZE7bdY=Q8A55U);+1q$3-y za2&uW)l$0bRn`B`aoitM-rMB8x&_c3N+JhOpHom6@+YD>YFUR`3ENN$eREEj43MM@ zHltI(7(V*aE?O=To!)h3F>+9f>0b6jKR4r!?jFyrdf)mR$u!;SJfl$3=Gwa+mR?WR zj2{-A10e=-&&$&_1|Qxqo34VAo@SCY)4Y?Bh@y<`>5m$QSR!Agw@*l~L%@Cm6MF2k zKjPTV;L*7|)oLhJ8|Lx>F}w7xXky2G;>Tm_{ki^P^*SyXtl#5}KPdz`N{ws878gLC zuOx7MSSjE;Zb`0sZ`{He)%g-JN^}&mxt7((4apSeFc6*FGMj6hLK5x_{C`~ic{tm7 z`^JsWJu{uQR2ORBrbQ9^PKw^8qKOJgMC^*j617vYlxb^Ui-aN=B_bl$#JxG32(CpAo|pOd`$lA5!eb*M6iwXxsamL-eYj+1wCcPYf|ov8d%26P zRN&&mfi6&s0_$O|qvi=nU>4=V=ul}%*x*Eff6_{Ldoaq!X;2TO6K;EFA^XP$I%Ig{ zc)2Hvhi&?b?j0?$@xePvaDsX$FtI~*Z~Ch`PGH%L>CR_{wAF1TEVKT}O*wx0%`4HjjQk3sE-zloL^w2m3KKK5fkWdLg6j<;W5DKf!Zn zu-Lk4$#^?vcjE%OKT<%6@<5F29Mvc3vU`9OuD%fq{kMOtM|-{4&>T zqFuHKeRGj%Rd~zVJM-&x90IkH)1y0B>Q6ehgJGp+-OM(O(`;eIIBuSS9Vw-DIos^yw4x|IWR--pcd|v8?Ps z%sD!IaU~;=Bv?Ohx4s)mTviB-OuZ}%#}(C4tPKb94*aRs$)WI|(&i^`tLu~UTBh+E z!9QnLTm0+|6z4k(j*Ctee#)`eQ@+yOmK=lLeK(Xj@0&afdb{{>z=dOQlQ(ZCKfTmA zvExTc&`)zH3*+BPBanwuElDP2$*EQh|JhRWk|X^WpSqe(FJG$uBil#ilnP`Iw@HlzH-f zlhK*3u0GxJesgClS{+zpL0@67@trdlO^#-M^~20Yp-@e>^NoD6TSS7yE#ZbjaNGCy zz`q1Tp9uy^0#S9XNw&9MpS@i^xO!{J>DJQxP?=X+`PNd91B95ZQd|(x!YDBFl~Ks*3c9=s|FlyRGkCK4)%7 znh1iD6#K|1c|C|S2x={mGddKLxp-gRbE3dTM%TVjA4Y=1VJQwo=@opD2K_58%rCfl zvURJj&3kCihW5Sx^6hroByC5tNAx~F?O+Qf(2#d?(cg24Q+*NApEd0KY9cCwAI#Q^ zq=5oT63GBq3Nsa>n>0V95%hOWaD{c>K!$uY7uVH*A_D@;izpvR6xPmegxE)i=y1}j z(XC#eEZSIx@;_DfLi?(J-{N%Xx0(cAGX#&M2G(r6Tiog1Zk674vGeM*?+r)cWf|x) zrMa-9?==gy&NjK{%wO9xpX*#?gPwQU9{r{}wAGEwincEuC&%?Fy$z%E2w2a4gB*+A=+X~^`C^?xoaf#**F1CeF3h?wPwroq{J{7e*7yO||< zDH`4Rs*r!0?krw(V=GE2?~>x-U12(fs#W@dc4oJBK6Lyr#>TpOMl#77G~4(XyS$DzFo(P|i^* z*}-j;_rv0D-@9MPjteLlv$6ZeG9s)j4?;AO@}EUE;OBgxz=atz6G1OYsC`vVX~q2j zt+Jfp$7Y<=p@#^Qrpawht=6=8+9#hh!O0!^rCuLVdM!TmLB-Mjxr(BphM=_%h>8hb zE1wK6Z*!1C_MP7I#62gh)f~!$!J4F-XB^o?so~ws@Kb8(iM^SL0>q*5%Z{)YrmW@p|0wGMlkmlgi1*gT|-PGr7O}$(~)cXguXrVVUq%&II z293R2ZqMtD&;rFqA{~?fwQ&EqJB1Qjw~P?pIfd1oP^ANM)1aNmkZFApprA+rS3K-7 zw1VG>Pykn@GJKTC$g-Csj>eCyau-K<43FfMA4Lcp*f>HAcokxju)|FgpXn`W-Rqeu zXl6<1C*5Yce{m971lha{J9^hoU(rjtMy#j)=t=-(r4g~zUu1Y%tR(B7<-DO$TS z!;TG2a%)N2vW#2YGMiY#^Hja1^0Si0d9tV9E?bcu8eL9eUVjzvej8&NEvGY%+S|7ZMliKwci!OB8yYa67=GG|?!+k?; zaN08K$bS-C<+%t@>al)%w$;Sg@{xSE$h|jGz}n&Kno={lP?qm)kT&%s;yG69Sv*)+++?)Holiq8Hjkj%%P`w8DImpsmd`AiL z3XXsv(!w>!?G2k?K=0$Y4fC6&%Sv!Kzkk^=p*)jPHFbIeOO zXMbNrZ+ZV>WAAyerD{J@$u}s|{K_$LC36LDQ&Q8pw|QTQ(#i-pqhPkwFX3JHH_=VU z5pwzlwORqed(-6Miz11vO{0mkts%NT3Ronoh!kGr8EkeN)SL*j%g;^N2C&B9K zCw(HQ`a|x!;HLU~+a#DlrHC&30`)NWMREH$D|=H30+z8({Bs%-5}{vmw=E z-?3snW&lxHb0{biU1jv}J8Q29RX zD}kPtZL!!<@Pk;)i5KNJyoS|TE=(jv`_4Og0@ISO7A%SDIM-Z0t0ygN3IZRAIMR5* z0S5FD{E`9C%f&iR9;y5^EsaS>%R9#kY1o{eHpY#lp>w2D|+~HCQ~qEkiRd#+yathT`KkUN!VAHo~Fixt|ssxqyWRucNF6DT$bM} z2;rTprQ7aPk)?n7*<*W-vj$U?5Mq{W)^6XsD8-43Hjmz+g5GU5{3v`8c>B^Fx{%`Zg3?Ts?>qQiXkVtWBg$#<7g zlDhKT;O*iU5t%PJBaMyYbS(W$<3XFXSv2t3-UwNSF=XDGK~DO5H(%ix37Pw33*mAo z5sm-3tk~slQ;80T@B@}=PPF}!`iz))R_N?yDKN-z*ldvm2qBxdj--0dTFtH+Vl*rC zG_!mVfdMd|{W()_XRC><)^Rh`lVy=l$InKF%vu**W!gHXs6TffM7O>LT(6Gp10uR%#5~J>`1%pf z4NAP{0aLclsqG~jsb{XGY=HIbE)mnRd3W+ z&0R=c@S?<9TGT!%A#Bw_a01Q6Gn84%R)r%=S4D$pd8rHe7zLZbxlFcU=iXGoX9aQI zC3~SAf&Qs|QOypozq7f`L<^LAkb5%|8P7CbccGn0i(emq2QguF*;7Jm@ji@m!Cb{p zd?_$0yt39N-OE~ag@Cpu0uO7Bzl@DT;AwYaJ-ChX3WVi5Y;_>_F2l7v;QR0pfF9Tp ztOtg`@HtVQX5O>2b8bdUOM|mKcWpWvnJNN~03NWofY;M|4Q>+>BVLLRGQskHZRltR z0_S(6`=n@HukUvmUrdOa>JY(gvY5T6!VBG6#F${bjZrm#vp+i}j|7h=qcR}^IffW@ z@7z0Yn=23N16Et$-XWvH_6v>X+xD$3d*5>Sy!IY>(8o$YJUt9~(<8H%enu`etuP5w zO>JZS_Q_$|Z0+THT+o#>i?MUCFrRv03D>1yiNfvuD; z?=}kGDeDkwghbZh^HP@Pr6;Hg+C@t9ZY8aan$*cJxG4K$`l;fv=+Z#Kp*Z3c(OY<( zt$0l`mhKfCz1`h$Yry2O^edG7VxD4CMf!c`53u3@VPMM{KoiStxpPf z9daBel;KiKj#3trzBC^5#i`(Y^kEg%>sG_B9%eClYw{u&YG3#ox+QY*gPOjJ9i()P z;8r$RaxR_-94m&B&;#%L5Cbsj{IcU$p zp}s$h`d(zEp~EN^dxxok!b?T62~(RNdSp^ihT?34*unj!gC`kPE_8H~hF)V!V>_?ZKcZiBE$%Hz@GV_w z)EeCEFVu4dJl=GnfJln--hpm`KRF)KoLJ_|R;_J%8`fpZn#~b)ZBaUM10VWW(yRoM zj(PX+0cAFrByJC{Ygx-`&zqF%={FQV?|1rj&pBzG{q+16TQc!5LXa6;pa5mxd=?<; z%)6j7L#j6>g<(X88tYrqJZz&D$`-x8Umtd_ceH8zLU38m;b%iFuDmU~rp(y;7?0vh zBIf}2u_-)qvO9Nb^>^p9@Y-*ex3>_K%SMz`;QuXS)j!?kjI)+OvD&*@#(7Mz?E=JZ zc4R6O735I85bz_p`}_IT*7LE>@u$mbJit$ubb8VncLAiw;$Sy;$4u zuk+ms%M2Vly z{gtn~E!!_$<7P@G7ql9b-lgEazSX%hk`n)Dpng$Y;) z12Pyj6~X8W<`v!xHrR<&h5ixsOk~-rd=P}A8-yb`F|oY&D>0*c9YY%APca?!2VbY| zHZSurO1-o5o)PxL{3NxfH0Tw}@v%zT&N|!KsTV^Ykrd9S`%&v1 zuBq|mxKMGX(E+IA+2F<5s>o0IOC!9j<~7)#7EvT&fTUZ5NZ z=O)yTmopyj5W@cZOFv_|TEa;-DWvJ^q1lEKUGz=$dQt=0#~G=LS!-Z zzLhQ-lO!DaO~L@T{RN{k$&2y>JP;TsbV;5pN8dG!@{m7(I2_)@47Oy%l#Fc^8nCHF zF)ouzk;rQMO$lW-a*eWN-xPAUG~Z@|Hf(0uP}9-sA~!rtr=|LdmGl36U8^RS@%8}5 z@)hG8+Awk^nl6tH3w*cwZ9Rsl>%w_KjY2%TAld)Y|Yg24W>FG%Mos)ICCMWI|(a?-xIu68iID z$$xr;f7b^O*9)!MI9KUc{|9CrfNKUI2iC?Y)&)AUoc-IRSREjZC6b0giUv_&j6PEK zXRmeLl&7i_%ZcYB3`#|E-Vi+p2)+5RE#{kbzI9<9_?F{HS-fY&Xb`veQ;?+ zPF5u(8E{*)Fg5?uc{t-OdbyOII;T9QE#t*ig5rT*Vu^fwq>1tWijt9ACUnlY2rRlJ zl9KwoMei-5Vm!oAb*NZ=2rurcp8pY8ezI);y^5l^$xZV942ryi@fOwDtq$C8my7zE zOfqk}fxYHDwLEs{k#0S~3;u~Dd)7Z}L?~u@<+S>J^?CGyv1B$!p%8KEqc^{!)Qti9 z2Lju}>iR|e`icR*6LbPEHL;)X80mk@Y30=e~Q0iq}Nhwv}h!- zA-z{5_tk%oqtZ+Iv>5X;>2v50yI(VJ1+2LX?<%7UKIgputJdVk(>R&rNYs@T{{2Gf z5cNvYY;~#p26- z0lry_&i2D%JVLOW@IJq*$0b&&r3f`+&CI)DCxTpi+imxT0-K*4%cBqXtkn2xn50pW zrbL%=>yUN%dtQLH1AGO<7xv2P?WBy5SQr$QGr?h*@+^4^Zq&t?UMr$pAi<7a!j}VtNK;R1c>y^*ECL%W+r;qT)2Q3 zAXCuZ?73w7ds_ZNZyZ?sOFZ}9N^#C-bmr>l z__?!$;77hGw=SLX{ZkhbUu};5=mZfOdXoeT&Vo_2De(0`Zo z!EC{S@XlD89Nj`-Yc?i4a+ZHJ&v6sQmmEPc*LXBet>SyHbowRuOvR!BEE@DXJ+=9D zYvVKL?lzsj`j;v`?>}n2hTywmF0xOGD{ChLj@v-W^g9FxD*&nwMJVAH+8>64;jy~L zdD#|tRt~-RuO6ciw?UolWf?guGMxIbX+%9;k!T$Xw$IAMw{v27(n~Ofx29L1{nOAH|akrVTxH`3bYaz>JZfJZz3z^WC!J?sb!Czip3p=1=FK5Ov@`2M*30 zp`Di#bQlPEFpX-Q)-VU8?zX$?CCS0m*xYe-ip*=>$&%SFTNS!Lt1p_%00Fu-ZWUvs zcsdu3Spp?Ui3G1=nUmdWf%!SZ?lVr#NpTnFSYBpXnq92op#o(G0}GE)6ChNwaIiPM>)98n3#mbs39iJyuieabd;u^b;@Hr3v!K9cg`m!@vj*4Dk@^ z2TU|KlOyy3|2h2km%70D?#phfRtgn2H^)kbFGzZTyR9a5bpv(#uaD>1A)*cqZHXG> z7LL7GYMVw`q;B$kwo@n3G$4X_T=#@FsXXS~i!u`aN_V|NJ;w*BC;F-yS=@5R3$@n! zBUw<<_Y`-e+KhyK0%0$3h(L-Vmi<~pOI6g=3**-vk8g%pu9Bf#sw7>IT8f`=CYm34 zd4f?>hkvT1XkfZsB03J15eh6NH&H-*#6jIIxqeuTn^41OpM=!3;VsW~)U=l4{rsM> zjlQpb9+@z7@$AFA2bbkvKYRrh_@G4r4NAiw)WxZ%9=53~=Kq#$T@o|2rztlonAi&; zsM4CnpGFdDvjQR+XC<>EeCb`=#BF%0jF4&M9aIjyyyn}UuFY6ETchBfn|VLH7Zf!e zyj_+bulRftGQpuPYKh5g$^Jq`+MZwU<(;3#6wvvt9FUKf`F!;se?wDCHl@vdqzszw zWBZY5x|v#*HE$~c8B@6^o)y)B6}2?vOXnFi>XjBqiq&3ih}z8}C36e}s_rvVNz#GC zD|f8ngc>TR-U`>0F}q;I`_AY_w^{c7TM|@kDzG&xkU$Dg3OvfhKbQnV+|vjAB#%e7 zy6#;IzMFnyGjK!uyN2C>E7MirMH?#Gm!Zo=4IY&+0|)O9jn@*I3-avto6KU5qkroY zvrp|t+t>+JQ^!-hLF$~5%Bn7AJoSPeL>JqFmp<|AzhN0QqE8!tvHUr(t&=-s5`#V(FqQ|1(X?=^T&2aC& zJ8ylIL(KXUoIUMAkDjGJdx16<`w>!@L+W|TrlAc7Z^nQB`=1{OR+Kn{vZk9NV3y;u zWrf^hlCLN!48`g2aay_330%pbQ`MbTf{zE(H_87kUSpx>iLC)(uRy<%Ti8184uABs zJRD$%3Ld~O%0m#DG&ub(%((>?qpCTYT*T+Q%C?w|3|aE(q-pIui+J~gIwG5IQwMxT zl9GEW-(DB`@_GJme|Y@oi7P|nbJPveq0CkBq3KEgCJ{}^$;b2ZpS_>EUCH-qNh`4F zha&aXVakw9f(l29)tqaNxHN;k8 z7<(NncZko0+Q;cix)o|jjShT=1hhA4}N!cclUmVEgI`X3p+Z@ z@g$J{>V`I46SUxqBLl7n5}j|Td_pES)RO^|0Lb^VZ+J9jEModwcPmm-(Mt-hpwduERYhlteeMt^i|5d zvdsNC_6;?)lO^=}2J0riT;5rM-a9S|CFdu$?!Q9V*!0+@u)RNmOi!gQav`O1-B!6Q zgQI7+-~|x;+YK!_NFZ3Zt6O3?LKzA9pnqjomT@a*?VJ4Pas<)hT4FyU<@RS*;wt%` z_vOBR|4EslBH7zkC;XblDjZE)y1qvMJE%`^{J6-Lle4utk`)o0!!!vn%%yfep4fgg zb~D4L%B3k=1)!eDrD`8=>A~E$rV$~|*7ISg3Zt`5Rpr9VA04vXarjFkctz0Fx`ck-M<92xJqYuCa9z+}O}oiN>X!sIQ-TTX5k8txf0LwBv{R z=9S)D`j6h-DGpQWcIy??5cdoVZ@+d)-6Wcz)^lQ_?|kG7d(o}O z^5kebFCE<5J|6#(wU(pVT=O+nxEp*BVHZHXvso2blMAwaNd~k0b;F@Z|Jp38iF_-u z=h^i^kz@WTCwL+t1NmgZWaKIKRbQbjQzax7-qS16S5@rw`OMF(u{j;q@<}}YC?#C2 z;ZH{GFbNYcX{Ggt{mXpXnpnR-$?>F^LW>**4?>gp2AbRhU&S^JF5&&+HYf3u zn#*9sS$BM`Z*EB4qq3Wuur%j5tM<~`!qFL$WF@Fm6Jz@g<$o02b7Vf|ADmB8wmw}_ zN!{j{cyBW-crn&f8ur-mu*Y!^QovH!&>d;bq?d?mx%+2?roZmzKaTtO#$MRJ@tQ@S zi0%p6#@2N?XUV(261P&~yfr~?+04%>rRa{pj|xYNX74@Ct85-EDzyE}c0u2@n`wi` zw>i@s7-vLO$pz=kulW@v@`h1R-{?hem^{O|XHknCGWwUMB#*_Cxx4wVobK|$Uhj{) z&hyb84A$v_-T03!i1*`jTUz0!+-mS#QO;vSCs=E(m`2au2*sT}q{^+HvgxiMy8Y)? zWw0vU)AVN9L}!FZ5T59_WY<715gzzN%0fe_ib3yKivXJnEk|FAu!#Vx`JGCKye#|) zYFEkrxI#loGO3d{_>;Kz^%?AP?-YCEDBL_Y?+*3Z1MNb|HfEKkCuqZ_sU{yO-a?SF*QvTo3(n;zN);40Rx_rd!ZdHQvbN;Uq>mpB(ru0o2} z(Di^dYR`;x#s9S^xA9)m#Y4LZh*alrZ9G*kLiba4@+w{uEqA}a@h`2Nr}NmVKIV39*3DnFHOxrje_@ z0c4BJx8)_MLgcN>J=q=D2G3-{Z)i|(lH+aYl-+WDCnPVNqA)FRWj)D1R)NRjr6 zd~}?%yz%cZo(Xhvq-|vZ0^Ho*&KWO!8BmH{piZ{=TX;%cdi{{BKzYOb-c_rUn^GO$ zMUd~Q-8)Zns!I{=TGQn+lLT4KpVN0dCvfewbse}5SRUc)HI~^f`$u!Sq}0&<_bitG zC^vX)z~vS~@UpCmpPtdr0|Ie$SWp(=qq)JEf^DyQDEGkF11WAr{XdqDiyY6V_l{x( z<28N$yBV4u@c*V?Ka_YvHbW^)KE~$*+9kH%U zIayYDFxg(TcOpjKKh@)au#nM23B!q>++H5#$DO@`4O4@x{PJ7P6JOmQG<|qt^UbSf z+YC%n>iy&qs)#HKV^pXgK0daHs|ibe1QnEGc%sN>C6Ew#mRA)fEUjravaPLxf8wUc zO&n5(!!<~H-45UO9V%XiY&=%|K#{Y8It^kFxx#!3#HM>C(q)YvL1oTFD zTxXS6OHRDK#gx`v4c6&N2#@IY^t5WK;WpO8v6J^5S;;&i8k@0hMQ z+{<)z%WXMv;-U=KusNRMR(~!6GJ7r46&JEnsCwXuG8SxNrDA1soTSmwVTQLNC*f*@ zp0Ph1VH*cMtO2o*#Jjq>onAtdYotLHuS-^bh1WAUX70za%Z_(hqkXoDZDtkrW|Xca zwQ}>DEDyryQmSxSfOe0f`lADebX}LUx_+ySyZQiMStPQ%?QZf&(`_3L$3tu$|HC8- z{z0z5I^?Tz4qhOP4xp6}#j1EfE76y_mGjc;3Ck*kfmJ>&DiMu?b`&e&*9M?(CmH;pi7J2gMf+z1uHWz1su=K8-+ zPlbwTtum#d<>)4+Rw{JdxaMU}pepyDrWStpSia)#gC5qW+!)bxv!-7ffnYyAaTFJ@X6 zbZ@UB)z&5@+ zrJjXK=XO_wCdFZtAqS-%P7-PLazL)KV?y5&<*~P`!bCTdvpDaMoP4Uevfcg#2|;+7 z&Z#`>q`eBjyQ%BH#pdX(ezb+Ok&zTxu#Vms?ek%H#Oy>$n44_`9XAytf=bbcQLx{g zr|1R|RvnY3aZHrpcb!19pfe(IUh$crlN)cSeP2)r7wLw+ppNRp)GPZX+s8q-dsg;_ zzMyRYHWz_SsJPfmauHV^xdHdqj{p5744x{I7CD3=ifBp60IgQVRZl=R!0fk%xa!`2n7aPuX9kWDHe zs`~RJ1;!>Ct9Ww{=MhJF)$Iy^DDCgm&1ud;mm*bV`B*djxnpnsbo8x zqg+!z@c~iCJufp0-+YI7L5TU1gVFrsZ!O(Rh|-(_t<{0(SfxH@_m1iYj4dtVZf^EN%J!aY?9WO>EJ!uG>xd} zDO-&>0)er!9 zb}+EQ|5$E3#y}LomgppI{VZ}rMI`zknI`nCSy4ETFzx_@!>j?UZbc%^hSK$k9&%=x1jh~Cd!Fldi?dWP zqwz*28eXW*`_5%PfLY)GUumS1MKn*`XX|6$?rLuA&z6#45eJ0z!7ma(c3k4#-M%9r zDuHe$`rP%L#|(CTzA-;2g6wUm+R{OoZ}Lt^?PDVhl$Nf)u>F)jy9l_Vu{-YVYX z<=^Xvk0QqPYy5chr9Fe-sbsSmP$lbv++E{rffdq)D=P8P*V_Wz_Oh2285|%(YGQl-NilbqCYdgoCjyn+e^0UlC1qF=6Mb?VfFxMyOR@k&6#UW}9^dga7P$wD~s9c#-qIzZMgn294A1qIL3 zY1Cn_pdi3&%UCGZ=terS5_{TzF3I*ukEc2FZ~gF1Bp%y6=d<95Xw7JJ`nccw?P}^A1^~r9B?J!KRexS zfWg5VL!n z0xtk6UmaUX)e;Gp3FpMsvo6Wm9#6Bm`)50QJAY{?UUGy+*J2SpO70zjJ>n&^p5YG~ z#_dgh4>0}xb!%qbgQQaA?e z4yOXgDL~w$i2qBHp00x4h8`5b4t&)3TO4OwSWHQd+3OYrL@rBj0%%{{*w}EZ%?Ol^ zoKdQ7mkC`m$>I}kT?OVRems8Kn-leC8ynglK;<~yH{^A^BAZn>(x-CDw?ct&jTDF3 z=GRZXcdWlgFkLdP<$d@p^YHdPmmc6g+bJkFc1_+ zOiYDj5!!kqP1#?Gd;9CAo$RR2Fybg_!G72+fb78VljgW$R}rr$r>tng7B^AM(#St` zuKpEvpSS(e|Nc=urvjAZl!VJ()2Wz{4VG88B}Ly*kVn2tx>y*fYj@+jD^(7dK?hF| zPBxx2TS?dYGxlnFO*k{B*F+Av?$+EDq99UBp!($da*VuEJrBL1=kN1Is+D6|_Mwwn zH+UvGc&0oaR{OeeX5T+zGZ&q*uGH4#ea=$Mw^4A=ShyglyssVoG1q9oHQ?UN8(HVg zrpnF&7Wv*0zzWk}D47X6iW<53?=Qjl>TMqr#ti7X0cWa_NjAQ|r|ai~;EwMe!Qgna z#mkw&1o+Boa8cdy?FE&ENN$`5#}MxPUb5YBYn4h;h%p6&GL+Yu-jxoVcTnA1Oq*LM zP3-B%vBzdlgUx3FbnQ|xfL;ya9L*xO$1;ELhQv4Wb z^p$ZU-MH1ugqfOh`0m5 z4F1tG)9fW#eX%+cXQ1Qt7imYzjOVJ82~@NAD;%eXLA*?nAGwj@Cer^T*92)4qQ0$2 zwC6Uv20NAO|CR{`iID-mfU%g3K&UE24d)`%uUOAEO*kA)u+y7797b5W?|lmoh{&H= z!P$B~%e<5EE9439?Tzl)1*)Ak_;#iYP7UW*mGHz?`=TP%_%i;pC#+C|F9EOX;uQ$| zc%qY%pA2{2;i_c8bu5qIM*u)(ic|-m0)uR26OI*A^qj!vjuh3FEz7$~-ScjFhA{8R zHrym)AZjF`-u~nCWeWj2tj^N!N9VUD-J-8EO0;QZUs10tWkF+yV*f8N4cGdQi^)SI zZ#95b8K?U*PHm_Lc0QPDgC4hn7m64%Z-DnFTFG~o=7K2lgA-YmyVmgBScekDVn_`6 zak-HVS3nvsLOOw?|DerdHt8Yr|0Ax`~D#OI8q6KbW19M@+SGsbT@GG zSXauMFtTwTK)PnxTO4|Ox(O#WZMy6%c%1r^r<7y$JRM@7wUhs2P*hfSpw@dXi*(`r*lQ`Mu7otCI&}AZ{5(&0z)L*lQwA0KaN1nn+3P zgJU4Dm1-29lPC6=o?LJ3_K?77y{XvpJqjlS`9uww_fKPuCx`ui^#xf-&~xz+hsWX;+4i< zb!zC`y?d9KKQiO5u6l1aIq-;F+pO`uxu?}p8)r^iFojmS$pQ!m17qj~aIvi~tYoO{Ff|1tsIqsQ*rBA&>2K%^^o>VWnHM&p#xs z*|eP+0Q!#{4KMC5s5g|2%4`oaJ z|FJY3F!Vnx9rFLd(ypp?y;H@gnSKotvcI&ztj{#hVLwDgMs~-?`g}}&AgJrykd2d+ zC~4(zJ!;U~S*-IT=AFFH^I&fmH;SpZ$5X1mthx+MDd9>tijx%*Sy}%d8El(r_q_h` zZ+azX8Lwgi8SiWNW95MNc0$NdB4jK$4=1B1O?b?@=H8wIAbLt%4a-`6&8WxR+_Ul; zCmHjnkc3RSdiWT6r#4V!jaMyZcthv|@_vOEBIgZObf8e9>9}>NbtBTeGJgT|V;$Vy zYPR9hRAfH2lg$I|D@!O%_6g$YtqprPRMX$3)CQ1s1*RT_CoNF4A8NKQWiP3?ol62${FVj;K2Lqeea^14IaP5VBsws%|dK+Pu7wdUxSTm-@YK;|M z;cK~?3dQz|wZ-=oaatMXIiG{Q&2hCueZ#5P{`10V%fd_gqr6>Wc3UTE4{O)qW>}K} z#-RCNZL-Gmt3loKcT-1irS`3SyaH93WmP*hNbr?&7Vaok+1GMuC+)BD&2kN~fy{E^ zB_mn-S$ekHZT6c=9n;F>to>kQ;`EkF0fTyzG3)Xp7W^4c4*IPE88w+9 z0AoJw4U=YT%a?1u-&b=0L8RgBO^dvs6q0 zh1g;}2wwV-lZi&LF2w|$npjgI6;b0sxP}rOI;&@z^Pt6JZ9Whon(cY!Mq(ohvkJ%- z+^S);=lYH;FlU{x7I3b?HceFgwjc^=oIZT>?bPBXw$rhp;e5Oe{R)-rII+WLnY!qn z;d`OI@{*0V5b4d(cx&r37j?yKECH%)YyF=kg~zJG&+UqkrOkU*U;bAca{;bqa&)_^ zsIp>+`FPB&OTDXluH>EUi#$6rmszVSXn}$&29VkkGyG}W>zAo_Wp?2yUKV)-H=(1J z-Ly6j)^Jewxx|MyM73AAOk5VV%cE=-6B;mQ-&N(MKC@Z#pwNv!Zhs1t^sq6^Q`Pm- zX0;QBqYoQ6ix5p2RNn@v@H_wJe8Z_qfKY*?yyyjWh?ExOv~$(M^C5UV=bzN( zO2G6j^y@euZ^v`>z){!&D4rNndB$+k}m3lQ6>N5Aob_8++Imj+`>y2aGuy4?J6>iR9& zl4@z93jO105(2%C<&7#x@%d5T73~p-lw#OK44}CMw=p8Isw^?+a>Yal-GqjATtHAI zY;|-IuoZ`|k?c&rqC#bj5Gk(AK*BA#u(%?&%F>11m-L<62mOY(nwcst)6}oq?vu(- z8VeVHZsat+)_=MZrXvV6%va2~a!Wg-9BK6BytK(QPTn2+=(%FDA~CsVqI-|u@sga)jVGFR0ydk0jy``h&ZuL<%XE)61AO$_cf zUUQrx8xg@F@(|7==f9;$PqmBw1N&ThQtNsPjunqWu?kTQAjrsJikg8n4i%NlQmpFU zP6=5~B6Y&-7dEu~N2{&Ff2a3{vY=!C{?aYFgzgb8$>3maV-bkeP)1mWlynd@^O&<+ z@Kei>cgSBwwp&qIQgi4mRStkV5s9X0J z1^-sVbWUifB&H?avhZ$l(YAH6<9Npy;Ga74BXPTt*&|7{eBK8)8Xq|6{P4ZS(IyO_ zPkcrBvmPs0b{oOE$Fe2F-e8x?r@LJFJ{s& zu^3&nwGdW!zd{W!LYwz$3ZxO9EV5}60O<-NzI1fZa;FG3x@YlP+gK#$ENrw}PvV5K z@?w~?o1qWC|M;4(xx}y{oU|=;H}c88`SqlH^$yBBp)kZ(kTw52@{t;cXFKUWZM=bJ zE$b^Oz}~q&&!@zZo;2THkkbV_1s7=$fxbaOl~6Elk{BDr*sF``$J(FjQY;Bf|5T16 zXJ4SzOQifFhxM+LM-DiH%$vur1|+Vf+q3_mk}JcXQ8|6nE(!mZ$x5U@q`nRM6Pv9B zx};Kq{U<~DaUA+F+oWM{{$9rFN5x=&J?L*dB8MAGoX%GyM{#R}P?JTLUYc%?C0oBr zawr_4+62M?SV+Yb+3@LZ zf`l3ySsi!&{{-R>9q=Ju!Qu^CJB@S0dLEstFua(>ePcBG#PZtDZp_x^7n@JCa*GN8 zVmQLfDoa^k4P+6olG2V-f>6sd3izxAsK=WPh;->w_Ry*PM?PAz)}*EHDs%T|MvI13 zvTUw}3Vz1}hlkW>3fNmh{>H6HRgCH@-O5r{cb_-C3R6p-l{W|cUGevfpWz3Cv*G@*9-9O2OE#aVKQ90hAvd=-n?+Mxu5ow@X*IA zN-~YHH1PDP)Qzp|`QaGG6>7$Q?i(Y@Azqbu<=9nLv&AZs_Hlg5y(R5eE4)&dvr)8C zQH!Y|T`N?-vMc~* zhUJ5j>l>yY>MsY!3xTH|9m>>j@vRyw>e0MaOlBJ$H019o-xYNyw5n8u z_?Hi4icTNdxL#U5?KR1&QmYE@nfubH-AYl`qmxkPq?~BZbmg7lJ!e-Q2iLahcj@+v z&k<=e6uX%kO*%a`ZDKoCWOQPQsVTZv-Mw0Cqz)pxx{7~SACzTvvDhk=a{L_UgsDdv zhm@#O{njPh2(-HSx2LZt{Ug;F-zhf4NUPw zZhX?wG}qTNd2;VTGes(@y}i4|=I0zS!}T~zid3?k8v5k%7~D^@r|g|vRXi1VLccXG zM+wFdQT^MBag|i=t5)Xm^IW4XSWL>A!BC7VVJl-QD94q{6-tbGD=9|OgrjF=2`IjL zw@cep=jY@2iQ}7}kG>_&K{AC+x)YKt7O#kDtP zRSPpS*7yz<;nl%;UR(W-fp{3l4~3fCc z`A%CbCL04h9T{PLo)Z)7WSo<(`6lYQJI+&+T(Xp;`KkWt+LLfPjep0UG+hVB9wA>9 zYs;#Dt z0AgjY3xRly!wEs*X-b_OW-IG7@fFgNeA2B>tf4s1o()ElgU zuco*}mr&Dfv|H!dBQln`(yZ;QB`l|Pyk$R*LfYm0EyKB7v9rtaY`+OAxK~PYrH6`g zr-#MW$5D;l+Enp%r(QNm`$bLNsx(wH!{qs14p5#O0fwb1x-gseag&r`R#l>(KeXDc zx$k7#jV_dFa&}s`iabfAYYTs-Yude)-iP7u6WQrgL8x4#T3WQe7!3+9no-f0Q@umx zhb1LMBqg=7!OI>S$Z-@gIC|Me0;L?oAA`nYDa#KFR>aedZc44Br5Q)rt8zH6daJW_ zt8?|@GCZPD#Z!5H8i#YDbue~5UDDB@m!5bx-_{ydcIkJmT`c^JS8Vy zI2?UdH5Qk&!s2rJSbB~MUd_&wE7go8D7LQ+ojP)jj|6z%#q03K+e2Rx>nWpL>KbO5 zai&LqJa#hJc#BZeuC=>YwnkWtT8#Q8nI*#GB-$WCit{YKhG)ZB1zhj@R;E#bo?{3s zL@|@03076`G;wrrl~kYGp-&r#j2nyAP?P7K8WN@KtfwrkIAiMIaP!6cY%IOJpq$*G zt3on=Wyva%)=+J=N>1*DDMzN%ej<49Lh*`dnm>!YL8s|DSA}i#ojStbRJvPxO*M6R zHKenNOotFhswlgOTX&TI03>@NW{$k+aF-0@C{@JbvMjc~BNdp`$6_l_3s2fr#ZLz; z6za-JUh=~}Nku5aQ~mRct^3(dCnCw`imlC;VP8Duh@19m@~b*(jHKGu&KmMvL)u=o zm21?LUKH_Hi7vJ89qSi5=A}NUbqy~4ucW$_u3Gb3jN0n6w1vrbzJlJ_CJZ(ovs$`@ zduSat#qjn<^6U;<{gs0HjXE)-3_76&2-CpSm0T$+up=JAU4(p7ip3 zuC5xs4yFSQEHyQRP^avoxm71pRP8nU&vsQRJM*^PTDQNosO8RUJ|WknYukz8w$?5*?-OY=Y7q&fkc)@Y<4baKRAbIila`gfhakzas(Gd}8&596 zQ^jKPnB~}t)aX-$s^F<*)oN42Nku68ILc1;QF4rF)1B$kr5NLh%dj+REJZ9O2v)5M zbShMhINnrf;w1`n+P5l#gXD2aJkW(W&B`>X#u9vV@%N0i3qOQfP3MTUDYV-tZ)3N! zGX;eLYd#^79hNkY%$a1ihDErP$vVH7;$73+8Gc)XcxNEX^FB1hVDh{z8r8E%QK?gw zQ%!7c50yYE=0t$x1PCaivK^$;)!Q1`ipVOAm#oP0t_od3;h{!QgN> zhej%HY80Jn)h6k}(SGV_#uVWW^*m?d-x2B_5w_QSORj2gT4^`>^{jVVo#P8_V#+-; zMzqu*#K6UK2A8GSSw``)0S&tRq25<_ONF?1E?I=ISuS0Nc&YtI5y^$8``jf;*t}g# zJo&lrPI!z}YLbnW?+CWxMvNiuVe%ZFjZ0I@u(4Q-El5^g&zqhe+NDlc&3h+0l5Hz{ zs+={2DsYD7g`Bu6gy~NMQlAgyah?+ofQ}wZ3k%a&AFQk^?Kx8V)qBcnQmM@!YUjyMlZuu> zlPN|^EyD9rl{iy=&1kUv-pco~oR_qhJf|7TtL1f^3hG9MSz+n9 zQ&`XTj7_f_H&(lqS0<$>)Tvrdnug_ zNqcEe-hyfzu%!hB3N)h+ozC)nvN>)(gm6?LN`#gojA0%}PPJ;^y_{zTr|+vrmC3O@dzr$~c9yV`?emuJW0EDAkOPyy@mrvC$BEOy~uWWpqYxT97NSZe=M|SNj zF{xFAe(E5QfgOE5XTsb&QzprLNlj^sd|*9I4NH8sSo10b2_vA z~F5wWnA3bTgcYwEMXhT*%K0p8ZR9V z7U9a3@U$vqnQclrR$8zbeL9$0Q-&7_UKAx(j1;418O}b@xv9(AN~J|8)T>fbs<|dn z^=u{b{4BkMD&c8!Q&Lf&>bt?ID@omRdr4lRoT^PtPORM5R`I`!{7vHz2fv6sN2}`$ z*BZT(eZKZvf%Z*S{q>zj-w%}$-RhS!Ud#X+reH=D5n`;rhVmSz2aJYYlwfd?l(3bg zsZfR8TqYVgEHz8Y@1B+xlxapuuZpDI=T@YprVlC0aFwY;4}!zfjY-B+Ud>I)RA|DD zIbLycQjIv;>D|gzDn4qJXDQzCSBv~prp4n8LdV29#l7SBIkZ=qFYZs7rLLvo4J+(& zM)JH;M%EUv!6P~}k`;NRces{mUmQ0LWD->aa@h3PvJ@BUoU8 zB3KR>$RXlRZJ4a93-!m9;3_K4GM6Pvxcu5RYSV+1sZ*;_P^RZroFO?$N^VYdYD!)m zJhuZ+IK*QihNm1)_I6!eR9x1LdiAl;tyVPjry7+bLZ39_7)t6=x}4`Z^%_r&d|iFu zzX|we^Te9e{vW#3biWVWXz!?8{eoQ<(&O#6`fFQ<+4g9zwOvA0KosWb)RKZUO{(zE z575prd9^H`0Sw7H*wu_!czb1wuSSImxP>Roy{zfssIG2ZCl^vGHD@}K_UUA~Qm;oD z^$b7OXNgmlUPa93Qk^JHR`_|Ef_FX0h9~k(OJ6|05niR5=!|+epmN7lz?B+87(8e4RQ3SfO_=?24jRlW1n*slgm0TM37aP94hRrn4DK{gx4KS(RUF zjdzWj_O&GBl6IqeQ1)@MIjV5>Nh+18ytfO<8CFqB9Ibs~Qk`FVHk0?8_HTL%-J|T_ zlt_F9t?LP;Ym%m^s3fv@r&7|Sl`iL5Uc*q3UEW)?iy(96-CkYX`Gon=++5EzQpY5& z?c15;xke^fSXaw%RUty28x=|q4@pK9@YLf*gw#}0Y7}TtqsY^zDl}L`C|1gDA@|wX=Ly8v}-+ zh|DqG+Z$GuD8g8pw3MjRolaL2+-b!vH Date: Sun, 14 Jun 2020 13:29:47 +0200 Subject: [PATCH 006/313] Adding full screen (vh) story --- website/dist/index.html | 47 ++++++++++++++++++++------- website/src/sass/styles.scss | 62 +++++++++++++++++++++--------------- 2 files changed, 72 insertions(+), 37 deletions(-) diff --git a/website/dist/index.html b/website/dist/index.html index 8e68cca6..8ad82161 100644 --- a/website/dist/index.html +++ b/website/dist/index.html @@ -86,11 +86,11 @@

  • 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%0AJG5N=LSu?yh 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 Date: Sun, 14 Jun 2020 12:33:23 +0200 Subject: [PATCH 005/313] Adding demo to README --- README-INTRO.jpg | Bin 0 -> 395748 bytes README.md | 4 ++++ 2 files changed, 4 insertions(+) create mode 100644 README-INTRO.jpg diff --git a/README-INTRO.jpg b/README-INTRO.jpg new file mode 100644 index 0000000000000000000000000000000000000000..989b8e78a778cb0953da2c947cdd45a3c6eb2168 GIT binary patch literal 395748 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 z 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 z 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

  • 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%0AJG5N=LSu?yh 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 literal 0 HcmV?d00001 diff --git a/website/dist/static/images/story/character-static.png b/website/dist/static/images/story/character-static.png new file mode 100644 index 0000000000000000000000000000000000000000..9f8755f78c74d62c75a327da996710934f0b8147 GIT binary patch literal 4495 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 literal 0 HcmV?d00001 diff --git a/website/src/images/story/bubble-border-bottom-left.png b/website/src/images/story/bubble-border-bottom-left.png new file mode 100644 index 0000000000000000000000000000000000000000..e87b8734f76eb196b13b8e2dd6c46be14a94a92b GIT binary patch literal 500 zcmeAS@N?(olHy`uVBq!ia0vp^GC(ZJ!N$PA7<#;JBap+A?&#~tz_78O`%fY(kZ+M1 z;hE;^%b*2hb1*QrXELw=S&Tp|1;h*tObeLcA~Fk@;cQ8eWdGF27eK}7o-U3d9=v-) zPWLq%@c5jH`*!319sPUrU#xx9;9?ubeskUAEn8HDX8bUGT-Xrh6`9)kF*|k|>%Fff z->)Z>T0e}_Ww<25yI@V>hh2#-fhu3M`1kMf%)7B`GbClwS6 zExi`?hG&Myi&F}+S%Fh^ujl&Q*dge!*XoAHnY_2U8=X@c=j6;(v$fiF<=>3Ctc}*J zi#(z;4CLe^6$Di~bharOeJjeHyRGYydt-T&YhCH8mzvi1jxD>ny+pv&iX(c4+O}8o z?f5Qzj9BBg;jFi#^IZ9h=ZoPX~lCOMo&zwhs1+V3Atg?=Js9NoBd^M-ychU=q$j|eXzt(IyG)Ys& z^lmS^>xoif>zKstw^cffk3`?u^Thg{-`mGrsY`xI`^^fye!Jzf&3{gzbDiPc+0*T% dHEaCWOW$$I58Lxv{w65sJzf1=);T3K0RSj=#jF4T literal 0 HcmV?d00001 diff --git a/website/src/images/story/bubble-border-bottom-right.png b/website/src/images/story/bubble-border-bottom-right.png new file mode 100644 index 0000000000000000000000000000000000000000..b7bd5c9dbb7e43b1e97d93c583307c0087d07930 GIT binary patch literal 628 zcmeAS@N?(olHy`uVBq!ia0vp^GC(ZB!N$PAIB)h^5g>;p-O<;Pfnj4m_n$;oAm1W2 z!ZXd+mq822=3roK&tzZ$vKWC_3WymPm=-X>MPwE*!`Tub$xUAiB7lmYd%8G=c<^ow z-RpPQfoI>Ai4M9+?Tjkh>|BkE((>-NwLg@dkTHL8?CuGIhK430_2+(OxtHe(t(>U$ zvG&{Z{l$~scufBsJ}p&;k@<%rSGWjkgJ#2-?8uqMmpsc&>s znY&SG<86V^Lt&eE_oQq)xJdcO9+~f37e8Jr;ZjmlAuKV+kct0Xq7Jvj_r69sz8MPU zbG4Q`@J*5x5}NmH%br6^mh^75*|mCO$F0JkYo=1lJd$V6yieL#VaWA---iBWw@i9Z ze_rCBm!y~OanHK%aM&_)27v=4$q!#W^{`a2qR~$aIsSI$(>IpO zyyTnm`KOKk=}*R~Yd%K&yQ^V1`^5>{e6!i+Z)-bx^cP)`eCo=skYy<}#Zqur-l_!W z`M(ug97W66Hs;F|&-huj_usIwkK`# zP2Q8Dy8r%j)jj0A{jAA1;P@tE)mL4@qDn9CF@D_mvetLGGgtra-o0WAvsU%REq_FX&&Y)L$;k{i}B!9?<&HuT)3Fhkpv6<)eCDU`;7nm;aGsn z=A|UI+LzxtDR)MnvB0F`6Ab8xj*n;-`#a!h?S<`}+xWy-c1t#g-%*yIsK5jb=j}Mv zc;i&_K}){~o3V`Pv+mgl>!n_mD3NZ~ck^#9nFlAi^*_P=%7uy?pPr<$Et$AeOfAjF9A=668R)abi ziJ*Azkip0W@@GAD0O?i8pqU&X$(jG#VXD>wjzjr%_$TvS?&v%F%#@i{jS-^Cy`$-u zDhaFaqei}GU#(WmC)%ZVp(b+fjVj);ddZ!`m=CYuM|vKrpPo1Ry9O7vtnZHcQZomt+j&+RO^f(_TTctqW{Yveb(EE`jW0-ji70FJN?lR zKX?6N$p&N-d~RZ>_!e4|93J!dg+FXC5r+?fiTg_T{5sc-AB2edrB)hR}B|C zabDoWswJ4o+vO3Ipv}xEe69PgR(4OKznbb~s&@dNq~i->Cts|rm$Ww>N30!W0eGtY zo?@aI^aM4eu%b54S47&w<%A}b4F$=J!amQD-+Yr{on+by9%lPkBC1|m!s8sVJ5YniU{2Ww?%g)(!=JelX# zwg(I0&Y&b;D@J*Sa$5-ihvJ_Fsk81sYP-(KV8r%B{Ru?w)dJM!Lxj0E#HmJAw@>s@ z`v6bs$N7_o@zmzbr*qw;se08@ao@MG5Px1LRpuhUy2vs@UjL%k>l=;3&8DqYK9WjS j&T3WOisDhw+hzNUq7hkIgj}Sr zEaHL+h=42>WO<_~1!E-=TNQ~dn@U*1B5Mp`ku_}gb~^nJI-TiEe>gMW@AEk`=gf1? z4=0)H#@5o**8~7S%XJs?O8@|kah-{LfGf)txjSy)ASaF!090Q1aOofc_jZ9^u7^1s zfQoAb0MCX1Fs?v6^zi@yC?ERs1vJjr_)`O!zeARvA{+pSAGg<~mNAW;q~f&%L@najC&%HA=m2agnkH z(f#O>=`I39*l9}q56ft9xZoP=~i7F)Gbln?rf90wFZf073hD(TGe5t z-r{l&qwnresEtN*OwQRu;_{`*DOLOviS;3EgzG{%>74)s!Zw*^e~oGHZFr%+<3#a3fk8@Lv)Wtu9QbED)-N475q=q-ZfUc z00nCdNd2%MyN;~i6J6ai7-b|p8IAp-2!GzVWYo9LajlVt*H6+0`uS%bxN6$lJ;dZ2v`z9jTGE zrD#v8p?{O~!z-~CDLvi04X556r+aO-Ivc!V*XHnI#2ub3+g)K_+xt4tOEW~Pi#7{28ql`&Dl>eU7`2-;T^c*KN)5|hvCgJ4;+4V_HNPh_&w z1i-7{b=MJu>s(mmf(k;b&T(Ma+_>3&BL$^>^>h;iUAZ`N3s2U!Jfs7HyLUyr#FNu9 z{w;GI$)P*6sg=r8>MF&o8ODQ3S}kp)pHQ1VThBX<_O2~qU&y7lw5C_N4is&few2Yv zSF9RUeQFhk+I-$|&7}>2z6GfrbNUq_6MiPChDVyD$Y?G$gjN_CY0IQYd%Xu%3pkvv zTYM5<(im31`|0|rLP!+8V>qNIGiF@5uD(Y23Fq;unwe(JY004d=qos-(T>_!E?=N8 zx?>%7+S~V>AY>=J;Y=7>QWJO?<%jIR{|o`3Q@A6oMaUnmhZ6EL{YsE;q3-i4H=3 z1lIJ1xN18>i{N%Qn&|>rIINm9GMq#1n2>fb<3jW2|`N3k#6%QG{0P6^73lu z*LXFMWu6kOLuv9v$!{BuT0?N5z(ki-MI?<-^N~}7)p{W0j*?SM{%z;)|D6(<^$)i@ z#mX6>sCFO>f{_4%TglBAU8n4bfkZ6|+G|S~qqdy+uI#*XrgTsh>$oF}s_HIHS5O@A zrSim%q^aeb3&we#ucz>tr`6RYgyebNRo9=~lGRT)&52#f{?z{Z`&m04i87H5Jz6xK z&Mu2&3D8RPx$CXyyR}%~fbGX8-nE};Vf%Bz%>_>350C0Zuff!`0yVGEFz$*63M7 lPwD*gy}wSw$Oc|-d{@Bt2cl2Zt^fT*a%H(Oh0gv7zX9r|^*{gs literal 0 HcmV?d00001 diff --git a/website/src/images/story/mountains.png b/website/src/images/story/mountains.png new file mode 100644 index 0000000000000000000000000000000000000000..804d25ba771ef06a5d36f76778167623f67d5c75 GIT binary patch literal 80925 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

    -
    +

    Your workplace
    but better

    You are impatient to discover this new world? Click on "Play online" and meet new people or share this adventure with your colleagues and friends by clicking on "Private mode"

    -
    + + + + + + + + + + + + + + + + + + + + + Choose map - WorkAdventu.re + + + + + + +
    +

    CREATE YOUR MAP !

    +
    +
    +

    Learn how to create your own map! If you want to go the easy route, you can instead PICK A PREBUILT MAP.

    +
    +
    +
    +
    +

    Tools you will need

    +

    In order to build your own map for WorkAdventure, you need:

    +
      +
    • the Tiled editor software
    • +
    • "tiles" (i.e. images) to create your map (this starter kit provides a good default tileset for offices)
    • +
    • a web-server to serve your map (this starter kit proposes to use Github static pages as a web-server which is both free and performant)
    • +
    +

    WorkAdventure comes with a "map starter kit" that we recommend using to start designing your map quickly.

    + +

    Getting started

    +

    Start by creating a GitHub account if you don't already have one.

    +

    Then, go to the Github map starter kit repository page + and click the "Use this template" button.

    +

    +

    You will be prompted to enter a repository name for your map.

    +

    +

    Be sure to keep the repository "Public".

    +

    In your newly created repository, click on the Settings tab and scroll down to the GitHub Pages section. + Then select the gh-pages branch. It might already be selected, but please be sure to click on it nonetheless (otherwise + GitHub will not enable GitHub pages that we use to host your map.

    +

    +

    Wait a few minutes a Github will deploy a new website with the content of the repository. + The address of the website is visible in the "GitHub Pages" section.

    +

    +

    Click on the link. You should be redirected directly to WorkAdventure, on your map!

    + +

    Customizing your map

    +

    Your map is now up and online, but this is still the demo map from the starter kit. You need to customize it.

    +

    Cloning the map

    +

    Start by cloning the map. If you are used to Git and GitHub, simply clone the map + to your computer using your preferred tool and jump to the next chapter.

    +

    If you are new to Git, cloning the map means downloading the map to your computer. + To do this, you will need Git, or a Git compatible tool. Our advice is to use + GitHub Desktop. We recommend you take some time mastering + the notion of pull / commit / push as this will make uploading your maps really easier.

    +

    As an (easier) alternative, you can simply use the "Export" button to download the code of the map in a big Zip file. + When you want to upload your work again, you will simply drag'n'drop your files in the GitHub website.

    + + +

    Loading the map in Tiled

    +

    The sample map is in the file map.json. + You can load this file in Tiled.

    +

    Now, it's up to you to edit the map and write your own map.

    +

    Some resources regarding Tiled:

    + +

    About WorkAdventure maps

    +

    In order to design a map that will be readable by WorkAdventure, you will have to respect some constraints.

    +

    In particular, you will need to:

    +
      +
    • set a start position for the players
    • +
    • configure the "floor layer" (so that WorkAdventure can correctly display characters above the floor, but under the ceiling)
    • +
    • eventually, you can place exits that link to other maps
    • +
    + +

    WorkAdventure Map Rules

    +

    A few things to notice:

    +
      +
    • your map can have as many layers as you want
    • +
    • your map MUST contain a layer named "floorLayer" of type "objectgroup" that represents the layer on which characters will be drawn. + Every layer above the "floorLayer" will be displayed on top of the characters.
    • +
    • the tilesets in your map MUST be embedded. You cannot refer to an external typeset in a TSX file. Click the "embed tileset" button in the tileset tab to embed tileset data.
    • +
    • your map MUST be exported in JSON format. You need to use a recent version of Tiled to get JSON format export (1.3+)
    • +
    • WorkAdventure doesn't support object layers and will ignore them
    • +
    • If you are starting from a blank map, your map MUST be orthogonal and tiles size should be 32x32.
    • +
    +

    + +

    Defining a default entry point

    +

    In order to define a default start position, you MUST create a layer named "start" on your map. + This layer MUST contain at least one tile. The players will start on the tile of this layer. + If the layer contains many tiles selected, the players will start randomly on one of those tiles.

    + +

    Start layer screenshot

    + +

    In the screenshot above, the start layer is made of the 2 white tiles. These tiles are + not visible to the end user because they are hidden below the "bottom" layer that displays the floor + of the map.

    + + +

    Defining exits

    +

    In order to place an exit on your scene that leads to another scene:

    +
      +
    • You must create a specific layer. When a character reaches ANY tile of that layer, it will exit the scene.
    • +
    • In layer properties, you MUST add "exitSceneUrl" property. It represents the map URL of the next scene. For example : /<map folder>/<map>.json. Be careful, if you want the next map to be correctly loaded, you must check that the map files are in folder back/src/Assets/Maps/<your map folder>. The files will be accessible by url <HOST>/map/files/<your map folder>/....
    • +
    • In layer properties, you CAN add an "exitInstance" property. If set, you will join the map of the specified instance. Otherwise, you will stay on the same instance.
    • +
    • If you want to have multiple exits, you can create many layers with name "exit". Each layer has a different key exitSceneUrl and have tiles that represent exits to another scene.
    • +
    +

    +

    Defining several entry points

    +

    Often your map will have several exits, and therefore, several entry points. For instance, if there + is an exit by a door that leads to the garden map, when you come back from the garden you expect to + come back by the same door. Therefore, a map can have several entry points. + Those entry points are "named" (they have a name).

    +

    In order to create a named entry point:

    +
      +
    • You must create a specific layer. When a character enters the map by this entry point, it will enter the map randomly on ANY tile of that layer.
    • +
    • In layer properties, you MUST add a boolean "startLayer" property. It should be set to true.
    • +
    • The name of the entry point is the name of the layer
    • +
    • To enter via this entry point, simply add a hash with the entry point name to the URL ("#[startLayerName]"). For instance: "https://workadventu.re/_/global/mymap.com/path/map.json#my-entry-point".
    • +
    • You can of course use the "#" notation in an exit scene URL (so an exit scene URL will point to a given entry scene URL)
    • +
    + + + + + + +

    Pushing the map

    +

    When your changes are ready, you need to "commit" and "push" (i.e. "upload") the changes back to GitHub. + Just wait a few minutes, and your map will be propagated automatically to the GitHub pages web-server.

    + +

    Need some help?

    +

    WorkAdventure is a young project and much needs to be said / written regarding map editing.

    +

    If you are facing any troubles, do not hesitate to open an "issue" in the + GitHub WorkAdventure account.

    +
    +
    +
    + + + diff --git a/website/dist/docs/create_repo.png b/website/dist/docs/create_repo.png new file mode 100644 index 0000000000000000000000000000000000000000..552081e995c2b5603b91a73e6ec39ac543f1ca7f GIT binary patch literal 162239 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 literal 0 HcmV?d00001 diff --git a/doc/images/exit_layer_map.png b/website/dist/docs/exit_layer_map.png similarity index 100% rename from doc/images/exit_layer_map.png rename to website/dist/docs/exit_layer_map.png diff --git a/website/dist/docs/github_pages.png b/website/dist/docs/github_pages.png new file mode 100644 index 0000000000000000000000000000000000000000..7b66c24cca446ee063c088f51dfafbda033c9aad GIT binary patch literal 74318 zcmcG$bx>Pf*awIdXp6N#acK*MQrsO{pwOblo#5{7QVNt3pvB$Y-3b&61b5eO=9_P4cK^7Ob8qgP^PI<@^Ze#Ud{dIee@^)v4Gj(d>lbNNG&Bsz;}!lC z`|(NgH;41bpJz^AbX?KU2zvjy&=Xh)sL;?}qkWbBr0$h|xZt#WM zE(w2QbG|d1_rorbrrOwob=k>mC%e#%Jd4p`p_4He@m;Z9ztIihf_TZNZ+^Uxe5%q1 zsB}mB@8*v5YcA_Q58wR2{u&?p?_m6OMD4$W7nBStr2oAa!T|YiU{$<37+zjzY6s{H z4FOLMa;9+UeYE5p?-z1g6ZvTtohQKg;b3P)j=;|Zv6gN|>o}j4 zk`C}zdAYEs8rL{819+2V+-o)d+XvY)1H>YBEmQ6=c8p6)&!mpzPu!J|kabp_|9zTU zdh?Hh`_#=(AMla|+l7Luf%QjZgDXj7$dg}6MP=uU7Ig_T#u!4@&kh#^Lh*-?PED4t z-v7&rN^Y`<+LRCuJd;ZhM%TxW;b1QhC*`-2K;FrahH+^Ri|0#g{&9*CSbp5DPcX|* zYMrYm-ssE{kK3csW4<2POGe+R@jsKi($=fn`ZFNm=Tdyo`hz%9c-m{tMh=?SM8lNTi-iA$8_36jIyv-FZa*eN>0~57Xp}9R=>Vi@*Q5=c1Y)4In=QQdKf#^SBb2&+#$o(2aA=<@P+`C9E5*2f4G7AS*k4>$Yr{Y5RPBQm0MmqV&lvc>8mkgYh1kg7=no zmAmM_L}8>eKoH^lzwOZdker|_CN*^6WuW`3lXf_EU9NvAtI&<4;59$4rF#1-waLkq_ou`DL^um^Qr@Djf*>2PF4Bqt7qs4Ji z-gF${EAx3E8^fG2a8!LTuEHW#fWv4SDrWu4xC*@U(jbC@JE3XQ)j3g(tkA(2_66yg zD(jYgF|c4K$M%;}B6w#+a<5$*3I@*fZoum(X3JOze!oN1E=B!_v_RBX{Ld|Vy? ziE7j8wN;8FSc`B%xCcX)T+C;g_*3dKK-JeDjDzX>>oLv;y0~GyD zbn z`0Of;!+rI}OK0HgGNitDOlbM9p2&}Gh8o`-Zi~B7Pi~NX+#f)M^SqK-&tbT@DOuC<-z-Dh_N%NJLD9RprcQ2K|j3(K}~+t9?7a z8z{TMb!G~P1!EQp*}Cc+db3`VurNUd%L(L*vuRG@3OVDpf}n1qYKfo)x%1MQ{KYQE z@w*Q(uqhljgnEKLb_$GBftno^IT!kp8D zLT)Hl5l2lW60kL}yJo(X?xH)6<0;7T?z_ z9FAdBK8)G83VSxrx(U0nqh@BpsL7F>wH5t@Pddpnk1fzx8R#Z5mk!f44bb;axf*xQ zTG9}1D~}#-Yk$A~{hul&TGIogC@N-oRubKzIeqrX7@|nDz*Y$&{R{6|bgoOns+Lk< zN0uoDMl1ffc-aY=6e>~pb!3n1(QZ6kIK=-x1-W48FYfY@PP4r;xZ)t}C9G8LU#A)X zD+UPY2R}S)_-$=Wfy#OOMBR_-UWEv(W=c!%z|V$PQ~QfU z?Ra}=X)~&2(ui7ZSA^9Wwc$$o_rW*JvlM1RXrr<(>;QY9F*eqDz2z-CvbQIrf{BgfPf7mv0oJBjeH+1TnnB2snrEJ2Z;BV zQfGn)@4um$JwztAoawzVc~A5cR$0#)@O0cmC2gL5e`;#)S!>KmX?3gMfx)I->$7hr z4f939UKEuMvA~oVL-Ns!@L%JIu(O+WakuBs7zXy_={dxlfF(yV^JA}*rVb7}RpiR! zwLcv=Ml6-jC`&D6!O(?;L8$}392&mZ!DW1adU7$&-(urrTx^~XMtr6Is_=%%89xtc zc?OYX*;^_0ct`e+>D^R}`$gAkrJ=iBW7#pcHwr$xR_^1g*@r)2b*EX;Fo7^TwGPLo z9B)-Ybq2o-V|0y?d$|*vPX)}j9V~vFp#dl{ejCB?lSyL8S1VL*OzR2v<_(J z^B|!Lix$_bI<|(L((k$SXXxDgRg5|ZWPhx2^KN5|)(6a~nf0vCV?Vj=pFQ;_r7J^t zSAAUMYfuK%3<4-f9+}sBlI)R-#|z_+EbzadFy7c>3Gs3ou;Zs0EcaT((Bxr?u``B2 z{V5(kks8{YSRFv^?3L#2Ub&hbsM1RS@Pgh2P`E}5n#I4fF86o-uvEsBqCs-{5SizF z@Uw(x z?noumu$TEE>7LM^NY18BxgfsX7is`~%?s?0AJ;s{m2nQTjmYw3*w>Ae%tPYM4jCNs z?|sEr!X`RctqJW-QE^KyD?nUkj&{O9K zE?QHj%1O5bsW;V2(S*8UOWv{@?*qSZ8-7{;619tE%e8Kb#>zarzm{Y#&gSKVP#2z= z@YD293%+zr?Sc%8t_HTU`1(chPNWTvvUP_=2d#g6K2^)xN%dm+dv`sFp?@n?6%3EO z+K5@6(;dV$9M~{66UgtB$1Zw3V1pg-8=Ohj=IrJCTCu&HB=wwAudAvj?(&0n&(*LS zDFKC2e=_rM;Plf^Jzl1Ul>UYaMq^vD^B2Da0(_`KEpW-{OkLJUb^?BfudXNWQBky7 z@q@#AYnbfm^L*`k*P)TCHvRgVPEx0F#W#Pl)JFwonLmZ zzPhHC@OSKy&6eL~1}gtXF|C*>9*BpbG|)F(nGp21{8NUt^<`i7)B?(^#__d1GTMBw zvBNH7BA9V6VoxCPO-P&9>27g|x6dt_?k#2Z>qy}D+*aQ!?)fZ8^%ac;++Oi_46Xbp zQi_((^PDfZt(Z@MwmI%qRN3_FC7y!S*3YGcpKKO2nbhoa-ZW-Iey#=sd zoAkHYr96<^N3Ck()((u;tk2Z*aImla4Mvd-Z6#$g^vZ^hq<;=;sl7^d(}PqtsCl(Z z;bK&Ov*LSkJ3zwkkSbTant8LB6|m7&g)855Vl?=3w4T>T>MOcM8Et1_h4)>7#-T3R z!Rc-pIuOsGDaF(9SB||J0FT7@L$%Qil4x>=i?OpIgpIhT>Ks4jKlaSI%Q3rGgf!ni z3T=2DDw`*9N<38l&O)v{`}%ysOIrUKT@-K!AuZOiDrXk3WcxDbpMZ1~rZcRyo0ks|%oRtmFue@80PFXRrV% zJZFLKcDVJQIi**AOCt!28JHqM&cX##b)=tR``uwg{5+N{dO^n|!1er}gzYEn|1Q0T z|DQ$JZ)u(XR>Y5ekNa;il=F$m{NKSF-Y@?zE4u&PWMMutYl5b?JG#A(%LLlsQ|>Xd zH5eXnK1NIBUG~m?r6hx*c-2l5)_;W~dB;95{U2rje-ZS*tXKbcyTjg%I1i01U-Amu zf%3FCD=-Gcx%@OlvSqyz@hiL$$pzoVH2rGO{07OlPLb|kvSGiKAYL^ctwqEl(Ri*c zU7<^)*L18&t^}P$JjJ^=j>F8UogSH(sm_KXgFM3HHvKii+G@|1!hY}=)gd67YR#eO zIXw&N+Bk1!bZHVk^$hljd9R1&3j?Zd__oe9tDM4)*ji?Tr*&73)(9&1#eJe^QXrT# zWKMUw;4?kr5wod*O3_na7~wl>yELv}qetD=w3JF^(f$;i)|i9QXJGJTJ5p82#=p}E z7gMs0n<;N67s}yTfPm_q=6|SNJN|k>Mqpq_QOS(-68y00Q-O(4n^1}$>AOtL1UJ{g z$rqZQopB&84A=B-mKG#)ca!IJGM)I_ga33myvcnNlz^z?*>}H705o7-<%%2^{Kc?Y`3LJ3kh<_^I~7T)(uw~EW^47!{78C=;ElZIJ!ICRP?_K zz=c_$Drdm~b;!M{*V(vZVy{Bi5-N+#cIlvCnH^F?d3>|kzXE$}d%8GK^r-+DIC<}~ z0^MzAeSB2fs`-8|d8!#`uxpiAP05u0kYP@TPFz+YkQv$OF#eN3|V-Mh{ND%bkT!8() zcXR{=J?2XBQikL#S;!xa;msj&@oz#W<F4a!`>^~01(#U7eo#2o2}iZ zSsE9u$IOsr-_9;Ed9y$_YVq-!;7T5_B3pC%Wx*{RW~uv}kjwImGVN3Rq8Vr%V(&+mnt zUPAkxkQikndmC@*6xPGluz7ldvLPM0-EnP##D=NraTPoHm9KVH1fq@NO)}PXYsd0s zWQny-U*>9WPlk&7z7iz8t4L>MnZwMnx0+!|Y>G|<+n5|dX?{j3n;v!gOxkQI$?3zX zx@^!^jf0xUYH|uC@b6u&R*bvya8s3&zQN!uCE2R-)fJ7xvU|z081?N+LfXI*c zU|%mR-Yip1B&ekE3`*3-qtgs6-i2nE*~0OaVL1>>Vr}2)k5$eDUtNU!1)*A%CJ*%H zT7YPU_26T9p?wdadyd_&N&avGm1b|jk#IqUk!n)s)9npW?OB1c%Z3l>m+)?e)!VtQ zU#5^C3M9)SBb%p%s)*PhIG^jpYXOhib*IFySC1>xq&so(p5j0u35X^58%z%ZF|Dj zcI9T0WXDQoO?jpx`LV(fkhtrxnFG&@bL>Ph_!ReLiGw@L*87aI!nf|ksb<|n@6tCMag@2Ls@(CS>lYyt?UQs1VG~qjXW2ONK8pvjFs7LoP!QdWKOS;SLl9nfgh^N?W^S#96E=%Jos|%I#Sv zpD0R)R2;=A3o{Y<<+OEcDum(EB}|%(rNobfL|%i-!X92I(~=dWx~Jtf(vGQED)*ORh0tr%1)P*lK@|NpV&qNR zMzBx5?GEW3$DP3*8m~MA+wLjc1BcLUt}^l5g+(-uGFN3+*3Ky!;O(k%=EYbmZ)fIv z2v~*;A2~x&Ca!tq;ls@!*Ki`BSs|33GipPEyo8WHvNzdA;usVD*&|x`Y|w9}%{&>_ zF}hkbdO}h5u;7xcd-_$UWj0FVNb0s&K>0&~I!JelL*c$|iIZ>RJ`Z+@P@RK+OD(mK z4KKMeePo>3ZrN1$nuc;Cz8c|(yhZ`-Wx~Z$c!`C5mdeSy-G7A>nb0$R|HgFYcoQNV z;1c7pq`AQ#{kW$@gXtb+HWfO$F|9til8dD*mFuQQh4dDb%@C)kvbc^^zkc$$gc+Qm z`awf6fIYx`=9Cv0R4mthf@jN)^GsV?W3$xbtg8|#{9Sv+SQ3aMF7D}7cnH!_A zCR>%gYT#N2u!8@wS%&}R*mYOAmIW6x6`rU8EXYb#l_A7p0RNKsw6o6%@Huu^%5_ZX zl=(gUA<^6&rX9{lQhJSzQ|9~q@IX8xBS%~h0lc;R0@QVCS7+8JeUx3vFbAtRhKI#I8Uk26MXp zVp42-q=mGU*TEeX(I;wk$j_yL(UDqx5dSq#p@$?|4dO+a($x#1nf*II_suvRSkB`z zS7)hk6?0$<@N8^`OHRG?&-*~n%fQl&NGzBdSfEohk1|@cq>=-r1zNVxJv_~Tp={#b zcUq|;X^5_um1{M6YV(`I4l%aNYC6J*$BG5U=1oPC?mKkTtSjzDuh&Xv^IWGVB@5UK zcgyt3>`oq?NG;w>HLJ?Q`TbPsM(xSbSJ%&?LZut!ZxhPOZT8Fm@s5!RaPMOr_oZ=4x7eTl;(60d}!P45)0hl|>4l4=4N_y{h~LtS&;ObRoHP ziN*6DvoA7P*N`hw=M!mVeaW`^NXmY0A%h4I4{=huy6wJK3VLi}!M2Ft--aw9AX|y* z`m9XdvyRe`TL1M1Caz2dNM#&&ip6wVOk+{Gr0(Fh*y0~mFvkp>`7yW(y1E+DvZck> zM5QMee*hil(#j1b`X9bfI?J@2zPB$b=7@J$(i){(D{5pEVHHIM!)R0=yvK;mubqKa zq~S7R>FHIANlcJ}N6&e52KymJ6TrnKw<1w<*!39x7b9Gvb$J9;8#qL=eRKmVq!Drl zEAKp!p_+6h{qA)2b7NvFJ6eZHvdJMG_i&r zV?Snfy{upAsB|ld66ei08d%*S#4-MuLQjR!6IyuCZ0k&2tVySPwBeC1D*Abaj=PcD zn{Bly6E8xQ_`~8dD9|cqu<{_Mzvx;tFSQ}V+!5@O1=JY%{(VMl8wE*flaHtARJ#Y* z6PZ_lbX2mUZD#HFH<)2rGoUJ^Q7yty(Y!{|wgaR?KZ+7*SR?FvS1jxdvhWv-=4zlr z#YdXPJE@ySpR)<*D~I4F-P~e);|C}0csiL>-ZOSgE=%T0oL>6D-K8(_Uo-1!!H-Zp z8y(#jX%Cm4{0zAP+qQwGQVtxAXPxq=W4Dxm;<=y}j+@D`17YOB?Hn}l0{$w}k+3;s z)RL{e0p+VYru%i|{?As{UK24@dV{*ntwB=+OWvI0}s_CMDHBVG@ zZq%C&A=GA@_xsM3=4^nSBsVb1H^q>Tm2h3P_Y9x#hepcQRHy~z+9X8?4Lf3gJSmAq zAd>oS|J5d^-VjIfw=DCmE!~``$XgetVoZB{y#?3uAGG$W^Kn+$P>9j%2)ww=>_VAv zLaGR>QcE=pbfZ(FZO{`6gSCkQp2xPr3(L6QoRn;%Z^61BWrCxo`|iEg;gD_3NPIkt zE~@bjG9qoEaJF7=v8~-5W4`|Nd4rDBu&Mm57eb6b(a8LjcXWitrFfg= zGybu`%@44Coo%{GrExZe(`|0Gncr5FD0|A=BGb-)m)KF%D$gRB3<0Hm- z>=2E(gt$nkw$<@4EP>`d;f2c(0D0aTITqY@|MscPSiruDH(C=E*Mi%H z^@$s9zKe$9ey3Hi##)p4|A_^-4_p!d_!+#i@s|J^Ntm+%itn}jqbxX*n>Qd{8`mH* zIWRB?y{RFw6IaGK?pO45p4${$XE=sjojRpoo>x*2U1o#B(Xt={=}i?$Lq5f4)*H?&bR`pWSqwC6jb2=}p=d*Slia5*Tm{2~t0*vZ^dBky+#2jdd)5 zAkDKXC+Fm!yKtq|kLA_(~@{-1tnyj$?`ewwAH=INw>5d<+w!pE|Bcp!cRGdtU(fRo;3g*%;6g=4cIl& znMp&GiqK}sUpjn7YBr7Yw7&_-b2K}DyE_)`+HO$u$^S+#yz|e>3HA|T6DaZ!$zIDd z(;ZB_#wGk9T1N|t%x4!^hc$v3V=C9D60NC$61{(V*%b6Tf!n65Mnh_UXRui+a^%B7 zcQ-}Xl2y2-vm2g!6+)me9&=^U`xu7PuYN?~WHCDpTDi%c_UK~E41s)P2k8X)K4Lfc zKH%F6i_mRfSzeB4?LpWTSn7Pg)a#El(j*@NakncCR zwC+udA1dZ&In1^-SE}KMSgJIukfDx&xm6#GhEc{g_doD6&9}D?QAhU<=3n*{@1}4e zjuMxh9pd;P&|Y;%*4O*iyFS3vXX9t?$9*3Jh%NfF-uWP7;!VsiJb1F4G4FF7P2sNS z>Ez=6V{ zb)Q+m04j`S72Jif%c4vIse+b6iW|*PjqlUE&;5bC6G&o8qjylN#GWEWKVEA=HE6@o zb}20-0yYuZ9Ck3B?w%U7J9)%FVO_D}4r$&>%f`Q668ci_4U|Se2$C_ zkLZdv=24}W`hOsArsb4uW}r!IJfT3C|I}C(8ewab*2mXT3ShzG)1RMgVX9&Gwo-i; zSsB;<0?muSj zsNT69I-MjFtP|{;wg^ak^Y`YYrr&nlYF5JiSN<*QWW{I0<3_iha7OPz^;O|m`G8R_ zennjw7w^#h9`f6t!7+^B+AAw|L?JJ~Vrq|vyqe_wM@OOl!W36+@~p1`IT3LYB0@G- zZ(e7^_AUJ%ySsBoyE94Gu9Ie)H{q_@hLK=C{(a$~pUdXJOk>o;;0=~2%7-$l8*`$K zC4~5$1&`+I%Rl1F8Li)&o8ku8BkdOr_qdAr8UotOwMg#sD(td^!edkww{{uMX7kO> zcxgVOUXQ`bMA;SJ7+A?-ED?9?KYT&BngQKT$P^w*ONJxH7}nwkWjT~h#92oY+XTMmI-+_t!f#YOl?_HI|yeY?twFj-kJdw;vVL3g5=ow z`T)yqHBsu81rE`jdcs-twDV?Kz@;=^^k0^MH&fyY^qu3<=S#TWEOP!bG25HbBUw7gE zjOsiWe92tTQ)O&~Dk)z{>pcT1#6ksL%%QxaZ=STV<_&Ray1K6NP8QW1t?)jVmm7!% zbS-y$)&PII2q@IJ9Kq@ZWq#gU7f)5Ywt2eW^Ud_RD?lIe7mpZ0flT4IrWXnzP`gXN z`p51ngL)2jIggGQYH>%lijFOnOA{Cs8?pu+_?EzVL$rkT(JHh01P-fRpDdNR5OEWk zQqC76c3CcDQ^)PSkSIjG_q!OTMpPFY;o9fP;wAEhc62_v&-z(cBkt6J9BF~mJ7-RC z{9!65p8WKj!Hc3Bq%M_zo}-&K%KeV*kRKaxo47jV`txBOBdTqAu>UH_H{vUJ3X_u9 z`HFhPwDaxxk;&c$I2RdUvXF~GFx~m5Z*1jL?>{||Ev_ADsltY-Pxl9hYD^BG(Cf^$ zsIEGTR^_obw;_=~E;}M;0y}BPc|5F47n4XP?a#HA#dfLbmYrC9WtY2;*iE^)-HxBU z9cCe)WlqKMRfN*_eAMh*j7!zJhX0864METtA-6zo$9z#S7>t}PX*n*4UIFdJSB=V) z(!0kstogck=KQ6QD%DS0IqQHair;t-dQSO+`<^)Aq7XkobGp z+2}d>JXb=pQVi!I979(rFkHu;!}8`jcdA_=nJ9LsjGpdI>74o%d034P;v*rfOjlp` z@~@ktDVizC3JnpE@jkKI1V|`rN$|FG>h(_H?Zq+#ap~}6T`DGtaeTD>yEw{D{$O>e z`pOr$X!vrffugUjl?@1cq{=cNTC205{UTmW<-$fJ6o0Dcz5XlttmBZME4xS4{!zLv z8ieNl1r^?Wc|Pv+I}2>udAk>*(#q^)$cez)Cz3q7<3ev!#W{|Da9yNO8}=^dsM!wd z2psvxwM2SaOURvaZ(2<{J}bl7U%1?SZIWq#A0j)UWSNDX?COYivmJ?xde+swAr;kR!`Hi+%f*LeUFcTVKz2$Hf-YKY--& zA2)e#-A?2WEvRUAJO19h5c6_3K5zf>JP9vXqfM5)1ENsnUAH$7Ak$HuMf6xF4>jAm zQlEazh>n|SF2kuf;e~bovM=+hv_?;}=$|Y?y*43ZGA6J4#Wn<<>{L{X8YH6y*63c+ zcscvv9nvTs1U427<%_lwIviC8hy@scCx==mRs{e`ITJr0m27M(i$NxgJusvQpLv+( z_Gw0VGl;051*t(|Ro-*-}7t(q7yVud-$BN&T}t6%*aWd}j9VKL>kCv}aqIB_BXQS$Mi3MPBOT@xrb2 z_q8gM2KU_AjQylM^$hWLDgShX`#}PYlSCA~NQc8O-MFI%*QAEy*5eS3%yXxPe@^g3 zd?!P2%$DztnAsj?z<<}~ZhQ;C#S)-0e=WnK>CV+{e8)}#sssMa$L1GH!Cm*9j)esc z3OAz%Wf#~}7<9x_#O3M8u31h(Yw*|h%xBR9w|zGF-a#8zF&zl_3sI-DN}0)H=ei9+Z8TkxHR~vk z$);5ct~bHcHcM@%LlHx`$yX33UB%iU<<}YgY{qgw@q{uzER%t|G)Uj}j})S+(t&&T z-y^zq2|a_Xruh>Q4ILLtq2tc-DWa|fHDZg8SPdu7H1b5y;_f-SJ8JdD-T11#tm(G( zFocQhI)BWE>LoFF&ITrXw0~+#Df9cpyb#Lm@H{{QdeR^&bDydI*!`aq{tuP#CcyT= ztmx~1aPm{&|Aig@U-shvcR=+2ak6RG#*gTQCjtF_8ywn!pkpn(um6(vv$d$xaKjbK z!P~O!6C)m&p(>{lIOVfX#ytvea1J zC6ksFBLuAY{3NXsx`VC7rt}}=qB5eJu1mG_Dcn`eHdltye`hJH1fU#i_V2%E;ORZa zn;}4DkNRER(AdnE_|A?SvUbOI8|QzKoKKxcRxEGYL5ifg8CFWkAA{sVX1x?+Jph2NXAH7>+ya?sqqYT8R*(vD>u2Q6Xv zE_p9Te^s+yvq#@|CpCZ8Ci{cOMLvpV`&YpUq(AV8&>du$#D3qE{K`T}qy3C$X-#~{ z_g$w0Ims&?KP6JnVSzbgJ?}kLW?Rkl{=j9Fw%U*jlY{u@sSybq_O{%sI~cX1Wja)w zrZ?w^vf+ZyX=jQDPZ_zb8~zAXd}RR7>-wRNff z+0+@MU6;1c&A|~z9OL+dOPm3UJk!4x6XZ^@+TigHe&!4JwUZrEl99o)JTTvx2RCL^ zrs8GrZb@YCIy|fMIa#nKxvabq@7v1H{>Vt&wTn}8h9&nLIqFO&yWQ43StrGzlV#;zOMT^Q-z~}V z7lDjgmN5d-=ZBFh+Jvk|_MiJTB)e_PgtjGsWF~$vH`fLcTiEBw!oSf*zv$13C)F|Y4D)n~udx)g-cogqL0<_vteXql9StC-vYE=JQ{OY$X zkq#S)dVbJ#mFR+k=d16ntvUfMmFgY=_c^1U%UyChokAmIL5uhquIxmcsbIz1#c|(WJEG_MepNnqn#gOU zr>#`kPl8L@x_Zbpn>7^#LM&O>*3(J ze)v(*aG|WXcUfro-J(2iKbzw$P+DPa~h$I=(yUyGqncqNG6@=LJ!ZQ`uj^ zrc1REh(n^?xY142VpF=1&c`W@ck$^Qn>o#OcAclhwuVDnH3n!9}QG#!lB2rT-*1T2hI^q@g^%O)C7CA`J!#;B3g z(rtq&%UtY{zdti-ZrvZAT8Dd7PQ(Ps^IzGCNVQSuEOQ-`ykr@zD=I#3D~cUEJ55)6 zd_Atvb(HgBOPL*VQrviSi@QI#>*Xbr*rBXAx=~{wajLj5sfOcf)p{k$0}xT1a!$D! z8!*o9aS7T4(!JSZbeOH=f744htde?nFN)M!#+SQFk4=BAIWS$b4Ws* z-tTK&YDW#_VtUJqv(3@vEfj-o3~NE%o49S|zVkmICZ5?7qosqqW)52dWo3yUZOk)R zdYj4d*_L~oG@x4}P~)s>uQt(cp_EgT77Rl80zhXq$NE z%7N@g8YsxSZJ0KGOzyUOLP6LFnv+tdjl9x+_|x>g0aYUu(fc`#snrbXN~H{W^ImjB>Z&Mv#!kF-yyO+u6@^GyV3$=7Jb@%!0#xY z8OYQ@iSeGm-=wfUih~Y(A2mmBgj}o}9%f0)@-7Q*HjLVHw_WH5A%ZXavAaJsI+&jb z;Qy=?9J#^ujbndtKi#pVzYga6i{206 z)%pjY=HO2~BCy?QlIzoy2Y`v5&U1PL{*idJZ$*;DfKj3l%qX+-VgPJGbYG6A!k`H^k+==*9kC>LZ56MPy8jy87FUCfOP`oUe@67%(PDfDcXX&O>1fn7b6vso0-LjcV(f5DT!kNHCuMV{?Vp}SL-bMy@6>|bX z0Z(M2%n?gb8?I9(t{(-NWKPDDF@3kGmt|OgS0sHq-}J)4aj4GturE%xo{5@?bTyK&Xyc3C4EtHM&j)`5 z(D`Auojw9HE$Xn|Z(LkoNllaNz@LGw?Bu3h>%3b{a*GKoL~vrStyLEmrcM3Q&2roo z@{uLjNmELz242P%%DUuHPdrk(hQ`PTms&&J6#VWCi9AJlA}#Y$HxF#{;Xyj0REa~4 z29!xpAb0mE2vMpTl02?-uwhDf$f2cPY&bDlM*n6y(gV+IZ!7o*!e@hcK77^K=hyl3 zE(1h4v)zhDmqcdTSlk~)E=qcDmmO_gp|4%nH?{)3XYrpNapBfnsxuH#& z{PxF2tC-bd`{A`b#SPntM)}U$#B27|fp+w!$-g&|YAA|k!dd>r5h!+zSnEE(blhlcKcOBywyCMTpL$f& zi6n27)i=^Q4rNOA>Z?w3iBp^Ux)5B_#E0wFUq`DmH`tkbbIFEDa@rR&9N%0b9AO7P z32eFyR(*2YZfk6R2n1d?ONu&b!B)C>Fz=GdoH0GU_pK%lN#8o&hdRnpI}G!9)p&IQ ztf#b2lqchi&}KH zHpY6`E)(eB_=Ta@+~+P8>w`vH_FLkX5mj$uS2NbkCX*}k!#|(L%>HpZrv8j8pq9sm z)k5;h{7e%3)1g3c-#PY_aOcw@ss#F}Oy7>5qH`S**&gzjnos;g zY7B}W<2j9jb^BMnJ8kiP9kYG3>nd++Xm!L}D|fueT)iXg7Hq7J@QUPYk91+KCjG5p z1VtGh$RY(;l9mFhga0mgdjc@@ZZtsCP1)|R%f&Q;dP?Mr(!t-S(%P3B^E_Wa5Zo&j zu{d%HY_oiLJ!Y}>39Ph7JS=hNey7LsBFX-k!XHZ2+_X94zGvIe1ORtjFRyc+)YBSY zPZtS}KqwrxDnC3rvMmy^{BuuFpVS23kg}_oB}xDQk^A7jZcybS24|M94csZakZ?}w zgf^li=R5G%vuBPdzFCSc@uy2T_W3Na)jK7J`?$u1ExS*2Ykj757hyWwwmF>3KA-fz z$Ns?w8ii7=RThgmT767oB&fP~cv~L8g}TOP?_ZM75A>yByQ5xGkxgTqt6@YDWl!1d zK3~%nLdHeq_vw_EBy&_g=HWkdNa~wIneZ$rxOmd|K0W5z-5;ygsjT(snzwXnMD4ZO z9rMY^7SgO3`^>i0A7U6XaKMpVxBd9fT$ASlk^-e1mNXz*N$abkxR!Shy54!Ek2rlO z3?O@c*0+}3L%Me$YVEdu*WYL(?}klwaPh`wmcWDX%jOj3*E?hvh773jdpKF=5CcVop+OlKvxN--vW`U|8Jg@!2asGEr+q=0=c$py~Df8m#<5vX! z`!2xo;iw=!*4J`xHgtI-99mz850SGcriSV-aXi|@Jxxyud)wB@QM*pxr&1f^1I0T3 zjzA~N^G|dkv#glL2H5ADEGO0W_u76_O{b2^-BI9mcET0{`X&$^9JVV0y`wwfSO7Lg0uM%m{Vaq9Df(!P>jhb#RQIu{d}|Fz(|N% zYvt|F3+?n*H*$*;iU_~^GXav*EVuAc^TACCr9y=^hYLW+X4zB$ff`K!<2xwPZNIQX z+121?73+&br#Q8V7=~4&*XOmF!p>sXtC}%9-efcm`M05$RdRpz0M3o$w{bo1E{LcA z2Kh?M9%Z!mh{$|Ev0s(oiR|d~oGSp44wa7{n`roR>;+CzgEyC*0d97v!i783X3Na1_;9>-MFX*|irix{ZGg@*jCP zISpwDUJV?rkd(9zq1L%w|)2lZEy zcPaX5(hDy>pS)*j+a2Bbm>ThYnPFBzufL=V{gU7b-m2HZ%xc@?#-=Xtyoy{W!ukoXPbC+*tIb={j`3radWE{?jK)y`mB0 zrUK@`YpjgFI3e#MFUyI_Ns0H{3eV4j-`XXCdhk2M; z|Ge$B_g>vy-PQh8)jUE2YNrF#7NL4-O^-kM#0sk&yY$mDWPiy}1c#C||5#slP!)^A z2;1B+%4yS0>cR_I_eaJ6BlTWfi-`1vjLuAg3V0;QXS-)fViNRDv^92pdqt1B`Ygg? z0nkB0Q+g$vyqi5yWxKriDURqyWF#b`zn&LIj4EoPUKyLcwF`QwjQQS5%QoET%PoPp zB?GI11s!;$fcgms+Ku$<|L%o-FIN@fGj<)Ppxe!@BNPks&v8M?e z;aD2$Kpaz=V*=l)dTQC^-5rVSykO;KS-c0! zzO-T_4Kc<%FSuwmcy?>lWBsyft~p z3zgv%b+(10vU=AK+OD+1Bz%eo^4m}!0s8JcJi9bW*p9Y3eHeIuX!oVpuAPZLW7X6i z_S>+nzsAYZ9pBrB$?)d+`TibCe|_NLFKy~c7w~lI7DLdmVB+^5VP5YegTTFntTfLeo zi}{-lnyhK>H&Ji~?nJxh;JLjo*=&pegP}FFp8C~x?N8`1i88z%R-7Upzz!?f1MVEa z4c0E*n!|#9z|k%KP1-g=%SAahwvl#j<0|OBW-P^CX*f)UrA@xuqLIaw z+(+3x-gTxv4Y z035#&o?H_l>lL@aJ5)MCJil5y%Uth4PN0K77#$2>#=Sc@OfQK$Uy7%Abj}gvM@dh6|PZZrE7;b1MsZJmi?H$>lvnB7IcPzSJkiqO@^XI=xGMor5*; z^?+TYy6>dR_ zAeAPx64J-5Bgq)HV6DE)zN$OV7F=K+1vCT=2!Y?0Xrum}dtQ zV;Aq>(I{TW%iJiw!SR!|b5QfE0qAv=_uf4tIPyf|S3%^f+8tBoA-@>%p8blexyV|; zXITPTcGZoJkzsF_V~N>DN_@~yZ|9Wl1>;E0M%kPqF&Xhpj) zKM)`9o56dOcM*5wJda;R-PvAfUq=aEr>g}#Te5JgYDm_6r#?%C%^ zR{U6Q?Y-oV>K^)TMF6+s$e>kGfV|^S@d!Wv%cVT|ox?N7#Pe;_u%$(3BO#f~f`HrM^($G+*ee+I=j|=H zs>1V`FN36oWA0J4{RM^Cqj80AH_4)muz{-8_IQZ5qRMn(?auOw<>*N9}s$P$FZ`u zBC^R)Wo!J5siNF``FnF7nSeU%6GYcewThj!vDwb66Z(3|Cs#3eg2Qh?}pF2|Csy|{(qfV zc3d6~V~W6|>YVU z3MON2g2>DwQLv1TfKIbs;nf~RVc%!_qZqUGFnzi2|s~x&pey zxI96GwXy2*i;K2@{?~AJ-iOiIWs7CYterwkXl*nRbL^j41~ko5<5HiTdPIZ9hx*dA zU*y9z<9o%VxtcwRpxxashv(@I@O5fhN%~m$+VHBHk$e=xpxg?JNbF8=YE4c|VTbu9 zs!p1PW;=LO0sMfg3slOBZC06-ikWCcvDpscZ$u&Lma8hFl;9~WgET5nE5q; zsl7VisL!{zM+|G1nx0co)R=f13r_qy(f2dafLMgDU`fa93O&-^Fuk8LtzOxgB?v68 z^)6QUo}lnt69XnTPM-M2C;>G4KP?uP?fjg2Nzlb6c0zs>v^3z$zr4il{Fz&O+4KtYw59IN|A?*n1v@= zIX{Q6G$Ld$ZHU zb@P<{;{w2ijdZ&FB|%%O)`U*RyyoX?JY)#R7E< z^s{Nr_r)WV7Htu;#!il_uiiNd4jiq0iEU4nKrtfD|K>#LzRz&eu{A+D^0zHWiFr|f zw7FlGJR@c$^MlR2<~)>1{(X5NUmR>Bn#%h(1@u76{J%N!XG8neNDLfMWu8ZY+qmJT z5(6%!Y(EvzxpiMLvrCiI(W#7`*|<_ynr|18 z?hB53pRam#(qenGLVAr`&7ZfR?Nmv70nxI3X#&Tc@jXlM(7J^oY1H#K_)=gy%B5aG zC^&K&Qc%6i1O%0vz+&lIe)iyFHu#CWPhy<57Jhc+nN3HGt;XcQR^MfI^L`S_+2qLJ zHE`jZ=~xW29aP91R1wAthB1bfoKK)Y|8pXii|zKJu<-aKp$xIW?*TB^mT{SG>?N1V zsMO}TG|tCcYT?h9MgHT+ov}llSp$a4Dl3(L#B`aaa2a}DY$%^Tyn=eDvxjuv=(mpK zd5vrhS95nZB_e9^9wmM2;U`K(DAdY0ovi`TT|3!$2dn^FP@Ez31h$D<1rKsFGLbd#6l%}I6)1h!!!hr%jhecjHxjl<)h zs9G0gQ3N%uH#k*tn;f-C?m?{lJLKR)Mz7qq7* z&wd^X1OnrYKM1g=^YbGw5dncmJ2_0!bXbOTsmpQ#ueL46mIhhs_953H;I>Jv%{*b; zrn$YlMn!@K0eiWRZ&ilN%vSF9IAhTB&{MtJ&n^1kaVaG$@DL%rC5N?MC0(($YM0`C zoRj%+Rlwgr7d!BK^3XhgeU9|si8?rDhfCAK;<16P+QjnXc}m~+;4^T_TL;EtO^Nqx zai7lkXr!;y?GB=F*c;(=mmaoidY*BQtjrvSc$?~x@THFqFy>ZO-@5h}U8j_l;oi@% zLD6cC25m>_GWl!6yk#ID?l#F-4uOj2#>jd2qI$%&DQ{cu)ZKdw4^Uuqv<@gUDQ}OX zKBvN|Xev0&lrWaflsV*-12`vEERU4jk``b6^WTaoZb92T*U)CU{#Np6m6`B3Byp4! z+W`A~g7oU5ng=$uFyVv}V2Szc`LxGk$_t-TPBs#&5BGQH;j$m0 zK@=C-ZeU`IW3Po@JC68v6A`CHX`|9KY|>8W@T3>pbo|YlWJwI(y^H0d?men!u1_#R zQ;dq|R#QEv)LfU;Ibk$zo*FPRm!-I=&saDFMK4^JuX_piSZ)j6d3{f^1HGU^wuIKR zzM&op<#DsOKf_)?>9OA2+PAIYc+h?LQX%G=2t-Qu2Q(J8|($|yd*_$;qyeM;J$8EwkcKU4&-JwpTZ+B>6UlN$Vp%A>-lZPj4M)j>wlYH@2iJ z_zKRb)j^##;pU;OJ?BWlX*eV&q zt@@J2Rl!4{U`jQDcTQsH$*qO>SzMZ2uC62&LBgQveM?50JfdlRmC@yI5x3|yD7#hO zW;P`X7_QHSVdM}jLD+BvHC10x**lS3Bb#&lj9!^8*0(G{Zf?8YfZklw*G zE7<4X{}!X?1W_A(oLG%~7_`K+QkNB9N2sZ}t#)nlv#-|9)%oz z;tHyhqs1HIu*3dJPiCZmUUY4DG|K;V@$%Zz^%$u^MPuAqpNL>MCf|re_mxnGjtgGO zduo34#^obbihvcd@9ddo&1fOhQ6Pt1RMJfxTLI7F8S4urPrKb-K!Rd%8WpO>@0SF< zy%J{@w;e&c?zjPNfR7a;mwcTkvv^S&xOm?byO4>8>vETH_5p7JjV0Ybl**ZiTVfVT zRYHM-ix6u2j!5voW zN7Odk;fu5Pmw~t2=WOtnz#9`QXA~0@8>3VQQt=_w#S9xwR~@MMA|^Lu;&64r*$wD2 zWY$_QV~I-<^!qj;pgs_%-v^z=2R>kQ=%?w~Uy0zl0+&C&coT49LB!JoH>`-E26 zJ8T@Q=P!}R`&mF{(FcnL9D(1n+hYnWhbE5H729hZ+M8>lEqWTO5x*)KStw5lAWFuP zgYWzzc12xw8AD`i50YqTwK>jjwhL?8DH$IfBs};;UcM3i7}h~QZ%&Z}{NQR`j(D1g zx&#Vmec6mE&k*!)yyZ6D6CvwmiNxx@#O*LeC{kkFAwe;FUz8YU_%;Kds{MX%1M}sJ zw=%s6Sxr9!$=K6P_;3~Xhc?#CE_bo1GPUvb;%bj_hA_Laf^pB&A1;N&gGK-5beS zDml{=Qg+oQfgS`_a&heXm>u|9IYz=pU*)*$oJe?eJU=&ZmcB@P+5t!oevm)YO&PC7XmM z5$mX5*~mrdGl`vHTJATCxfbNEHOPz|$nCl)(}on4%h;ifS&#_$QO3lnk#OTBZFS%K z3BfUQem^}!P2Qy+UMfqx&>$!%HrT5zxL2MrhqfZ%V`+xa4{R5FnzogAgdOMj;-j|# zeQt-TRzg#((3))I!jzBrqq9NI=jMv0Wz(#Ybaau#r4T`?!F&|-E_Px$`j-j;zwxyO zp0%?Pl?0ENta~6@zE@IrFLoeICfN38q9Bh(v(NZ=xs6Q=cnXh10NT7ghMU!@?s`N} z{q%UX^_6w7KFflpL>@Wstd(6pC@qMV^Jv6IYq=Xp`kCWk=Qu2E;d{j5Xt(#d7*~)eBE(#CruN+b;@X<8y4@i;SZyXsbr@%UZ>N4+9)X%~!r4p(7c?5L4 z^{h$W7W3YnqX0Z>gu!i*1V==jud*<<@E<9r6S{9Q##Zx!&y^rxUOz&Mi(DU<<*^7F z2;n!VuVr-wN~f2|g-p=iG4co!M=Tu?`A{x>NrUt{yr$-|hfUgeJhN$p((MU@UWnHC zJ|YR*tT!>Q_FontM5!gs-0C)+o;#-SIf%dfM0UNAwGZ?nX?6K>|(Br`AD3y&fJbhh{%Ib1>YY|z#!H6W0737SxA&;$` zoh+h*o({f=t4mq@-`9%HOdBylsWhTy&%&-cE@VD|yMTMNrPmkwv-fAwE6p86H7}ae zulMo9=QwFN_ctEXl*HSg-j26#%TZ7UeZpw1HIPe!ELvU~>z28kx-lafwl5sD?+(ii zF_nbm6dUDiCpa=!q|E!GAT2Gl0`0qBQM6oG)*^aw%E{~xnCfz3kPwj!&MxH}>7$Ae z@L`#NH2{&k?DJr-uCryg>v>xE?g|((ot|pT^+nuyc&SGsirlb`@1XD=YwTvs0*Hwp zkr*6tpTBY;9WsifozNYGfpEWWN?H_IW}tPzp38Ac#s- zE83G|Z7<`j5Bm_=95jPHXo|xa7+@a4XCKKOX(z!Gy;2SnLSRwBTGn#h(C&uYQ~tEl z(Uw-Ip*;w@oH1|5m$8E)*_PLvfGxl$hdC}g-y2lfa6uhP6gCqmI_GHz&UJxp$u2WJ zjvOO6)QTVWNpVBoVRbpCkr8Tc=K888QLC1cD$<12DG_lnJ#Vm} z;YFubMuX!lQ@GY%Sj?_;+z)c7#F2C!-nphv;xo-;IG&^IO~M-H%yw$9hE)1d}YC{yc=bbCZ@feVay>(M9jiTlDTMB9Rk zPaW18es&K{g1#Gf4J*2HBe`jtXPaRV&*rdg^soQL4-RhueKliM-*jR_LHG)OiOeBwELyBY3Ygw$Fqx@=qq?IWsYk1Joe%$O`o!++m z1TM@0V2`$^$n5_h!7j*USH%shet0b!S?87_)L>2Nd17bKlM1kutEXIl+(KbduGyRcuo%|jcn~B$}`sbKiF`%pAb~UQ2kig3U(`7&g)wnYc^c>_hxj& zx~7)C{xDl`>RSnDI}ewncXll=Rb-u~o3-fBlmdQXZ#acQAs!<=l|vyR*3id^g)Ey^ zPxEfjz;xt>p#onwEmegt40ats6AmZKR{fB$Y~ts39M#}8IReWT$*{iAu2%+uEBR_< z?GO!KK+m48>{-tSmX=wMqC;bp?FpAf`=9YdMu!)xBes%6ndth%h(i}gJtXj7V3iY8 z7TdCD=J}aId!~pU32zx>sd<%O*-RKYI-Cm*90IMMebLvWyqkwbNK`L$++!D>>v?x) zLq^vc)U@C{-q{qD#^WC^Z6SC+Ju348_V-FIC|z638cm-9&0ADyFJ5I#Zv+}As}ry` zBbU>%%Lu+p{gSx3z(h$%{Z&k3_?Rml?-5Q0!Wie;$c;Z=ZD&59!)Dm3G}w-LU}wBK zb|Q!yMvsz+)u)I{cJr;>#`08h3_oU+{g{)>vs#XHDmQWsoChC;r?I4u@b-&gBRXw2 zeJ;ps&1s)GQg4j}Z&R2{M8!06zU}AFk(x)wvNAF<#ngPD4TS`2ViXWz3$mX6nnnYo1lU!%+qpuD4|cWv%5;w3!f$gZe?tR> zKGMe2L=g`!OrgKQeSK=ODjR#L2lDibFPFIUPmB-Unj|LXeAOZT!}<)#;py%yF$p4X zC;eyO$i)X(iFM9TtbOxU54a>LQt_=>zjqplaV+^oCoi-lq$v0Yb;O<$B|NnWMPxhG zPs0m7h6yWU(>WO#(yh+EAgYyO9a`;RXKm!|$u~#%b09X2Hxh}9>CXGVScR9{blhYL zHwQ#@uQi7358*Ff>t)n)}>Sl-XrmZqvtn)M$G5}Oo)NVXF zIyUg!5^>O>WBicG_{-58S7t(aE`%1RWAkYHw8`-vAtfcN=DD_1>*e9G;m~Q0IvgGl ze_&8QOx+|@|L1GHC6E`Sq|@h7-EunScCxt}{=GvgWILD0;<^o2LCf;EZn z6o;qPOe@%<7#yU{nQw4bQckCy`8%+QFo2VY9pvGlKWn8z%2g~f;=LyU6{ljsl>Ta*D z4egBP0V^;ssh8y)IOi%3<34CfxZPuUH#>guVqBT|? zlENB`rg3SZx1T=ANjmR;{lrUzHU3Rucp`;e_m0DAssc?fPw=bD|m`3I^ zHTU~cX}_g2&Ro8l#fl(Jh?i7M(Bs_YVsToQ=LE%=nzL0ybQMKR|6CbWh4wePmEPF2 zz?0?7!%qO!9dwaJ6k738AQM+E_RK;?7b37GH=wx@DPycGuM!O}U4|p-rxena zP!nR7whtr;dD#5kyOLpiPvbJH)}o%I5EiWzewNT$cU9h?K4uoy5M-9Qjkq?5SCxZ2 z#2-Q$%24nV8^74)cwuW?jlhpeYgxF!ciJKS=I>{@UGx(xOwSSZt@odb5e?2ugwSW- zvaJ$g~-h>LF^HH-@4Xu_5wq?cr!jzs#>|&aTc=w z#zeTZsa`jwm% z^Jt7OiW;{#*WYiic93@f{IF1+ck6YjC7^J{mPil+_o(AFvXd zbFEr4E74e|pCcs`qnBlzntDWfF13k#LZGE|;+KVvwkw!=O#*uone?`Xu%N)@hsvgnS^ z;;O9f*+|L`M%iGFHZzEf`SQshnX2(_WT!sI<>qOXMCp%U3@xug+W$<>Cm@NRa{h)O zdCUC&1X43zoTqAgUlSmi#F$so5UHJT_fsAd`A4R!FJh`_3UGpAW zvykF_I_u`-;yO3o9VM!#IfuR;Nuc$--^S5u_Ds=np1O?7>WBOI2NAfN+po&jQZx`M zn#!3mZ*sq;S<`7-lrKdWkPFQ{3)5-5*iO<>P&C-wFY9@pVjqg{Tx}KhJ7#~{VZ)sC;s^SY+T(sW3w0oVw2kRdBI!aWQOBFnI3gveDp2G+4 zY(JmY&@uZO8A-=k4CwIW={29~e%jQgT$^sSR6dcQ5Jds?-Ojxe8~s?{xjY!S^vis) z!sk6`6cCnMxPXYgDZr4Ci$RM=fGur~r_0}+R@;Yu^l0J!0Lx;UzT#Z$CUu?BwVFqO zOE4aksog>0x~vd6k6a`d;YJrmAZgoKd5)UazYLu)?_D1>bI0Hy#y0yLX!IAI0{l8z z%Pvc-=60rrshFCNN$3jv<*vZ-9CDbMulWe4fa+{A`T{0g6F{D;L8cqCqW8(%?L3i% zm-37|Dw}Ej#n*SysGQya5g*g6%OV=(b~NzJh;o`5pxJATeO&P_o52Mou0b7M=YoBq z#W+{sfg7$Q%{)&b{s}#7w29ehWr=Wfu^+PtHHF8GT!cohIwNJkTae^7i*R&A*Qj6h zNP50=KT*i*m_)6XKzlh}@TS465f8}X)YYOjv@&yAMIkvPdH52Cr%iKzh+Q+an3bTu z@Wga0;5KlNG!*wb&MV;k$tf*`spTb1AZxzs-S+3O$qW47Rql~9c9PW2?mtH!YZq$Q z)x!_9jim(@xA~227P+9}SU8=^+|>66{!nr~s4HFs@iUt){naRjdYfpi$gmHQ+N0?Z z$f<`r_PYh-;Jwnh%}u6QCIJ30Xi;V8I#hEc9nEDKsXbgBm@IeEPgmz#Le6T)B|9+>?!{N{LSGw!b$y2^S`~xL&WdLGf|MtUI$T_PSdJ0e-4ADs za@62gs+e&#!j8tUgbNh(^28zXyWaAh+8s*hy&z$W5OSimJ7`pnc7~2FH1E}9;J^We@7d@)V{WA zHhJNoxl;Fc-U_d-ENs6P+W3W$tt&cMugl8N!g3qvCm3SwijfYQHux)_jD&i$6B)T= zp@|Sjg&}^B(hqSvJ3fC%B}I+$-tHA^_3p~E@pQ|(rUvx5^3>e(E<^27U*s9{?v_

    m0A;J^3NDeb+)dRdB`0%9kbRv=57KEsmV@mN@gqYgluuhh_Kmh6%fda z*g{R^diIFN^Np4~rSQmlZlKdt;cEZCjzD;Soh%U>wRK?`y}Hp%$3*Z|s?aRrs!R-L zaKXI}rXOmTzT+>bE5lB8PnfyHRQ1u!r%l|Pq?wA63F6H$^*Mi6gs4oiE0_1p2$KMCJ^j$fe&S|W~6gmI~*LkRnYleTVY6z zh%F&qh*mg{ut)B&4^#EcziFj?FCL8&G$X!GD8UX}#^>7k5WFT$*Xrsdb-t1Y52Wg@ zJf3u3*#Pc$r-7wVp|diE5jDX_jn3Hi(2u%wq)+Gh3 zF65e{D{f6jONp@>x;=(;WGr^%Vz{0D5cHw5cp3GvlL)jW1&Nc(1#|)`QRd}+zCUxo z9tO+xv2DGgQXrQ6ibrS)R%E{F!Ae&qg`t=pF61d`WTRcRmGfCYeLgYc3mOGkC4J^O z1?@Yy&=DD2B>L+am0Auv=zFaCXDr)@9yHDVcS)?bu@nh zLtT4sC|rI;6VG~rcm$A+~Pv#6BR>JeG$G}F& z=4dxd+&2b%^BZi?Hx~MG{K_7s9apZ30?=EK5UB8cnMjIH);w5&Zb#pVeZ%rnoP^bq zmq{EJzxfL1rZlx=?#3m35F%#5+4^yt%n{@WtzK{Sff#fw6&6ZiyyC`-oqtiXb`1PG z-S(h%39D9Wx0%2GrYszD)mXcZM0mdQX4L)S*pbKlCCM&-K2WF8#^9?GSDPX3P(8u@ z$D9EFg_5||qZT}1ndJ_ywUc^6i7#*X1F1hgK6E~HMzuT%^G;71Z{^#THdxb`Rps)C zh417KD=hT>9C||Kq|MtS{ysiEzMzcD{F_KYg)5JyjQM+{j#^SkpjekiV~~hsgQB@g zm;P3Nq01L{WKuby|CDvo%Y%hvR9G!VW$4055niUwx0WZTR?%(d&^hQG=f?3IffsEQ zhed?TlPEStrM~sFL$WfxHDrfgcXLc+&>Oh?cc55(=D89ICg>mkOTI2kqn`bHdLy-n z{s(ORw)CM*6>GHLmJq|F2jst;M|o$P5;x7w{8^v$M12o>x1D8Puhs6^L>7uIprBG3 zK-tV|S6TWuv$s_k{NRtw@$(gd*MTG*z`}>#Fp?C;j;Gkuj>k*}*?*XKPlrqpuh{)Y z5J{oM9A(qp!tSpFtY*i1ybKf|05rrfLp@3%KkTa*{J*nf)tbm-*D@uNs4BcDU=Z^iN2=9kL+eR}_Y0zm&C zy!QV>^v}A2E@#-RDJ=Ep@$o}3=)v5VW#C*czZnIn-@(aP3L5=V13=xM3a`t+m^2v)i zkI)Q2-(XhJ5QbIbYE**`TGrT zBR00rSa`+}K-5c_oclK)NnV-8Shbfqr`H=ih12H4S1=;XME7>~C}o*EOUoHLKhxJZJ}xi)W5+Oa ze}BZM$?WqtxQjoK**Ch6dDH#pM&SKjuvq2#M30F|wl-~5IG=Pk)l+wfCs%}GAvTRM z_kc$)`}mdd>||gxQg)+AwJQkC7s?~ATKyR4k9bOnj<+m#(>O!~Q*yJ1>fzpX zYKYRGRB_JkmqdM9_i!->4jLC#v^L-KAG+)OMwqusuEqtD3@+e}WRK$a6UAtGc*j<< za#4Jae0U3Q*g5~kkTP?~lzudde#1)Bhcl;|K8HtqVxJ2CTZ5(xe5ivW#o~r)T6PYw z4kE;~yX{?K5O14KS&2_ALVmAj^4~n>Ia?Tio;yS>1c-ehlHM%?5!t9#;a`3a#glo0 zC$L_vpxTi@sgxn@ey3|VHa$?rs}aFqi^-HDGo9fYHh>YwRl2IhSf3ki4-xgn_i9e| zkja>+#l@10Yr5&achN;$Loskx_p3>HfvFCZxEQ{02X)fCxcF0hBX-8^S6@C%bA(AZ za*ChAP7rU{k+klGg&CfMM=5|$YmML#a`CA4KsjZQ1 zRCq2HNCVMp@7vf_c_vsMV~3a~hzzaFa_M{0)aGkciSb?gy5rBlseEnuc8Pf}Z1z-c9uaF>O4gg3W%tHte3AK4^Ad?tyHkl{jPIwS`;^ucW6|qa@`@l=*0`a~hAr=MeNB zE!fB6b5#8bupBFc-Tgj$@|{8rG7K02xRi;lu8meF_(4Ex)@yXff3f3QZS#VanLQ7L?Rs`%JP4yBSA3qk{t1m->5kJ7K;q;hH+F*f~JTjhnF{ zvlPpzYDVC#e}n2cNU{AvB!yMqc`c|eUuO!D)*A}5h>|#}eYcl(u!W$+AyXx%Esx0g zfpxl4Pjlh}?=;TH1TRB8zWigNyb<)%Z`|o=k7M@e_dw}*RV4)lm?=}W_-1|(kX}w8%aOEWMp6)IVlPAg z0N>*3GJHIfms0-2Vc$1)fCm$_k*YBltc#KtA%qso6Jh=$5vogqwKSP;ExZTu&cqMxq+ceFjCXfm?`&J=TBKKI zPKkvQ^ucO!I&BfMXQu&qLc54KkmcONQB&QAN@eU@5ytV)>}qYRn~j#U3`G zUM^NGTiJAJ>GPMHc&s%#5gs}Ntq^B5xisba)oaTm!an>RpEvsXPUWq|qc*_r7gKun zr>T2Xkb4RmqJ?2*sD9EWJMtL7wf13v?V^!ksKdRR!ax3CBO&Ap66f$QXCV|3=VOut zbF!LY6o~2Q>Heh6bVvSUuwk`M$eETRh)@T9RPfXeFR+n85P{Pst!WU*JaCJ|ne%i0 z$Pz^Gb$76C!^ZZZlPgvq6T?-IElCsGAQq3b4JcF&oYHPQH5IobWM}aC<-9l}>ZbvMaVA zt%cg%?yfgL0gU>$bM2`Gaa!L=Y>?9-OA6Df(@OVBodXapre-FmZN;fu%W$-Whn5)D z0XS!AU)LajxDEQt_QpV7#ijdaruTVBKqSU%06#HbEZ43l|LNFn`dA7_)@91iWpp^c z+@cyg5%d+g_o+>RY^c|LOU}t7JhHl%A=@d^1m95;?*Hzrf=@SLrKebLarkQhgN#x@ zopRT|+U?)?Nn^;Pas}@{W^xsu{_9!t?CXD{W%B;tZWB@e8*%eD^#8Np{30dem1*Hr z3qA;Z@zsVTy$Y51=%#`V<7CCV+8(x*U2R$8tmeN4O`9ef6kXE|sE2L>5q@Gb{d`!G zx^M)rKD7UilKR!TbgmaQzw&ZwkBv2MO112_`7C*0bZVvhyfgV@UHZ1Lu&b`5ChV1+ zu|Kl0p!lN&wKi`ue{Ceky~|KVp2Z;sK}V*-K$&cX^V?zJIe1(!q(-7^Q%roRnAvg1 zf{?Q@ZiTUE(`M!SV7`=$hx^#c7kYApwXTW%tESwLQ5V%#*Duf7RLzTeb;ILnOjEH{ zxNj+`26JVakVF&`OuzmfPt-wY2*S}rl_sAkYXr1LR;;0rKY#Q`%SGmPk*cN~ShXQL zYO<0FEgticqL@_u6_2bjvJ=ai80aiDvdNuy$8@CEQA*UC045l5U87ac`I-H}pwcj4 zGicKyduRqFcfu|Ea0cbA@Oe{AEQ2&Y7%j&~y_FuQy8Am)6x#h^O0;k|Ma_vO??fDg-0h=VZFy*Ae z)9Leb=BVL)W7icTLe5xcOn&pVWEbMZa!cd%aqy>|Zz3#3a+>qCn+{6-2ilRDS8%=*#0LE_ul)}7LIJ_tN1r|J7P|{4!UCqM+kMJ>(?D%7{vks$*2oXR;#RMXfZtqKh!O@- zE5{*&E=>T&$;j%-k_MnM{m>^ay3}c+*@psdcsduIS;ge8HtS=v8JGQ_#1jD`&d8-x z%~07VzvNwkP74W`!tf|{jdN-6j>D_|ekzTW;^01SfiJP7`NGpVu)<0Q&=pNhQr&cb zNIZP!bLN?_xh&ys`Rwat!M{ZrH+UzmK`wmpGJ->V=v?D24inPE9>}XHx+}h&oap%* za>5{B^5s(;JPyG*(@? zb56$D>M>YntYn>1kw1G*GOPOV@qnAu|18@8-H1Gy$eAc6QYeHA;>O{AM{cFm5ZUS5;HiFPbhXsBIOs#gb4H!cdG(;> z*wQ$|(@VXV)x31ISBM8MmSBP`VPMMA{pG3@EVpy*nX;;o2G9l;BQc%SbP?bA)XT4+ zo77{|a5jMrnay;Ep@DzP&u$C<#pF`0xwwFigu~C}O1x}jrSAkwyviFE13PKcO+GZ# z>Q&_iU$K99MP_zb_n@I5rn#WGS8?r^?-99Ma$y_jWEls~hPT&O9FcQgfjJMm`fOlk zT5WP*p(U=YsjXOp%`XXmwxnTt?qv9z=$%|^B~yrE)VAF>ysx<;ImUfR3fjfwS8pBy zGg<;oo<`3md+=IUcEZQHVw6j%!=xxJ^aztG@QWAN{pvgeLKsiCI#=1kaq;X!hMbbYMs)J=OhPFZ=iP42XWK8b40-|!Bo6)SV6 z+HbV- zR5RJ%9ffHBPL&g$(0~^fHLN$uO#{fVdh$Rtp$zC*paZ&ODk=I6CJUZzJX&;ZRSom1 zTn;H|-#EKs_>G=X8eyjU;5B|rtnx&32AB6=&^EPuFQ1pw zyr|dt@#wiAe3Tc2EYLBAc2vh0Fsi=W#a;r_BseM2`G*zN8XGk*ve%JWu8NSD;ZB&O z49N4Ye>%$+%ru#JZH{Lc-`Y@HB^=1uGU2s1sqpa+P~y{=o23%c8$F^T!o;;`z52u@ z%2$Vb_7opEve*(r1oZTPT*qwvLUKOQ1dbt*#o^nBCQT}4h}Q?2E+o!lhKUj>Rgn(K zd^7ulW`8D~V3{84n= zrj^cAtS(>+RDUPjos=^DNa4Zs*w;l_*Ec=Z+NU=G%q{L4$a+_Z4<$k;~~Lz-`w-rm)mrMs$#>Y%P(8ZZe0yn z0py~Tn+uM7u9YqL4mnnHr}EdQWA=l3DT`$&Ba&z=Q&uL1*V4P=j z@NZF*`MYfANfH6r6VwW3vNP`Ias?hVn(I93??ZpWL+TW8fX?*HHN%NjO)oeMp&vRD z67NZQS4-sb9%p`&>R^V~&~_BMkf;^3t_~w=qz@HNmc@TjF&32e8DEMXvB|!mxjduv zDgj$vEzoZHPIs&sAlLfvylh)mv&0}1Be2qJpyA9nUP-+6#<(E8hTY*UTUt!acY3@p zWrgJnvcsh+5br|gx+AA=o!3V1j!GwU(zY)>M`=(4$ldD5@8*Ed9AA15|_XEpY7J%PuWjXHNT6dpfgck$xe3WIHB zRr*C7jp{S5Z`28D6yNZgnGZrG`kPoaOO1Bbvx>9NQzV%z3>q!sJ&!v2K+QGoGbho`(f1qksb?_*yycuvJ8DT_&y}#53c^Nd)_`?Hs9bZ-m}2J09Cp9hD16y z!<4(vuY_L!X!Do_WliN<>U0meUGO5%;dD2bZaXVrf~qmyT@ItQX&l2lMpWR-j$ zjmS<37oo{A!Ei<;{1tTG&XoqW{svu?PZ)1EHw2ZrKld(fw<2T{n^ zXNHt|!e0G?CQz%@8{P2BLNPK;w9fdC{MXuqI$c%t8DgDfORi%-9EXwSBHYm3>y7Fj zr$!$4OXIc?cxM_$W1{^|Se`!Y9Gc`NjI(B%q*XBHKO9HKw8j9w+4b+VoV&hmGJJU1 z$--;cfC?`o+!m7y)l)6RZELwUN%wfYsdg#M-cNhPP4Dm|dmU(y4C+J=O3MdKQwt zMw4MEqzs_!`i>C4?-agl#8o+IDUq!mopl2+1@*N+^(!olZopA~C zSt~lDn=fn*%$hKS+n@%btER#16GsWxw#EiFU%r%ZrX6ZNPZX9q5FJk_d#m8{{1{yo zwfFwf>+;q}lq}6cc%oG!yap=GX$c};=xoUzOQ}0q^)8*i@y5iSB`dV%Wo*ps{(zEoKlnc zx#01aKk}v;8wn$cF=CqnIqJguvZ!rW2cuJiL&mYs^~a0E8C3d0x@K92?H96qHOg2V ziJRo57fA@Ian5K5h8qp~Q41-Fh9;g~^lpzk zj9)tK{7$2e0$q!uzO7e~qFo$)nPg!&*Jxp`ySp-yH~eZ*=a-}OZdy!$M&%~P%Je{o zM>ut`6{f1FrJ<&y*`GD=m5GU+GeG?vT~9PwrPbsK7Y~l6ni(^-@4_n=l7Ke`t*ALk z{_ojkQC;>fU|T|pdKKz>RhFBIh{+LI?G?!^`#nMQoOJ)Gc}&V9|3xuYoX&j7B&g(9pW~}{|^oZ)x`08ik>av&j+_{M&@au#9Miga(kk=ODh&{vk?qkUC z0PhFOvp2k+TbiAl9q8(vcMtFl$nI#-&+d4SwAP)@82s=nZL5~?-RnZW>WS`mC}kvS z!4eWlp7&w{M0ZJ*jO2j3mRU!@Nc(hKZG&8w!5f@o9{=7wR-E4GAl>mEdmUmXXlK?h zByx#x|CGr;kE~r{dms3ky*On1!mxNP5mqH#wDL{qHTDkz44m6WhJ93zvbeEiiYIpsbD`$d zCb}rH@+hdk4$a5k7o9b5#fOPVfC5;vbh{Fv={jsDL>SSxH3Sf%Oz{}Z&kql%6!t{2 z3dEmb3H-(Ea!YJ=_u6h4B|;^mw}aNL?#VPuUqV0e*~LBJA-->zu&~ zgEdqSEx)nHn!m2{bDWc#Vp&xWFJ#{z19-C&UwhHkxT!GNrHjFYLm~rR7;nhsbimau z-$QhB-f(bzM&EmhdhO`fvRsU(BRC+l*&dG1c0i7s?B;naP1%=~u9#@gEbC8s82D^6 zr-E+$wGs{eTM_dvz3W?)q4&AZIpJQNQ{h%X0O!FB@zjSuAEQDPZqY5JOrVpjUmPi3 zyBnkSufH+=NLNp5Y^iL`8HWUNe>5yNFdO(V4!fS*GU|-35toi{RFmEs!An(tCYd?4 zDf1+rls}ZcWGo{ReRE7EU4V{Hxuw@xlr~!#U_IGU>dxG>Dz<4ms#9G7r#VR0{l*`D zGv4po-9AsSJ)1S3cAb9|y|)w@ho)S#Sb0?!b54p{n66ZGk2lrYz?l77w^56%7+apZ zd83IuX)hOL{jT*njqVqMTVbIZN~^Nvk4%vSNid(&{fwrRMZu#Y%VeJwnROM>ee|Ac z3owDt_+!fNPWGSB#Oa1GUAQ1ybKyy9WE+MXt54lRioW9cBX3b217N*w(D@(I`jiYt z3LiVo8J@vy2bu{!^Obq{0+7vHPxI|l=MWvorHSCL>(on{HD$;^^VxutIq?EX=1~Ar{YRp8b=7W!JCXG*Q(Rzz4*!F%r4O>swoDl24=q7*Pn!{ES zAJDD;(tRZ2$^U^XBghK>{^J8%_CK%O2O#hNnt}9x(T@7xJMCa)8Ye^0YCp<#Us=OS zT8p|;3w|Yrb*U&V$301IBDQz~gDI7)S1k{8CIHADn6gE0T#k z!(44_%3)i0qFo^JfBAXpOT~+BM4q>Zc|DFopOW>asKjuCioU`i0MXqrBFBx4)qsY+ ze;lK=MmW_7T3hC_L)&}VU*83_YGIrc{?2DM;S_)E(bJ`9vWb&rirA8e5qSgdiYnL> zqlkikF+XRLpGq44Nd~kT{9oCUygo+$10O;^km`dYYi)#k%4Uby+1goO2KysL5e?1i z(3aRPZoa?@kp|mb&qvp8Ct1*7@;vs>qy1wYwxqW~iis6%-YzFxjr;-QiG|1BzR+{+ z#F@;a1|>H7I_ztkA>c1K$$J==>4bho%AuRNGgh4~$_ZhJM&xvNh7Jf1qO_F~ zS(Vw-db=N4=k-D{u|*Q658Fy?7K>FIZOON{5HWCxCDmuR44G|AkQY6AH8h=!UVY2Q zPZ9b}vP-%*aEj<(=+6ld-Lg1SEnlbMHAgnr!% zU?D=tKUTA<3^VfCR2UCIrbFMhfjUb6Oyhq()XY*;q+(cXSg}~RQQesg{p*C?8rlIV zBu-`&WEf%0%=RVL%p|0QYBLR@u=;f;k0nT$o4Zmu3Zv79rzUxKC!LfQmZ!17$&APL zjJoiZ!dvk*c^Z}qqgItifrOc-2uc&uC1{;D|3Fk;bmW-e-V5TB(Ud{k32jaD-CEB+ zDtTJGOZj9*l&WRX1liFEV_7IkOB+ue+snp6k)E>MEW(2Lt`mMkSBRB~BFp*d14$f# z5*zDw93J)Q3w+c2)hC_MgMjgs_7J8YP8}zF5RR(Lcj>oeRJzCn1g!9E?TJgnDbsi7%*^*Yg;hFd1neL+j==ZaYF*Q6c{PwAI_)n#cWfb)vbJ zWby%*V+K&ctSFvW4JVTV!AeI$MUuDu<{Vi39;CCMC#vnWO2Y9o@A`%Ne()<{e7)&e z#{P5BytYwn50$T&^cVWQK$ajDcfJ9QWCvA)tj(AN#$+cioN_QiN<{N}&n19h3`-hF z|FX5Ej9(z6QP=L1&H@=7x?dQM8Fbt6sz>yJ9#?@)E#9^Ht19c?r}*-<`)Q?$CIr8D zzyUFhYLvlaSx3DCeeK2F#xcNANFCS=I2|LHJGzim|3Y`jNY8oIqM#C6MCt0~VGiD|>)X&bKRF+QQU)B)wzY)IOw#I#R-d zAyJiJJ2U6LO#%4!&2*IBt~VSe!gfU7JR}5*BWjm&8`0u77JHw`QGD- zR?E@KoK075A$`P`tQ|P85&BYsYIR6_Ivu|&_tb>($G817-Kau;IU4M@e(^x?M0B?Y z3GKg@6n8mg>3|cN>JeX_Kt;A*$7mgr7#)#FUxkHv9^9n)U4OVVUBADX=`z)5HRCzD zJU#o~08!t*<;YhxguG1gG0jW!Ppwju`6xapGLYBcSZk%IRO<31!EecANxLhF$=_M&tfgFg8h5)1YVi)HSt!qY6KPhJ9txhyKgmYt)6V z(XF?RD%u8e8q=DV6(YgxPXV8Cs;Pv691jI79r?tP8j|A;qEdb%ipN9EUX%|3*?pJv zuyyU{bd+j2&r$DS$YhXys-dkv-oXIRBvp%wBBwt6J(2|zB*@S1;~0ECxy@mllhW6= z)0$a^k5(D6b$n^#B9o>K4bnMabznD-8PGevJWT~CE@t=jt&WTTXm z&O!%SEgz#l0WSmMs##`xPApty^-n)t9*%GDAEy%JB0_{RE>U+0j#K!&Fb>Z9Sz%%e zR{d=YT+(Bvvl%#J%NJZ`9O~GvfkowTnV^K!PM*Bap~wc`Bsnjc{tjVnC@~t(_<Qb@W z0lb*`hhMxSuO$87)njtRF)bv4-@*Hno)Xhr0=MUZ&qR{IT^o2px&NBr9jA}^Jf>NcVOpz*re!lJLL~NUpIE1zS({wT`Q4l&vJDzY`-F{vF!;6|l+_dxj`rh+S zHP~tic%F@o^R9;$eI?OIY94eynv0ys6m;E=xuRzLr$Gh4PhL?L+n;bdTiKldJGS6b zu_K;d` z#`!;Wb(U=4;b)TjC(YqLj{h%Efd7Mv|1aL(|6fiEK~qT7I3`~Z7Ebo<`+R_d{kba_ zE2X9|qBXW0!a(mup4Rq?so&Ts3@%AjB6WvySx|1~`<$W1>_KS}b-mZMJ1 zGklZfo@Hx^3K7|}c583bEnjsxV$_6%={hPU( zpWK!6?BFXb8)OpWXc;T59`-eVE78C;&TJXV#aQP3-F%xN^~Zb*^ToXP?G5}PCTm)P z|A^LzW1}Iek%hi?gPk`9j#+8x56U6G@wO^BM zhldQrFjmr22CwoL9su*BavYKTKj=Wg%s>`A zN_Rr7Q$USYqy+cyE19e8HM^lFrNJx;sHA2Y|M3FxR=Z9QpMPnj_QNa4=!`a+t(c<~ z^xaU!EVZU8V^;7#KK|++AvVS;=bKf-k)nq}CeOE_Q&t<=mUfKp4fivJcneIV@2Z`E zQx+#nJeiBtgI5f@p8r`$X}Zhgl_&pJMcBZTE;!t>7nWi++kR*;@5f(OPZoamR!t_( zLFMcV8^W+G-aR1dvgj>Uy^tdZ=dQgt_)JO;ZtB6Ovs%4FVp{P=Zevdg##mJuMXw8( z$sgl8%DNNadypbUb7kxFLDU%1;cqQEsz4sLuGQgj^ix|Ix>^ znDzWVa{(6(E+61xYf2@u_NW`lc*?AKthN-H(dor1MZC9*E`lv@$Dfn%_(;gxwk9%_ zTq(C8Q)H{3T^Mk;(f{jmd-cBraC>rrqN%4;@oC%Qs{-o%biF=L>-s zt{ghPyw%*EBI4IU*Qgo_mPQ)LhRZUMSTHjGnALRP)k0PwYP+>Tb<&C!y0Q3Vcha)g zv1h8?xIrHunNzZZd4jL0E!;k}#?;u^5_W0%LijbF{dUE;j$O(OmXoT6Aqt;z%xf9q ztO?L~Dw9F#@X0%2WjPHE6ta(Vw^mQf%S)~NQ5j!5Uea1nTXl|>{JY^hl|#5dQGrzU z&z^0#biMB7rNF0DZg^}$Js|4oz;Z2Sf6Hm=4V6N**1p;#!IJ*4QO;6$ zi9!x><7_Kxd+$SnoWqGY^ZL_tzSaw&3YBUV{Q%qp#T_S6>=)vEk>mnR{u9djXb0b9 zql@EIk<7J2@tl%NUG%mq2S54YXbG($2jO*E0@)Eld~fVc7wfSR9yIC>him$!2G~pj z6Rt@W2*lr&8r7|g?>rQKPAdFQd}qZ`ip0|7WRg=d8DJy+{2M$+Dbr(Kp7+N55l@mu z#Mnl67WY^nSF$pvwj6r3_poDRb_$rJlfQ52j8Z6hnrd2I8THF?I76ks?zoyTt_8L4 zmJAK+l0uTmPxh|NNm!4eeR18j!QW|(TtbZmY$Bq@6d5ewl(n%-9Zra;JKq}h+cT@z zGK4fhB*>NqPtW}^{#{b(6{o}7CHlqW;nvKCJJHtY3g5U(U=zS}I=F6!&jQaPqmrsQ z-AD=YX}+fKy>0OE6_~D%+w8=5DF)nYzVOnDFU=_XWI1Y4??9w&IrF1vx6a6#*|qDD z4ZUyd{42w|^yNkoD8)^}3BAiVB_Xhuq7^LSlUpp$*nhTzk2o)I9m2LX9a~Yqi8fLg zep=_)NI`$1A>r1ra^ma3XHTM~#HmKystPX!RmjVf4;p!fZC&X$xnR>RjXz{s4U2eW z2`{FvL9*m3uvMzVulGqYey*iIhRpDEd0iPZRfHorLPFh(`tTmF0wioA&* z-PD>WavuI+QFt$Cbu8te+emo0hXTloSPF)w(Eq2C&je1;W9gpg?Zyp9`VX>Fs#P=% zqfC#+r`9XU_jlj4zQoT^H{AxRF{EA(&!b7`SHg+NiZ&UN1gS>K6k07iW8ku__Crc)sTK{Vi3a`A zZnERLy9VZ9*~I^Y8j6092FzMn(*UYGh(!_b4BF<){q! zTeTK@O2n!ui9Yn$t)c4h?RUy>ws8yUw$#OEh~7DA3p|sUhfa;_A$)Gr2i(Sy4crw2 zl6QX!aHScFkwcJwe6$F!=sPZ7;tjtm{@??jP8sb^Zh1J3{xXx6-gg#*X_8m7;c1zwwC~EiuZdGx)6192lOIi|wt9&3d3=YXlb;j;i zyi7i<>>-6a9`XToB|D#c;Lv02NB4Ot)jXyZc*u0u^eCSx^ZqG7dWMz`PDavJw^!eb zS+WjO*h7pTLJjDaou_YF^HVF+^@7UE`2|af9L@k*)K2HKL^^B&-{7hndW{Qh}XwxHKy*^?QdHIUC$`~toOEHvJHo+MfMF5QTQ_3qo*4nT z6Fzl)1lHygEPo+-_?AC=$SDx@4TegJpVEDmw_Wi4`_If?WAJgJprLY zcFwy8>Y|#;DKL>W9Lt1wZz-D@EdC+I`wS;cb9QYTHojY*8R#Er>SDO&<)x|}*qj$l zPmld!wV1_1f}}S`6;T$YvZFWvE0YxRrEBw6h6R18|yJmoT4HKl>IPecXXX zQOOKRnFO#1k@(yv>><{<%&q5{;jR>IZ!La>;;n9I-Cww!zq7^n1CRD6Op3YjG~tkw zrEIeuROTupSKf8Q@>Q;n|6MJ7P_v;6WlCOtM>#nleu$YcpDe>Vz%$;g%(33e{<8_u zfXB+MY0GK+QGL?a?}rWyE%Nm)_HZXBJdQZ~?Vs&G&Pui${T!fLKL?mUOBLGCKN>lcmietO+rq;5QNmr{tc&Sm$Qca$yEyd&OTlz5p? zkB$_0oekR^eTaFs9k3l1^{%=j3!N-A*Tliz*PJms#w*tYlZ&RR4=T+t5X9d)c3x;V zCCtk)$c#0x?<{c$C@~Dx?_i-VPSoAcGr)`7<~}|jE4@?d!^no6TTzKTzZ6Z~0rA|2 zf>J*CMub;oo`7yJy0SESl#2X5Rs9w*(;9l70J7K1!8-O5wLBiTFo8S9bDr$?Hj>7jdM+?Zxbg2u06=la#cwA`m5*Mj7|+T0HcoU zUAc$qA>_dzR%U0=c8dkbDqG`gUB&*^3(eti0}U z>a1rty`}utVDu1fI~$h)$I*zt)VlQ9#rdj zG}OCS0uoN9I=uy?54v|6cj|T7UT-rQ>S-=r-Oq3-Ku1?zf`p^KtbAddo1sLsK75jpL3mLb&_xBSxTp8nj|Bj6U1~;BwvY2W?S;0ULrn8eMci0gjKD|_DucFV zQElk>3T%-5fUI~`*rw#haGd|N?i*eMlz9_0=P6WQ)4=XiatwKzmSA)?6iU{=T?v|^ zVt&kIIIVN#2Kh$C*9ZM^(@JmPuwVLVe9Al9Xd75kJ}ttsR%H>5417==^_*Wd_v5;T z_nPi{%lB(Q!F^-%gmGjtDOUL^FRzhrSCJz04iaGh@b_}YQNk)(xoVF|Ge_&d5`KWc zhfmv$mwC0vvn4vvXcyu1NoCUJP%XaRR|+ z@!w)8w(EUOw;H51ad}p>M146W+k8PagQM(Cm+)=>$$$@GVYV-yf^|O~d>6=`f7&^$ z?NV3hRO6%YBW_0oHZ zUtc-~?h4$g$K2GFJOi$E9!nbQROdy2T&IqXfyJvrEuW8{8^z0>wumaqr%LY?pOn+@ ze*r)m%&wPTD`w}qY*UkrY_oy<^>h4y2E~MDB_d}S<0+X@25?Q^DAzsB2#~~GU-&s{ z?R@G<)6>xRc9oFX*ya1ppAyHk$bC^zTh(*+P2GJ1C_QPv;V96r#NOvo{B$q10n|3p z=)Rsbr@OW+#yNs^a=@;CCcvl1?EWM5&pXl9)G-MKosos#Y8Q^RX8$9Iwu@~5(C0bl zHmDbkFTWWbc_Fs{yY~bmz{@wCfJcb9WBdoe$jj!&N+n0h^f2$uH^1>W?^F9=D)2-O zQBAwbUuCJmHBPVOEqkRb*nHoeEP3RaNXg^H_rl;s5FH)QdS0Oot@PTt~ zYvVu!C{L*ozN7~S2CXUo2Q2gYrt>QGN%-)DmP|(a#3L@}DlFgIV|x4U_x?}41-IMe zhg(Q8(+Jb-upeK>i-gFa6s}|uQ0A6>IFS`Mi6Pa5g4xf3(3jtf$scnM*xp_n7-j^% z;-<=?3rXtGi#1E*$hIDN-T_1LnKJ1>Clb{|G717#(T0d1>ORw}_NAA-9fY8p=xUBb)rDXOshlDQ>f zQU=>~{0_r&vfnn(4f%Z^z)XkimhJCp@1 zapa-^XPq_4?R;jIucH@h%C@czlJlI_BdW<`(KOxW1?hprk+_co`@p4yOV=SxOOB1x z?EaK@Z_}^Khte{3t&mcngi3_2i{^5c+j&pgp2Prz>T|vBXft6QpNkLYq)USd@C*Zn zUj-D?FBCQ_D2KEO^J(4A6rTX_WW28Cc!#+a^Cha)<_PJiYD@m+qUUGh-MoPaC}2IZ z={3rQtNm}>R1c7yk`uFQcNR0{GC5cE*!J3>t?t5h=mZOoh@FK}XGmBd#s0WE1Cl(0M5@D(x=(AIT(oiMmQ zOlS1{%yXr`d1sm6x*^jYXWh`_+~8}bV1c@1T(ItmhqX_*S`BbX`F&9l(o7+fEEORw zcv%d|TsjmBhchUb9Uc~`Uu#{F%u)8OD|_jbo6{r!d1<#H=vZOcdZBHg_;rHTcDJ%M zM-FRsa<*7afg!~5oNSutG2n$@(mYSAj!#>IG&x-XZM&x8d*{mE(S|Y0ILfGoZk)}J zD^BIXK`AfQNmmDoG7A$mGIN^`s1&y;$0hbds#d`2aaxx8F*;JhASx@y9m=g%CdX*6HHf)uwS7v#Sh`JRvFEff_~~jw zZLUOwn3)$-VEiOk|FuepFXwiHkm7cDe71BUb!zaMa?>+vDL-jo)A7g#-e+DYd1?8F zIn(xv;>w&KXH>c?K7X)femcYBTN&<*R$Rw#tG*;P;O^J(uMjonT)vnOp2d%NuMfIgB=dC`f4JCM}1)EDx2p@!V($Zk3if+zTMRX7if`eU_IYmBK6Xa%;u`^)b{3Pl!?F2_LCdm_+(%B^9vTCiTxM-fvPK*ty71P_ z_SIYAp|{KnJD~eBY3eQecHsya8F{kzLz6!XNt^)5ILA%@`tqkt!=4>0sp)h!KKtTg z?49g>E||_Y>=&;?q^|exy~B&CF0M$AdG)N`BBGdVj5q<8D==kDqqC5t89&nOxY*c< zF~6lo&UF=6elft241H{Lxq#AvK1`%wRNj_2kZ-#AHZ;cEzBpj#3;y`}(?@a2_7r_D zgfK3HhiT25UZD}#*3!XoYf9^T*^kz;Xy4uGAF!z{R~nK~&tnAzxSytW5iXA8 zZ^N>48DBi-Zp}I#ICMq|5_)w0sy1@}E|kPM*LB`H?DE+_tu#?MH$b5!lw1g+3#W zsv)Nqs9-lyEuqJa_Kak%vcjfmp078gcDtvM=rvQIgxtRTNaCdK=9HLd|B8DV)bY@~ z{{fvow-Z)@%R(7oO8SuE6(-rwZY}Yu6FkG>N|O3(>K*4Oijqo^W{!6JMHAm)O+myK zCZ)v}Ht?em+1H2&O6xVvSj~Z+C*59B0e{QfB!IqDBrbpAX)IRx#oJ89$tif8@L>IJtJ=FLBq@Uo>D2i+ zVQNcEywqHK*FgoomOB^j`ovH5o@0g)&CHMUKXA9dX;vjP+MeTIe;9FhdcG6k`fbM` z@HW$kq0LoIh&E0$EjDh!);3_T z`0nb$_&Fmau~2gj%)!QRM;nd&K!6lRSk!VpyE|9}wEazVoUmNhEu6&y2l&C`Hw6@d&+b9(6fL{_wbC7YQsTxqyjdKM4#7EDQ8184(9T4@BZp4l}#G$Lig82Tgqe!yi@5JmD@qH7BOe~(BUf{Ta zbG|A08v=JVs)2^L9cS)UzJWKox4J7hk(}qkYZL8#n*RUA0^GmZZ%&o)euZke^Hb_3 z;K8EIqRa~#`If5D)qCD`Wiq04y~mc-VGBG(Adh5c7^wANV`f%HxR9vkgLdC~JY<&+ z%ChopsFHi!@ypz1_pyj2vpQPy(G6P(4V-rnapWG#pT0rdWA)CL&Jx&I$sAuE+e0VP zx?1cI-JV$fdX|M4Csx3W;43|DM znsjK;$6T-0%#(Wg@N5dXla`V;)g`v-rJozbaAi7^me**s37%Rt_O#S_`Oa!Piu(V^ zt--a*_bg+5w?7(E{F1iXf62#)>k`sqM{j z80;{dK;=rPF7R5&(SBY0G8j|j$(8~o8E+%-oZ{>TusgF)y5{4L&aFsWNG3FSzFs2i zj<#4Az^gNwz4;yeOL2Kg9-kvtHmCxXz=gwnxul-=Rgc8FFK5y*miJx=CPUd5FJBEz zof{cbK=y2dU=xBumV&xJkL>fgut-&D-d)JPH|)ArZRq4r%2Md!j2CP&TUl3QVE_3V zRrb7l@|?`~Y(2W8Lc2QQ`76PM6m3#=XAdRoSx!l3vMbTLP|uCXB$H9!awCI{&Bz_! zJ{E&8BG$p)$0prJYbI#uq%EQILgK|usns6_TN}ZRw&}yh@HIv3SKrW^G$yop!{mvrf`Hf5It*|Mxa)z_-9L zyF8(uS;C;ec^<=M!|$^?l21|N%hS0J4||Ob@)S3*QcsOAg0)5s74Ho!Lx0ovzT$ym zCprmsf)49qvw>pjON6-3UAJ@&hn!va+oUkZQ)AF8W~-Sp9xyb+r>I||k;!&*0vZ?w zu8I`8GV-OXV4!@Sl%?|D==qbrd}xyOOJd!I_I8y*YK8ky{pX=wpw8<&q6@da@hrR%H{HOI`1GXa7c@{LmW5F=nCW0`+eknrF|sdZ%6u$W#cyP zDY)yrBG2XAmrD2&5A99XG9*;W*Zy~9f|rk8&0OH{zHcU%K-nFv3scqykSt{dTw8a~ zif*TjFU_zMaePw^zU{&_Cg5%KZfozjtQ4KQ+O7Mw<>~3>{bUby*qU&zzOKsVa*T52 z)gj};nCIB-HoXq36=&X6uXzk%on+1c+EF<4%4glzU$ce~5a><<&bdVG3!Tp`*BA~T z7=(p|t;+>;08$wSr9YFza0PwK((pV29!T%4PTD)p?Q8>FzL+7kcwa~3i#E@fS+w&w za@0MoT>sE@fD%y3@qn9Nk6UQ&*=>P0WTS5pom62HMCL7mV7C#ZqZ5V1ru$oAcZlVl zIf^?Ondw9=!I#h=0$<6c{VcwC0~-R(Zbc{X=q+ zP})pQ17pG*R&Ues*om! zg&rWNURLa8((u3@r9>=YPbON|jNRDv%kY)}yTGjg8ii<+o~T_3p-0R($rs7#Eu48- zz_Zke?d;whUn7cBpr(jHfM~*5d-nP=0@gENzZoF-gdhAY|8xNeCs3^oyPsxXxy{S; z4ImqeNXT}h+)H@6Lj5CaKA6cq_PkB*;46@cvpu=}Dt^~W=>Ft%uH8-4jHbWZt0S{5 z+n@(~jnd)Jcb}^`4tDC=j~F<7zP~!KD0ohLIQxPWI;*yFSfp!$l1;JpfaL5MyA7zB ztoHwNe%IHV&R1>olC`OCPkEb5|CkJi$Ry|wROw0}SwgS`_ z5!xUG)XA=nrhaIYIufS61Z&PFGi_&Y#Q-Qvbe`YU<)82W@_ZCHT*sw>&rRXde77sp zN28{+P{y4#Km^$pwXA2{esUy=*SHUvXSj#3j)&J+BgUt>X5$-{t|$W5n@NuD89D@K&P;NQTj9M6|sfgi)Zq8F%mAAgw%T)uwfG}otk@{Z#y z+O7FTa!LHmHaXC3i@wrRoXxuTcKKB3_5>9M#!StgR+-}WOm55CYH>EY@`AVp2?? zEnpYKO%YzUJSb;|-7spRj}(}bgRb;-NPx#NR^6JjssS_kB5bu z!tu_s#)^xb$FwyVq;#}7C!StrwnmCp6YZl=~RcStJYa;0oe8muz!pY9?Lqaz82iV>fB zgKN8-jOO^H6ud&4Y=XL%gl-|mPfyCIqM00-Z_nRUQ|xvoW1(OBwLZPgy0=9%66)l= zn;k7g^{>6|a?vDyvmQv=jo8Ho9`{9Tc|3I4J2?|q_4^3+%Q+V{nhazAnN~~I1wg+t z*Abl|yD;g-o0kZj;+&NgbPGvZ;WJuvj?l{z`UHVLM}f|iw$Ck|f{q6R2fmIUIWakS zlEDc8^!SI4?_C3W>HEsOXXLi`DD92=rut#cPQVO4=e+T;qaUS??~qRdFKuTI3Z`dW zHpxs~uB$6{09~cK!(Gok_RZ(=`EVN&nPWD?Bly`uYR&G+cl!jKrU*Q+>#w7wt^V;x zBkxyJpgUpC@go`lOFA>eEJk5fziw38ND1A~ z&;O!Eo5fv2LSlzu#!T!!9Eq4dM zHRNFmyp1&5%APp@FRq-ZkAdrZX@mEfo%_p))W+xb!6XNIJGJK~cYJ^D^VN%E z2Uos>`4}Au{D_Ev5G!982W=d(ej40%F2w}oyVll7+{@w#^8XXK^H8Hi$F z{K_ii9HH1+a}FZ2w&6pl_gTr;`iKSac3lDN?uXfktT%)|SGdf4a;)rN`Kc!b-voM} z%Ep`?fTT=WV3YV9H7LC=aq_)kuIb;;0{S}cX#*3-66Pp zh4u_s?Mo>o@ZO_&He$(t9(6NgcABF%UliL3xwNz*8~Vc z#Hn@pQa2Sr%D;YG?BcLu{J7$i->hOg@ikJCHg+sSeGgGn@~`Cs{@hD(tT91Fl7i9GL^ZZ{+uu$BApJo9xF$gB!SpVwtugK@j z{^W}{BZOwh{smt?&rjalIGECxWo%Khwx#YoPs2O-alTe!o(ZNz#=EYAf=&tIp#K35mt$HmuJ}rI?RG!jTl_sT1_T|@ z;)urFJr1v5aq*Aal8*FsRqCxg4P8MgN{pI4Tbi7~;|O$TQNr z2aSudOwe`v%ab`^=xu8hY00P^2Q6Vd`QV@NJCWb77YrYWtPjoOH?IsReNi9H=aVC2 z5J_aEe_`cq4)Y35E{6n#R2P??e1(%Ow?;s+Fm~M5H3Il9xt0_yg#InEx!K(6?Yi{w zs0Yheg4H+ap($2m~JJ4o&_6N6eY+v+X)Kd4TW{yfh8#}8iv-mZspW=bBftHBbWd1*yO z_D=sdCU;IS2CyxySeAir@t@ECe}a&V|74z2iW(cMAXsaYK++g)7Mm`gBmBNT*FR8e zHq7)bmPuGDo_KJs->tNql#EO(h!}osDYMfFjAs7=6>qnzN$cYJvCER-X>9*a%Rf*x zzr=stu#@6o6 z&z$W5z{`2_tJ5o7NA<#1FE&~N;*wcFUt9NwJ3!4f6wEsy-KvE`<%HY$c>NpkCNZD*SK9>AL3hGe!eY5X+ZEqO3H0fM&DkH;ztXvCB?;= z^y6Xn4VU!$!F<7UVzVusgV7J_Dvm;LEz6MitI@Z;n9caR`227#_wl~8XJfT3ZO<61 zAc?wgHG6xP2T*}nLCi=ip*uFs`UW>pHnY4J6V0b zop%Q!R*+;?HRp}!@6FpLB&X$4s6%5$Gklg(LV~qY^*9rdXBiuPZ zj)O&+$wN?F+<*T0;r{P(?U0-SG8&ropuI8*SedIm1xptgi&We_T(rUZ)4wdHtc?8+ zt2v8-cRKhpfDB{)&+q?-=Ke1pkUv#eC9-rz>fHDC8nN+KPVS%7e_#abX{`|3ggjxC zIaC}W5b4huFC23@WRuH$NafGU7pa6NcT>f2QJW1g;f}<>z9D(&eLblZHuh!`b2?R(aVi?wDIhj8~Vw|?fNbD^=--;;8POWGur)? zuLiDc*{lN|DVCxy9}U7+2TkLCo5%@6tb#a@TCC%(ttN(gK2Lw&m@K$6i0aJTNVU>SA@A3P0rhEKGMF-WBANRPAERIF;4)48B zr17t>+<#Y_6KtVR;a1M%CVdy`a?XP2V?U?5182^~x=7da&*##K4mCcl}OU zndze}G=FQsb^Pes>*4-n))zmX^J*W5YpnY@k+gq`8b0l6BH4GvizZRZs4M4HgJ7gN zBwzqZv*Miy<8|EY{vt^Y2c?#kD;WGzK>ZGr5}mNN*euBw`G*Lj7mCGSqQ~p+eRh2e zA`1i)ZMQIXzdwdn!xTCmh6Uxlo{)(NcMCw>hTD$;>qCbRk_Oe(Kjm7m3ETyBko7nuwY1o|mm{Mvk>8rnh&bbaJ{-y026 z_dclEsq!&=S%C8I9!^4=vt%E1MQ!E%00t-eY>p^Ulx;k9O1vIxA%fOMmk3UIr-2=3 z4u|Vv@1zj)n&s5w4()iCAL~OwOP7}Nh7=eM$d-TYo7vb*(S^GeF#b_<|DG(7i?-HY zFY|`|O%izVnOWXZkEJ@Jl*rB?3fMgOTTCKsl+*9J$5``-D&Ky%#jC6;LYV~Le(oWu zyW?n{ixinIpB{i!{r2Q{=EY9AUtO?a5;PHTRVmCA7%Ij7OoNLR{dgRz)^`>+zctt{tT_1J37+;Y; z;dg%B|Il`>&V}|x;Bf*ndirPHEV9^c8eQ2{6qlXJm7N4_TMtMEQkudLoEU9q2zN(R zRs^osLAiX~Zb71k%Lha?P66kU{r~4| z=HpKtpRRuVy>Mo{yza=zi@!D73s`jdHGs0Gi0#K;3x5B@)tz7*^a`)G+~bO}-NWb5IY{&D5(0PowO5UD{K5%>^%lcCgk1hOW{c)T(jY00}j znv4Ge8yJ@GSoL?(S8G;VZRpVV;pz!4%lkYB3Z>%(NoLRC^6S+kAkF7B*vX)8J5R3ecbGjx2`;cbt-NJ{%73I6}I~ zQyx{5vJmp9eXz06D17xVMHaU81=qb~JsHC~35nvpUTTjLlvlpK$6qFVT)b=(_1Lqb z-hS^pn^Wp=GMnyXt_{KgS5#aBfkN0Ag3L0~uK0=D`=PYGt`-_=USSN!*W^=+xk>ll zW2w^y8-4hO_a|Kk$U73SCJ>q5!p@tRS8|s^BRnC%8~A$Lajym3;cy}c{CK6gTMq^z zF{pJv{`@&12!?twnwI@|d7FH7TaAf+H~fdD6RJ)a9^Xd}|HErh{J(lF1ksZP1z%>p zDt5BBmb@w;r@;E!FUf!ANOo8x73}g6NC3J)T;mPfA2LG*JcY%+Lvr7Vr~IP|hy!Kf z1&AH4rn6{1PUH|g?Tc%#wbM5DR+_;2yQ>XLq z;Ogm^d2dinu~T(NGj1L{Oa*~*%`*c#@92`fCu^t`Em2*lNF@Xi``(V zdMiT`K$~wTL~?EZG&rvvCWiA-8WJZ=Nu41&1`>j>G3^!$U#FUG1AsKIahAUhiF8(k zl^c=yCx;Lr;Afg8oDpbDAC8u3pY7zncfEc--v5xVh{xlGq|k)n2iLuHrDAQsP}UQb zMU}KkRAU6Vr$K`iq9gB6z3Djztfy^)zkG~uOs$Y*^_}t{H?HW0&SF?Q>$51j?$8PF ziPc;mdQ=Z35wnt7dvsw(3O#x1yTx+LXQ-xR6|)`|3_?clJok(>nkE7eY^;UDx*Zt+ zVi@OpWk6EAECCBLp=9V3HzC3Yr%ckAj6p}z2xl~|ZSVm*+gesY)%#C(f;VYt!m0Q9 z{pG%V)+W2)75YfjYI7+IY@M)_mMe0y1AlCVHb_+cWXEw+14UL&D&f9AuseLVk31k6 z#%QQwjI}W&d3e`Iw{r?VKPH$3LIPBk|M(N?@rIOG|WQ2c}QiOme-YKfmW28(_tXJ}`8=+stsB4XPIKnf2(>>}KdTc1&oE`L5 zgT=9c$5bX)Fp$X7VXs7!1fqC#D$?X)DxDX#&M6r+?v-J2#j>8RBM`?GRjr@Cf{oE+ zg<{n@kKIp6!GtPO&%^n%aClrarNe_0KyPe9`-6&KHfNhX=J@u2jeQ;o7wn!$O6`oO zjurY8Dpha1i3^*hf3}q<>T}_bg161i61*JdipO8Gcg{35ZfxMe${7y7HC-xz$=&({ z-MDe1bh_#1Gz6FEoF30*(a`WaBXHUZdob3r#+t+$HDDyxl>w0L9ZE}|$`S@VMQD0> zX)8@7BA6Q;`+&v44p)q#^nY-AZsdax z1K}k>v&z|tn26V>ccv>iD_)d2*J$3qH)LPw!X;eE;44N*DVx#T6MzV(P>Dr8jdMdp z4GX1ae*zmCrfT>fYS<>D2U@SIK(U`fOaP?_2n*1S;2)&0jtKj0o;SBWtqJ}LbU6JKcF}8-HB6kH7 zchK24)_3~Z>Fn?{XfMN|?%F{GI>9*}jldL23-7XGYIj2wCtd!Nc#eQYRyDdEQOZP} z^Q8HiqTblzRSE-vrRn3d_##%D6KBuwf=_k+&eQz=BNqTdZG<5)EzTrh)ukyjm{oTC zh})VCQethzgk+*`fLA>IcWIk9pnNR4 zqLMqvTeN$FDnN2zPHY=G;kZV2KiAz-V zE=^&b5-Eq;sY${1<}o^Li6E64;TNnr{XH4ooNv0j>LY$BG3X&hiG->yNJZ2XNnI!Y zWOQ}__r+r>5~`s=bZb0CyIuXE%*TX;I{2jm%7RJ-D(kXn1zMeACSSb5HPDD9_Gsld zHj(aWz0Wj_Il33+uYMp&i7(o3q_n5>kw3t}S*8xX4LC)m>jf%-Y=J|wDzQK{qPmgigGa=zca1KLlL_13! zAWezanxk*ia7jkKX6$2%aBNFr)<&OJ0gxKre>@W6Ik(!$`mQdO*g};O!x_)go6@fr zM!i;(j*1ZCZFP@c1ahmaB1%okQ}B_XfVWkZHo{Wq?%>udl5RNoZuuKrbRTn8Ys%7U zkcuk}g79zU{3Gii1G)Vq`GngFjT3v0mG&LFsaUnyMBf$~0hDn~@fC|2dZLWc+gEbM z%IfH~y}DW^d;Wu!_=Khd_=D$U6{lq@>vo33W-nHH*04KHRJNjL1;Yv6&!nsjvBcs% zEie=kaGtY6IaiSsOc&S{q%)Rbf8$Ohsr~Yc<_8BtG1(R;_J+f;5<|a+d>-}X(^<#mNVb*+$|a1(}TZZpjCcbB5fymq?p(p>SH`3X$;*` z3=Zz=4-|E_;JeJUOzb$oGc@E(>*+)Oj_I+uBER0ol5sa+<#0!!(6@>?yHr%;aGZXi z9G)arG(*9FlrJzm6zkk=k?M}hPxq@ez`l?3o^`R(KRg-4(q))82(JFDgJ^M4_FeS= zxnIDB>DX3H+9+#1>?hK4b5epC3p;B@GFI)n_8p#)tB*XPzzh6hrGkYhXvGmZ>k%nh z(wo)PQ1zCp%Eq_xwmeanipekB-In;f`0=RF7H@xTUN!7cVjW*b@`_sO6b=I zwSLdFP!Axb<6*OB)F2QHMntcuu*Uf6cG13sOR|&Stt<7x#bgatYGNo4NrhQ}(>8V; zp-^op*#F2cBhWw5IieEpnWpnhe<~tKM`y>kwWP1AF=3BA$aRLk>In@{M>6w^T2WcO zY2%H_NOJhKm2r8Cr&!=F3{wcJEGe3h!I}@NtO3Gv&o2Up5s;`z$V{nR&AC7p@Y=df?z4u8(>sHZ)w9ok`&oqx>4^j|So8eMiX78sKx~H-} z(Ih2`YujAoqO4;yv0_E?38eIpNL;IJ7s$f)WfT0V7!@I}Z87mXFNZVJR`3CWzJ3Pl zx%m?Ow8T8I%PRg}#unNW9AupkNKv;@@IT@lx-!4F1+|;@@#xllRJ1M5+;n~7WguvJ9f}xtQ&rd9T&ynNtlxb-Vy>~(e`U>JzEMmv81^8ZPp?;InA0McB zYby^8hi1jLXWJD=0GD}nUpxKR27->3CP^sj6a#hM9*#2BSTDAm5b^2D_Oo-27hS|JNtQ4e0vxps0rcV9s2FpbmaIovU{AV zYTCIYr$K)_8ZHkZGALZ%^Q4)0acA8ICZ>P6uHLJ>1bf2&Q@Vj0U+bbJhclw>=*ScK zwe^=TLYd3Ftm1CULiWIMw?`qXL5-n<`>bV^^FMj+Uki1@3NutZ3OteUj3%$9?Q78cXlQ8aQ4+_ zqNX}^FCOPKi0EGU)Z)a0)CGKkmUC6AZUSFIVcO$aDZ(D`zFMs}?3eGoqWLm0UpyIq zsOy*%Uw9jMXtP~XdhSxB7M6KsrPdYAmzMFnGLGJ;97j@S>BGm?S3q}6Ke ztIbqKhkwPn=CxECj~|kn#j8KLwY#xlx8vgB!{5Jgu=J7=DEB3;Rk&8zWcvFD0KVAk%814|49fQ8l& zvN$QTwf^%Yj~+)pzZ2G4C|g;sX6b3#fLE~*yAJD)!c2Df7EX(Zd?MSNl=;l3Czi(} zXjDH*x9XTz&s$ngz%o6rnx}hJYs{s0WJxqBR&I(5s6$zZV6C7!iF)2H^KfB<;nu*Z zY4rJGX5g4;NYopp!DzX9vxK&EQi|ZvytZFJYegrgH4u2p(#~!~$;qGIaP%-PtoC>r zazJU9K~RIN|Ltbh_!)BW6vJ!Iz}ItHlgMUaDGMxuFPmc_7*`Q3&ilZk>kA~C)GoitHIEfVe#d8YHc5vi<0tG zmk6Ao>63~Z-UjE0y}p&zYJznBV}cz12p`X|QdFw`g+W}ap{29Fi@>C`v6D08%08ph zE_>saHd6ge#yeMyUA}w4(XeszKSt%Srx$DrRLt^B&>^YdY-bfurqYKFzkrhu;5thG zy$<QqMuAl}$1_kH{@gC7=(>)FUi_{_#hjE2Rx0q>Qn; zj;$WIA72toBaY^mdo)fB6ls%`)NmBc6GgI7a>zZu1U&hD`H3t;@CYvcZrBlU!fu0t z?~=8=oAJXX!&I6nBjU?q4+tDwJe*7F7r?M)a<*I9p_|E4GCE~mP99Th@R|0L#21q@ zGI~_9Kbccku;E+5jx*Rznz(_`dcX((5xPuz=@XKufwi}*wiD)+!+Qb~rm1rF6BMl; z%Iv($;!}n7SL!r3Jffzlm2Awv4#n$%RPC`9>*V6%$o=Fr!JiSl=r36mdS+(z6O)>i z9eQF_&^WLT>iQi5RmO)i9P8#Bp!%)el{q1+LhL5j;!Q*_i0qo*#0=$urp?eSFFTiJ zHt#%Vzh0voQ8STP8XMfz?iHI-Th@gQe~-J{cUSY@uxq#a<8Z>>-Cph{5I?OPB=kG!@z%ZsaP4KGA~ zYW!mNK-;%N9f`)Rp+goX+##K{dH)T*3j%|M{jM3T1ISOAamsUrcn~2!kRmqLbcrJm zSBDqBh18T7_lOIVAaa7=2WLL1sjcTfXhuOI@3R!vL(D3M;LteR%|9`Tf#-CW%Xnc= ztEVxy%xYaD7VQOT0T$VoHhbgj2eZdR2~jb4=;Anp!+}oj$IfmRB+MmM_D^J5(UmoI z=S-XrwfW}nP6j5BFO?=p_C(1<{4(BNym$uLx9itkcA9E4(|{DEzjRJdc`6sQLeMPy zLIuB|!eJCFj=xb`pK8^tKz4~X*BI}30fLUNYv(JbzWO^u9|Yy&5%?R7Pg?b72=S-m z%%N)=?o*NVo|pg9W-- z8Gpu}IX-Y5lu_Uahy+c*%0u_3x4L1Y89Z+zQLzzjG9s8wjI#d~P1513PHmVM-*n;J z(&)bXJ1MC$BR@Lz)x;SE);|Vb_!bt`b3z=LAtAa-5;@MvlJSCp?J7J67o2}|r`jbN zVlDeZP7fd^EzNo0UHeKF9OeBqqknQm&hRXX9m@vY`)Uh7!Xq#u6{?2>1ZNO)=jly~ zNF%|s>Qu-nQfw?l1gfy>aEziFk%!|w9a9KoiwWDZc*^5X#%AbL&=X1meAkFLQd(6A zMzouf-P5m-@f6nkJ`4PMyI~#^VnIX0=pVLbuCa>7c^A#kV6*1Y;jO+^0nOKsUFsUF zU4lErTd?O-gbYNuvd9~*^U$TXI15duOq+mLre(B3uR96`Y-G=v#IW#Yb=PFqDnOEA zv#F*fHQvF8H?{XMIm9bbIA1pw*y|4l-){@kWzv3h5J7B}JPoX|k4Wpv(iwgV9ln~L zXRo$$n;(*E<6_c|U|-IaFfGFwy*ATT5Vr1iAi9sOcWiK7+a{X#RZUx*Ui?b-E&HsB z1^4s;*Iv(K`3y$hC{Lm98ywJ8#9r<=(%|@g<>Aw8Ykw`J4n?saK>8QhTx%d*w4QC3{ABZyr!} zYT44Nku$qNDHJuv`S4rLsEKUFyx-%}Ik58P)3jSALszKNb>z}m3X`PBd_tvMr<#x{ zs8?!qUtDcRoa7g_xRr3&AWog2WDO}v+f(`awd@CtSTo611EL_yqcXPH>h2&&)Fpmd4f>%;gW&g~PgLuuriL zR!DNTKog?@X^&7b-#}=rJ}t>~Vt=3a@J3%dglcc%DMA=luzo{pUFZnd<&b=>Xo1&n zp=6Pc7l&PxRAbH~1HY$79N`hx{%ttSRW)-m%HD*6;WaW#iU$FUmq8(a!R;4GP!yr2 z9lXVH-w%)KuTlDneB+(Mo257#$Fi?1Zs%sUUA>hmhtI9FUBire0}h=@kuBP)Z3rokt*&?kx_6CawM3fbqf6We6cXU)^C_UBKywSpTMO z{gsmWkLWir@J9H7BLM z!AL>M*6Xz0h}pDRFStKtR7_Rdzkk>>Ur!JD9kztCZOZuNy=|!H5ihh6F>9ZmZw^08 z8JV6+97|~_cb~&@>g8HmTdWjT4TYU9b}bq3fdEIx;4)cK?kMmwmud^gFH@cs*1i*j zjAIl#JH^tIo;AX*ypeh~?OkQ#F2Wu~_x@eML#Oomd2$9p4rqK4?jJ&Mf%#9>Uz*Rc zXVHhIFXy2?`Y<6-5^K*iGO>mF`+g=>8n$u}!OixL&8I|4; zSGcQ|k!cC?4-a|Mq#5($gELV< z3no(FuTh4~CAd5X-Fp>ZUL$8xqwQ>fhH7{K_d>B$qr)(wM`_aw!b$T+4>et?#89A| zK`i1@rC)Ws{@GN7=DtRrl5h4U>(WDd?fzx2r3d=8ibdwPgSwvY$IoR<<8R9ui!VO13}r2zJECj|E#tWY+oNWvwCS@QeB`yuUB-A-BL$~ zHEF&jZyQoMb5hJ2_PU&WIkPRcMnf*$%0s1#G1{GXa6bL@b2NVF>E9|2lzMXZ=!!mB zeGnR&t8g^cMj#yQzBgXQI8)IO%MJlwO2jS|`?A~6(3*XPQQjm_l{)xWaX4Y=Fl|XuRYBo#uiqyhSRR;c-u^?sHZ&3-I`quFqH^*n z&qO|t8*KDgaNBdl_Gs>NXk7lUp#XhAa;ikoT%^4@Y*A=yjD4rls(rj)MSvUP8&$7V zt2wSVE_5VFaG zBBuWSZeg`wE27EzpMe5W;HQ?c<>bV{_CiHmFGR%ML#J{j{uf(yXg#(1T23BX#jyc$ zXB4#J=ONL$RC5&^ha#S8q_oj*%k!-aQ7A?wo7;VDL}YVi#!F12NaizI}obi6i9%FJ%%Q@vJQk0t-9NN7E+ zA!o^MqFBaKdwxZy*3(O>lcvsrF*4x_EUpK>o`89VgYe74NkW1MeQdG=MpB`%%a~Zl zOVH&Jk5#o&(^4w*)sZoh+h5CCpiovaZwTMnoWjDIPFia8)h51C8M2w(W zg^MsTN3)WPH7>WNok=m#MCG%;-Z_b@<;4_8g)xjD0eIw_u>Ih5bA01ZXZV5Xm`V1_ z3C9SJ3JR=cG&linm)Cni3lA+>1MjI*5kFp0nzl5C_)poF^=H9u=9w5LEaL$IF@3Ak zT8bP{wy`Fa;?Nc-xFO_FA;}gU&M=oDI@^!-!p1$~b zM!h!YF7{GQ`Ax7(l>4?C5iBi@_f^8K!YF&nzJ71XA>SF+0%PKJ9?&j<*C)J`(cAD zHuA15JUZR~U$?&^ljDC99DqJ+9~t3F&rSdKygHnIF-A%MF>%@n+my}l0L%FGeyX&f zIz4JQRo}zIO9%8diyiSQr#|LRxcDdERQ$%u8clOJ+Hrk+a8#0eQ*FRDqd4e4bK)

    2UVRo|@p*6=XGp%eUi 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 A3;+NC literal 0 HcmV?d00001 diff --git a/website/dist/docs/website_address.png b/website/dist/docs/website_address.png new file mode 100644 index 0000000000000000000000000000000000000000..d994e9f5a669a89ed037263b58b10afc155992bb GIT binary patch literal 44610 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 ODE+N2U-Ha6_ Date: Tue, 7 Jul 2020 18:22:10 +0200 Subject: [PATCH 059/313] Fixing image tileset key If 2 maps share the same tileset name (even if they use 2 different URLs for the tileset), the tileset image will be reused wrongly. This commit fixes the tileset key to make it equal to the image URL. --- front/src/Phaser/Game/GameScene.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/front/src/Phaser/Game/GameScene.ts b/front/src/Phaser/Game/GameScene.ts index cbf5ec26..bb255a6b 100644 --- a/front/src/Phaser/Game/GameScene.ts +++ b/front/src/Phaser/Game/GameScene.ts @@ -229,7 +229,7 @@ export class GameScene extends Phaser.Scene { return; } //TODO strategy to add access token - this.load.image(tileset.name, `${url}/${tileset.image}`); + this.load.image(`${url}/${tileset.image}`, `${url}/${tileset.image}`); }) } @@ -246,8 +246,9 @@ export class GameScene extends Phaser.Scene { create(): void { //initalise map this.Map = this.add.tilemap(this.MapKey); + const mapDirUrl = this.MapUrlFile.substr(0, this.MapUrlFile.lastIndexOf('/')); this.mapFile.tilesets.forEach((tileset: ITiledTileSet) => { - this.Terrains.push(this.Map.addTilesetImage(tileset.name, tileset.name, tileset.tilewidth, tileset.tileheight, tileset.margin, tileset.spacing/*, tileset.firstgid*/)); + this.Terrains.push(this.Map.addTilesetImage(tileset.name, `${mapDirUrl}/${tileset.image}`, tileset.tilewidth, tileset.tileheight, tileset.margin, tileset.spacing/*, tileset.firstgid*/)); }); //permit to set bound collision From 68794180988c1f022eb1134047e57d269484cee4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20N=C3=A9grier?= Date: Tue, 7 Jul 2020 22:52:22 +0200 Subject: [PATCH 060/313] Adding a 404 page when resources loading fails --- front/src/Phaser/Game/GameScene.ts | 7 ++ .../src/Phaser/Reconnecting/FourOFourScene.ts | 66 +++++++++++++++++++ front/src/index.ts | 3 +- 3 files changed, 75 insertions(+), 1 deletion(-) create mode 100644 front/src/Phaser/Reconnecting/FourOFourScene.ts diff --git a/front/src/Phaser/Game/GameScene.ts b/front/src/Phaser/Game/GameScene.ts index bb255a6b..a46672ee 100644 --- a/front/src/Phaser/Game/GameScene.ts +++ b/front/src/Phaser/Game/GameScene.ts @@ -26,6 +26,8 @@ import GameObject = Phaser.GameObjects.GameObject; import { Queue } from 'queue-typescript'; import {SimplePeer} from "../../WebRtc/SimplePeer"; import {ReconnectingSceneName} from "../Reconnecting/ReconnectingScene"; +import FILE_LOAD_ERROR = Phaser.Loader.Events.FILE_LOAD_ERROR; +import {FourOFourSceneName} from "../Reconnecting/FourOFourScene"; export enum Textures { @@ -130,6 +132,11 @@ export class GameScene extends Phaser.Scene { //hook preload scene preload(): void { + this.load.on(FILE_LOAD_ERROR, (file: {src: string}) => { + this.scene.start(FourOFourSceneName, { + file: file.src + }); + }); this.load.on('filecomplete-tilemapJSON-'+this.MapKey, (key: string, type: string, data: unknown) => { this.onMapLoad(data); }); diff --git a/front/src/Phaser/Reconnecting/FourOFourScene.ts b/front/src/Phaser/Reconnecting/FourOFourScene.ts new file mode 100644 index 00000000..4fe4ff24 --- /dev/null +++ b/front/src/Phaser/Reconnecting/FourOFourScene.ts @@ -0,0 +1,66 @@ +import {TextField} from "../Components/TextField"; +import Image = Phaser.GameObjects.Image; +import Sprite = Phaser.GameObjects.Sprite; +import {SelectCharacterSceneInitDataInterface} from "../Login/SelectCharacterScene"; +import Text = Phaser.GameObjects.Text; + +export const FourOFourSceneName = "FourOFourScene"; +enum Textures { + icon = "icon", + mainFont = "main_font" +} + +export class FourOFourScene extends Phaser.Scene { + private mapNotFoundField: TextField; + private couldNotFindField: TextField; + private fileNameField: Text; + private logo: Image; + private cat: Sprite; + private file: string; + + constructor() { + super({ + key: FourOFourSceneName + }); + } + + init({ file }: { file: string }) { + this.file = file; + } + + preload() { + this.load.image(Textures.icon, "resources/logos/tcm_full.png"); + // Note: arcade.png from the Phaser 3 examples at: https://github.com/photonstorm/phaser3-examples/tree/master/public/assets/fonts/bitmap + this.load.bitmapFont(Textures.mainFont, 'resources/fonts/arcade.png', 'resources/fonts/arcade.xml'); + this.load.spritesheet( + 'cat', + 'resources/characters/pipoya/Cat 01-1.png', + {frameWidth: 32, frameHeight: 32} + ); + } + + create() { + this.logo = new Image(this, this.game.renderer.width - 30, this.game.renderer.height - 20, Textures.icon); + this.add.existing(this.logo); + + this.mapNotFoundField = new TextField(this, this.game.renderer.width / 2, this.game.renderer.height / 2, "404 - File not found"); + this.mapNotFoundField.setOrigin(0.5, 0.5).setCenterAlign(); + + this.couldNotFindField = new TextField(this, this.game.renderer.width / 2, this.game.renderer.height / 2 + 24, "Could not load file"); + this.couldNotFindField.setOrigin(0.5, 0.5).setCenterAlign(); + + this.fileNameField = this.add.text(this.game.renderer.width / 2, this.game.renderer.height / 2 + 38, this.file, { fontFamily: 'Georgia, "Goudy Bookletter 1911", Times, serif', fontSize: '10px' }); + this.fileNameField.setOrigin(0.5, 0.5); + + this.cat = this.physics.add.sprite(this.game.renderer.width / 2, this.game.renderer.height / 2 - 32, 'cat', 6); + this.cat.flipY=true; + /*this.anims.create({ + key: 'right', + frames: this.anims.generateFrameNumbers('cat', { start: 6, end: 8 }), + frameRate: 10, + repeat: -1 + }); + cat.play('right');*/ + + } +} diff --git a/front/src/index.ts b/front/src/index.ts index 15c2e0e8..eb63b6d0 100644 --- a/front/src/index.ts +++ b/front/src/index.ts @@ -7,13 +7,14 @@ import {ReconnectingScene} from "./Phaser/Reconnecting/ReconnectingScene"; import {gameManager} from "./Phaser/Game/GameManager"; import {SelectCharacterScene} from "./Phaser/Login/SelectCharacterScene"; import {EnableCameraScene} from "./Phaser/Login/EnableCameraScene"; +import {FourOFourScene} from "./Phaser/Reconnecting/FourOFourScene"; const config: GameConfig = { title: "Office game", width: window.innerWidth / RESOLUTION, height: window.innerHeight / RESOLUTION, parent: "game", - scene: [LoginScene, SelectCharacterScene, EnableCameraScene, ReconnectingScene], + scene: [LoginScene, SelectCharacterScene, EnableCameraScene, ReconnectingScene, FourOFourScene], zoom: RESOLUTION, physics: { default: "arcade", From f7466994c571e721578787d71a7dfc243af6838d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20N=C3=A9grier?= Date: Wed, 15 Jul 2020 23:44:01 +0200 Subject: [PATCH 061/313] Playing with pipeline to display outline --- front/src/Phaser/Items/ActionableItem.ts | 0 front/src/Phaser/Items/ActionableSprite.ts | 0 front/src/Phaser/Player/Player.ts | 5 ++ front/src/Phaser/Shaders/OutlinePipeline.ts | 61 ++++++++++++++++++++ front/src/index.ts | 9 +++ maps/objects/computer.ts | 0 maps/package.json | 63 +++++++++++++++++++++ maps/tsconfig.json | 24 ++++++++ 8 files changed, 162 insertions(+) create mode 100644 front/src/Phaser/Items/ActionableItem.ts create mode 100644 front/src/Phaser/Items/ActionableSprite.ts create mode 100644 front/src/Phaser/Shaders/OutlinePipeline.ts create mode 100644 maps/objects/computer.ts create mode 100644 maps/package.json create mode 100644 maps/tsconfig.json diff --git a/front/src/Phaser/Items/ActionableItem.ts b/front/src/Phaser/Items/ActionableItem.ts new file mode 100644 index 00000000..e69de29b diff --git a/front/src/Phaser/Items/ActionableSprite.ts b/front/src/Phaser/Items/ActionableSprite.ts new file mode 100644 index 00000000..e69de29b diff --git a/front/src/Phaser/Player/Player.ts b/front/src/Phaser/Player/Player.ts index f912d110..1a3a3a03 100644 --- a/front/src/Phaser/Player/Player.ts +++ b/front/src/Phaser/Player/Player.ts @@ -3,6 +3,7 @@ import {GameScene, Textures} from "../Game/GameScene"; import {MessageUserPositionInterface, PointInterface} from "../../Connection"; import {ActiveEventList, UserInputEvent, UserInputManager} from "../UserInput/UserInputManager"; import {Character} from "../Entity/Character"; +import {OutlinePipeline} from "../Shaders/OutlinePipeline"; export const hasMovedEventName = "hasMoved"; @@ -32,6 +33,10 @@ export class Player extends Character implements CurrentGamerInterface { //the current player model should be push away by other players to prevent conflict this.setImmovable(false); + + this.setPipeline(OutlinePipeline.KEY); + this.pipeline.setFloat2('uTextureSize', + this.texture.getSourceImage().width, this.texture.getSourceImage().height); } moveUser(delta: number): void { diff --git a/front/src/Phaser/Shaders/OutlinePipeline.ts b/front/src/Phaser/Shaders/OutlinePipeline.ts new file mode 100644 index 00000000..f65a66d2 --- /dev/null +++ b/front/src/Phaser/Shaders/OutlinePipeline.ts @@ -0,0 +1,61 @@ +export class OutlinePipeline extends Phaser.Renderer.WebGL.Pipelines.TextureTintPipeline +{ + + // the unique id of this pipeline + public static readonly KEY = 'Outline'; + + /** + * @param {Phaser.Game} game - the controller of the game instance + */ + constructor(game: Phaser.Game) + { + super({ + game: game, + renderer: game.renderer, + fragShader: ` + precision mediump float; + + uniform sampler2D uMainSampler; + uniform vec2 uTextureSize; + + varying vec2 outTexCoord; + varying float outTintEffect; + varying vec4 outTint; + + void main(void) + { + vec4 texture = texture2D(uMainSampler, outTexCoord); + vec4 texel = vec4(outTint.rgb * outTint.a, outTint.a); + vec4 color = texture; + + if (outTintEffect == 0.0) + { + color = texture * texel; + } + else if (outTintEffect == 1.0) + { + color.rgb = mix(texture.rgb, outTint.rgb * outTint.a, texture.a); + color.a = texture.a * texel.a; + } + else if (outTintEffect == 2.0) + { + color = texel; + } + + vec2 onePixel = vec2(1.0, 1.0) / uTextureSize; + float upAlpha = texture2D(uMainSampler, outTexCoord + vec2(0.0, onePixel.y)).a; + float leftAlpha = texture2D(uMainSampler, outTexCoord + vec2(-onePixel.x, 0.0)).a; + float downAlpha = texture2D(uMainSampler, outTexCoord + vec2(0.0, -onePixel.y)).a; + float rightAlpha = texture2D(uMainSampler, outTexCoord + vec2(onePixel.x, 0.0)).a; + + if (texture.a == 0.0 && max(max(upAlpha, downAlpha), max(leftAlpha, rightAlpha)) == 1.0) + { + color = vec4(1.0, 1.0, 1.0, 1.0); + } + + gl_FragColor = color; + } + ` + }); + } +} diff --git a/front/src/index.ts b/front/src/index.ts index eb63b6d0..b847fa74 100644 --- a/front/src/index.ts +++ b/front/src/index.ts @@ -8,6 +8,8 @@ import {gameManager} from "./Phaser/Game/GameManager"; import {SelectCharacterScene} from "./Phaser/Login/SelectCharacterScene"; import {EnableCameraScene} from "./Phaser/Login/EnableCameraScene"; import {FourOFourScene} from "./Phaser/Reconnecting/FourOFourScene"; +import WebGLRenderer = Phaser.Renderer.WebGL.WebGLRenderer; +import {OutlinePipeline} from "./Phaser/Shaders/OutlinePipeline"; const config: GameConfig = { title: "Office game", @@ -21,6 +23,13 @@ const config: GameConfig = { arcade: { debug: DEBUG_MODE } + }, + callbacks: { + postBoot: game => { + // FIXME: we should fore WebGL in the config. + let renderer = game.renderer as WebGLRenderer; + renderer.addPipeline(OutlinePipeline.KEY, new OutlinePipeline(game)); + } } }; diff --git a/maps/objects/computer.ts b/maps/objects/computer.ts new file mode 100644 index 00000000..e69de29b diff --git a/maps/package.json b/maps/package.json new file mode 100644 index 00000000..a20c876f --- /dev/null +++ b/maps/package.json @@ -0,0 +1,63 @@ +{ + "name": "workadventureback", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "tsc": "tsc", + "dev": "ts-node-dev --respawn --transpileOnly ./server.ts", + "prod": "tsc && node ./dist/server.js", + "profile": "tsc && node --prof ./dist/server.js", + "test": "ts-node node_modules/jasmine/bin/jasmine --config=jasmine.json", + "lint": "node_modules/.bin/eslint src/ . --ext .ts", + "fix": "node_modules/.bin/eslint --fix src/ . --ext .ts" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/thecodingmachine/workadventure.git" + }, + "contributors": [ + { + "name": "Grégoire Parant", + "email": "g.parant@thecodingmachine.com" + }, + { + "name": "David Négrier", + "email": "d.negrier@thecodingmachine.com" + }, + { + "name": "Arthmaël Poly", + "email": "a.poly@thecodingmachine.com" + } + ], + "license": "SEE LICENSE IN LICENSE.txt", + "bugs": { + "url": "https://github.com/thecodingmachine/workadventure/issues" + }, + "homepage": "https://github.com/thecodingmachine/workadventure#readme", + "dependencies": { + "@types/express": "^4.17.4", + "@types/http-status-codes": "^1.2.0", + "@types/jsonwebtoken": "^8.3.8", + "@types/socket.io": "^2.1.4", + "@types/uuidv4": "^5.0.0", + "body-parser": "^1.19.0", + "express": "^4.17.1", + "generic-type-guard": "^3.2.0", + "http-status-codes": "^1.4.0", + "jsonwebtoken": "^8.5.1", + "prom-client": "^12.0.0", + "socket.io": "^2.3.0", + "systeminformation": "^4.26.5", + "ts-node-dev": "^1.0.0-pre.44", + "typescript": "^3.8.3", + "uuidv4": "^6.0.7" + }, + "devDependencies": { + "@types/jasmine": "^3.5.10", + "@typescript-eslint/eslint-plugin": "^2.26.0", + "@typescript-eslint/parser": "^2.26.0", + "eslint": "^6.8.0", + "jasmine": "^3.5.0" + } +} diff --git a/maps/tsconfig.json b/maps/tsconfig.json new file mode 100644 index 00000000..9a140744 --- /dev/null +++ b/maps/tsconfig.json @@ -0,0 +1,24 @@ +{ + "compilerOptions": { + "outDir": "./dist/", + "sourceMap": true, + "moduleResolution": "node", + "module": "ESNext", + "target": "ES2015", + "downlevelIteration": true, + "jsx": "react", + "allowJs": true, + + "strict": false, /* Enable all strict type-checking options. */ + "noImplicitAny": true, /* Raise error on expressions and declarations with an implied 'any' type. */ + "strictNullChecks": true, /* Enable strict null checks. */ + "strictFunctionTypes": true, /* Enable strict checking of function types. */ + "strictBindCallApply": true, /* Enable strict 'bind', 'call', and 'apply' methods on functions. */ + "strictPropertyInitialization": false, /* Enable strict checking of property initialization in classes. */ + "noImplicitThis": true, /* Raise error on 'this' expressions with an implied 'any' type. */ + "alwaysStrict": true, /* Parse in strict mode and emit "use strict" for each source file. */ + + "noImplicitReturns": true, /* Report error when not all code paths in function return a value. */ + "noFallthroughCasesInSwitch": true /* Report errors for fallthrough cases in switch statement. */ + } +} From ed146226cffba914fb0418676b7ef8c95d2ac871 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20N=C3=A9grier?= Date: Thu, 23 Jul 2020 18:09:24 +0200 Subject: [PATCH 062/313] Adding Outline capabilities and a ActionableItem notion. --- back/src/Assets/Maps/Floor0/floor0.json | 16 +- docker-compose.yaml | 22 +++ front/package.json | 3 +- front/src/Phaser/Game/GameScene.ts | 141 +++++++++++++++++- front/src/Phaser/Items/ActionableItem.ts | 60 ++++++++ front/src/Phaser/Items/ActionableSprite.ts | 0 front/src/Phaser/Items/Computer/computer.ts | 24 +++ .../src/Phaser/Items/ItemFactoryInterface.ts | 10 ++ front/src/Phaser/Player/Player.ts | 4 - front/src/Phaser/Shaders/OutlinePipeline.ts | 2 +- .../src/Phaser/UserInput/UserInputManager.ts | 1 + front/tsconfig.json | 5 +- front/webpack.config.js | 3 + front/yarn.lock | 29 +++- maps/.gitignore | 1 + maps/dist/.htaccess | 1 + maps/objects/computer.ts | 56 +++++++ maps/package.json | 24 +-- 18 files changed, 369 insertions(+), 33 deletions(-) delete mode 100644 front/src/Phaser/Items/ActionableSprite.ts create mode 100644 front/src/Phaser/Items/Computer/computer.ts create mode 100644 front/src/Phaser/Items/ItemFactoryInterface.ts create mode 100644 maps/.gitignore create mode 100644 maps/dist/.htaccess diff --git a/back/src/Assets/Maps/Floor0/floor0.json b/back/src/Assets/Maps/Floor0/floor0.json index 987004e6..94a215b3 100644 --- a/back/src/Assets/Maps/Floor0/floor0.json +++ b/back/src/Assets/Maps/Floor0/floor0.json @@ -199,7 +199,19 @@ "draworder":"topdown", "id":3, "name":"floorLayer", - "objects":[], + "objects":[ + { + "height":0, + "id":1, + "name":"computer", + "point":true, + "rotation":0, + "type":"computer", + "visible":true, + "width":0, + "x":431, + "y":142 + }], "opacity":1, "type":"objectgroup", "visible":true, @@ -225,7 +237,7 @@ "y":0 }], "nextlayerid":18, - "nextobjectid":1, + "nextobjectid":2, "orientation":"orthogonal", "renderorder":"right-down", "tiledversion":"1.3.3", diff --git a/docker-compose.yaml b/docker-compose.yaml index 74bbafbf..53208c76 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -38,6 +38,28 @@ services: - "traefik.http.routers.front-ssl.tls=true" - "traefik.http.routers.front-ssl.service=front" + maps: + image: thecodingmachine/nodejs:12-apache + environment: + DEBUG_MODE: "$DEBUG_MODE" + HOST: "0.0.0.0" + NODE_ENV: development + APACHE_DOCUMENT_ROOT: dist/ + #APACHE_EXTENSIONS: headers + #APACHE_EXTENSION_HEADERS: 1 + STARTUP_COMMAND_0: sudo a2enmod headers + STARTUP_COMMAND_1: yarn install + STARTUP_COMMAND_2: yarn run dev & + volumes: + - ./maps:/var/www/html + labels: + - "traefik.http.routers.maps.rule=Host(`maps.workadventure.localhost`)" + - "traefik.http.routers.maps.entryPoints=web,traefik" + - "traefik.http.services.maps.loadbalancer.server.port=80" + - "traefik.http.routers.maps-ssl.rule=Host(`maps.workadventure.localhost`)" + - "traefik.http.routers.maps-ssl.entryPoints=websecure" + - "traefik.http.routers.maps-ssl.tls=true" + - "traefik.http.routers.maps-ssl.service=maps" back: image: thecodingmachine/nodejs:12 diff --git a/front/package.json b/front/package.json index b0c5502b..e5ea5b66 100644 --- a/front/package.json +++ b/front/package.json @@ -25,7 +25,8 @@ "phaser": "^3.22.0", "queue-typescript": "^1.0.1", "simple-peer": "^9.6.2", - "socket.io-client": "^2.3.0" + "socket.io-client": "^2.3.0", + "webpack-require-http": "^0.4.3" }, "scripts": { "start": "webpack-dev-server --open", diff --git a/front/src/Phaser/Game/GameScene.ts b/front/src/Phaser/Game/GameScene.ts index a46672ee..6d311e33 100644 --- a/front/src/Phaser/Game/GameScene.ts +++ b/front/src/Phaser/Game/GameScene.ts @@ -10,7 +10,7 @@ import { DEBUG_MODE, ZOOM_LEVEL, POSITION_DELAY } from "../../Enum/EnvironmentVa import { ITiledMap, ITiledMapLayer, - ITiledMapLayerProperty, + ITiledMapLayerProperty, ITiledMapObject, ITiledTileSet } from "../Map/ITiledMap"; import {PLAYER_RESOURCES, PlayerResourceDescriptionInterface} from "../Entity/Character"; @@ -28,6 +28,8 @@ import {SimplePeer} from "../../WebRtc/SimplePeer"; import {ReconnectingSceneName} from "../Reconnecting/ReconnectingScene"; import FILE_LOAD_ERROR = Phaser.Loader.Events.FILE_LOAD_ERROR; import {FourOFourSceneName} from "../Reconnecting/FourOFourScene"; +import {ItemFactoryInterface} from "../Items/ItemFactoryInterface"; +import {ActionableItem} from "../Items/ActionableItem"; export enum Textures { @@ -89,6 +91,9 @@ export class GameScene extends Phaser.Scene { private connection: Connection; private simplePeer : SimplePeer; private connectionPromise: Promise + // A promise that will resolve when the "create" method is called (signaling loading is ended) + private createPromise: Promise; + private createPromiseResolve: (value?: void | PromiseLike) => void; MapKey: string; MapUrlFile: string; @@ -106,6 +111,9 @@ export class GameScene extends Phaser.Scene { private PositionNextScene: Array> = new Array>(); private startLayerName: string|undefined; + private actionableItems: Array = new Array(); + // The item that can be selected by pressing the space key. + private outlinedItem: ActionableItem|null = null; static createFromUrl(mapUrlFile: string, instance: string, key: string|null = null): GameScene { const mapKey = GameScene.getMapKeyByUrl(mapUrlFile); @@ -128,6 +136,10 @@ export class GameScene extends Phaser.Scene { this.MapKey = MapKey; this.MapUrlFile = MapUrlFile; this.RoomId = this.instance + '__' + MapKey; + + this.createPromise = new Promise((resolve, reject): void => { + this.createPromiseResolve = resolve; + }) } //hook preload scene @@ -225,7 +237,7 @@ export class GameScene extends Phaser.Scene { // FIXME: we need to put a "unknown" instead of a "any" and validate the structure of the JSON we are receiving. // eslint-disable-next-line @typescript-eslint/no-explicit-any - private onMapLoad(data: any): void { + private async onMapLoad(data: any): Promise { // Triggered when the map is loaded // Load tiles attached to the map recursively this.mapFile = data.data; @@ -238,6 +250,85 @@ export class GameScene extends Phaser.Scene { //TODO strategy to add access token this.load.image(`${url}/${tileset.image}`, `${url}/${tileset.image}`); }) + + // Scan the object layers for objects to load and load them. + let objects = new Map(); + + for (let layer of this.mapFile.layers) { + if (layer.type === 'objectgroup') { + for (let object of layer.objects) { + let objectsOfType: ITiledMapObject[]|undefined; + if (!objects.has(object.type)) { + objectsOfType = new Array(); + } else { + objectsOfType = objects.get(object.type); + if (objectsOfType === undefined) { + throw new Error('Unexpected object type not found'); + } + } + objectsOfType.push(object); + objects.set(object.type, objectsOfType); + } + } + } + + for (let [itemType, objectsOfType] of objects) { + // FIXME: we would ideally need for the loader to WAIT for the import to be performed, which means writing our own loader plugin. + + let itemFactory: ItemFactoryInterface; + + switch (itemType) { + case 'computer': + let module = await import('../Items/Computer/computer'); + itemFactory = module.default as ItemFactoryInterface; + break; + default: + throw new Error('Unsupported object type: "'+ itemType +'"'); + } + + itemFactory.preload(this.load); + this.load.start(); // Let's manually start the loader because the import might be over AFTER the loading ends. + + this.load.on('complete', () => { + // FIXME: the factory might fail because the resources might not be loaded yet... + // We would need to add a loader ended event in addition to the createPromise + this.createPromise.then(() => { + itemFactory.create(this); + + for (let object of objectsOfType) { + // TODO: we should pass here a factory to create sprites (maybe?) + let actionableItem = itemFactory.factory(this, object); + this.actionableItems.push(actionableItem); + } + }); + }); + + // import(/* webpackIgnore: true */ scriptUrl).then(result => { + // + // result.default.preload(this.load); + // + // this.load.start(); // Let's manually start the loader because the import might be over AFTER the loading ends. + // this.load.on('complete', () => { + // // FIXME: the factory might fail because the resources might not be loaded yet... + // // We would need to add a loader ended event in addition to the createPromise + // this.createPromise.then(() => { + // result.default.create(this); + // + // for (let object of objectsOfType) { + // // TODO: we should pass here a factory to create sprites (maybe?) + // let objectSprite = result.default.factory(this, object); + // } + // }); + // }); + // }); + } + + // TEST: let's load a module dynamically! + /*let foo = "http://maps.workadventure.localhost/computer.js"; + import(/* webpackIgnore: true * / foo).then(result => { + console.log(result); + + });*/ } //hook initialisation @@ -361,6 +452,8 @@ export class GameScene extends Phaser.Scene { } }, 500); } + + this.createPromiseResolve(); } private getExitSceneUrl(layer: ITiledMapLayer): string|undefined { @@ -526,6 +619,7 @@ export class GameScene extends Phaser.Scene { //listen event to share position of user this.CurrentPlayer.on(hasMovedEventName, this.pushPlayerPosition.bind(this)) + this.CurrentPlayer.on(hasMovedEventName, this.outlineItem.bind(this)) }); } @@ -555,6 +649,49 @@ export class GameScene extends Phaser.Scene { // Otherwise, do nothing. } + /** + * Finds the correct item to outline and outline it (if there is an item to be outlined) + * @param event + */ + private outlineItem(event: HasMovedEvent): void { + let x = event.x; + let y = event.y; + switch (event.direction) { + case PlayerAnimationNames.WalkUp: + y -= 32; + break; + case PlayerAnimationNames.WalkDown: + y += 32; + break; + case PlayerAnimationNames.WalkLeft: + x -= 32; + break; + case PlayerAnimationNames.WalkRight: + x += 32; + break; + default: + throw new Error('Unexpected direction "' + event.direction + '"'); + } + + let shortestDistance: number = Infinity; + let selectedItem: ActionableItem|null = null; + for (let item of this.actionableItems) { + let distance = item.actionableDistance(x, y); + if (distance !== null && distance < shortestDistance) { + shortestDistance = distance; + selectedItem = item; + } + } + + if (this.outlinedItem === selectedItem) { + return; + } + + this.outlinedItem?.notSelectable(); + this.outlinedItem = selectedItem; + this.outlinedItem?.selectable(); + } + private doPushPlayerPosition(event: HasMovedEvent): void { this.lastMoveEventSent = event; this.lastSentTick = this.currentTick; diff --git a/front/src/Phaser/Items/ActionableItem.ts b/front/src/Phaser/Items/ActionableItem.ts index e69de29b..229b0888 100644 --- a/front/src/Phaser/Items/ActionableItem.ts +++ b/front/src/Phaser/Items/ActionableItem.ts @@ -0,0 +1,60 @@ +/** + * An actionable item represents an in-game object that can be activated using the space-bar. + * It has coordinates and an "activation radius" + */ +import Sprite = Phaser.GameObjects.Sprite; +import {OutlinePipeline} from "../Shaders/OutlinePipeline"; + +export class ActionableItem { + private readonly activationRadiusSquared : number; + private isSelectable: boolean = false; + + public constructor(private sprite: Sprite, private activationRadius: number) { + this.activationRadiusSquared = activationRadius * activationRadius; + } + + /** + * Returns the square of the distance to the object center IF we are in item action range + * OR null if we are out of range. + */ + public actionableDistance(x: number, y: number): number|null { + let distanceSquared = (x - this.sprite.x)*(x - this.sprite.x) + (y - this.sprite.y)*(y - this.sprite.y); + if (distanceSquared < this.activationRadiusSquared) { + return distanceSquared; + } else { + return null; + } + } + + /** + * Show the outline of the sprite. + */ + public selectable(): void { + if (this.isSelectable) { + return; + } + this.isSelectable = true; + this.sprite.setPipeline(OutlinePipeline.KEY); + this.sprite.pipeline.setFloat2('uTextureSize', + this.sprite.texture.getSourceImage().width, this.sprite.texture.getSourceImage().height); + } + + /** + * Hide the outline of the sprite + */ + public notSelectable(): void { + if (!this.isSelectable) { + return; + } + this.isSelectable = false; + this.sprite.resetPipeline(); + } + + /** + * Triggered when the "space" key is pressed and the object is in range of being activated. + */ + public activate(): void { + + } +} + diff --git a/front/src/Phaser/Items/ActionableSprite.ts b/front/src/Phaser/Items/ActionableSprite.ts deleted file mode 100644 index e69de29b..00000000 diff --git a/front/src/Phaser/Items/Computer/computer.ts b/front/src/Phaser/Items/Computer/computer.ts new file mode 100644 index 00000000..99eddbb7 --- /dev/null +++ b/front/src/Phaser/Items/Computer/computer.ts @@ -0,0 +1,24 @@ +import * as Phaser from 'phaser'; +import {Scene} from "phaser"; +import Sprite = Phaser.GameObjects.Sprite; +import {ITiledMapObject} from "../../Map/ITiledMap"; +import {ItemFactoryInterface} from "../ItemFactoryInterface"; +import {GameScene} from "../../Game/GameScene"; +import {ActionableItem} from "../ActionableItem"; + +export default { + preload: (loader: Phaser.Loader.LoaderPlugin): void => { + loader.atlas('computer', 'http://maps.workadventure.localhost/computer/computer.png', 'http://maps.workadventure.localhost/computer/computer_atlas.json'); + }, + create: (scene: GameScene): void => { + + }, + factory: (scene: GameScene, object: ITiledMapObject): ActionableItem => { + // Idée: ESSAYER WebPack? https://paultavares.wordpress.com/2018/07/02/webpack-how-to-generate-an-es-module-bundle/ + let foo = new Sprite(scene, object.x, object.y, 'computer'); + scene.add.existing(foo); + + return new ActionableItem(foo, 32); + //scene.add.sprite(object.x, object.y, 'computer'); + } +} as ItemFactoryInterface; diff --git a/front/src/Phaser/Items/ItemFactoryInterface.ts b/front/src/Phaser/Items/ItemFactoryInterface.ts new file mode 100644 index 00000000..0f88f76b --- /dev/null +++ b/front/src/Phaser/Items/ItemFactoryInterface.ts @@ -0,0 +1,10 @@ +import LoaderPlugin = Phaser.Loader.LoaderPlugin; +import {GameScene} from "../Game/GameScene"; +import {ITiledMapObject} from "../Map/ITiledMap"; +import {ActionableItem} from "./ActionableItem"; + +export interface ItemFactoryInterface { + preload: (loader: LoaderPlugin) => void; + create: (scene: GameScene) => void; + factory: (scene: GameScene, object: ITiledMapObject) => ActionableItem; +} diff --git a/front/src/Phaser/Player/Player.ts b/front/src/Phaser/Player/Player.ts index 1a3a3a03..64adc246 100644 --- a/front/src/Phaser/Player/Player.ts +++ b/front/src/Phaser/Player/Player.ts @@ -33,10 +33,6 @@ export class Player extends Character implements CurrentGamerInterface { //the current player model should be push away by other players to prevent conflict this.setImmovable(false); - - this.setPipeline(OutlinePipeline.KEY); - this.pipeline.setFloat2('uTextureSize', - this.texture.getSourceImage().width, this.texture.getSourceImage().height); } moveUser(delta: number): void { diff --git a/front/src/Phaser/Shaders/OutlinePipeline.ts b/front/src/Phaser/Shaders/OutlinePipeline.ts index f65a66d2..6b416b8a 100644 --- a/front/src/Phaser/Shaders/OutlinePipeline.ts +++ b/front/src/Phaser/Shaders/OutlinePipeline.ts @@ -50,7 +50,7 @@ export class OutlinePipeline extends Phaser.Renderer.WebGL.Pipelines.TextureTint if (texture.a == 0.0 && max(max(upAlpha, downAlpha), max(leftAlpha, rightAlpha)) == 1.0) { - color = vec4(1.0, 1.0, 1.0, 1.0); + color = vec4(1.0, 1.0, 0.0, 1.0); } gl_FragColor = color; diff --git a/front/src/Phaser/UserInput/UserInputManager.ts b/front/src/Phaser/UserInput/UserInputManager.ts index eddbbf74..d40d149e 100644 --- a/front/src/Phaser/UserInput/UserInputManager.ts +++ b/front/src/Phaser/UserInput/UserInputManager.ts @@ -47,6 +47,7 @@ export class UserInputManager { {event: UserInputEvent.SpeedUp, keyInstance: Scene.input.keyboard.addKey(Phaser.Input.Keyboard.KeyCodes.SHIFT) }, {event: UserInputEvent.Interact, keyInstance: Scene.input.keyboard.addKey(Phaser.Input.Keyboard.KeyCodes.E) }, + {event: UserInputEvent.Interact, keyInstance: Scene.input.keyboard.addKey(Phaser.Input.Keyboard.KeyCodes.SPACE) }, {event: UserInputEvent.Shout, keyInstance: Scene.input.keyboard.addKey(Phaser.Input.Keyboard.KeyCodes.F) }, ]; } diff --git a/front/tsconfig.json b/front/tsconfig.json index 1661efa2..9a140744 100644 --- a/front/tsconfig.json +++ b/front/tsconfig.json @@ -3,9 +3,8 @@ "outDir": "./dist/", "sourceMap": true, "moduleResolution": "node", - "noImplicitAny": true, - "module": "CommonJS", - "target": "es5", + "module": "ESNext", + "target": "ES2015", "downlevelIteration": true, "jsx": "react", "allowJs": true, diff --git a/front/webpack.config.js b/front/webpack.config.js index e162b4f8..68b1bc7e 100644 --- a/front/webpack.config.js +++ b/front/webpack.config.js @@ -33,6 +33,9 @@ module.exports = { path: path.resolve(__dirname, 'dist'), publicPath: '/' }, + externals:[ + require('webpack-require-http') + ], plugins: [ new HtmlWebpackPlugin( { diff --git a/front/yarn.lock b/front/yarn.lock index 05e9b368..b943ebf0 100644 --- a/front/yarn.lock +++ b/front/yarn.lock @@ -801,6 +801,11 @@ chardet@^0.7.0: resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== +charenc@~0.0.1: + version "0.0.2" + resolved "https://registry.yarnpkg.com/charenc/-/charenc-0.0.2.tgz#c0a1d2f3a7092e03774bfa83f14c0fc5790a8667" + integrity sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc= + chokidar@^2.1.8: version "2.1.8" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917" @@ -1063,6 +1068,11 @@ cross-spawn@6.0.5, cross-spawn@^6.0.0, cross-spawn@^6.0.5: shebang-command "^1.2.0" which "^1.2.9" +crypt@~0.0.1: + version "0.0.2" + resolved "https://registry.yarnpkg.com/crypt/-/crypt-0.0.2.tgz#88d7ff7ec0dfb86f713dc87bbb42d044d3e6c41b" + integrity sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs= + crypto-browserify@^3.11.0: version "3.12.0" resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" @@ -2350,7 +2360,7 @@ is-binary-path@^1.0.0: dependencies: binary-extensions "^1.0.0" -is-buffer@^1.1.5: +is-buffer@^1.1.5, is-buffer@~1.1.1: version "1.1.6" resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" @@ -2691,6 +2701,15 @@ md5.js@^1.3.4: inherits "^2.0.1" safe-buffer "^5.1.2" +md5@^2.0.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/md5/-/md5-2.2.1.tgz#53ab38d5fe3c8891ba465329ea23fac0540126f9" + integrity sha1-U6s41f48iJG6RlMp6iP6wFQBJvk= + dependencies: + charenc "~0.0.1" + crypt "~0.0.1" + is-buffer "~1.1.1" + media-typer@0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" @@ -4501,6 +4520,14 @@ webpack-merge@^4.2.2: dependencies: lodash "^4.17.15" +webpack-require-http@^0.4.3: + version "0.4.3" + resolved "https://registry.yarnpkg.com/webpack-require-http/-/webpack-require-http-0.4.3.tgz#5690d8cc57246a53a81f1ccffd20d0394d70261c" + integrity sha1-VpDYzFckalOoHxzP/SDQOU1wJhw= + dependencies: + md5 "^2.0.0" + url "^0.11.0" + webpack-sources@^1.4.0, webpack-sources@^1.4.1: version "1.4.3" resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.4.3.tgz#eedd8ec0b928fbf1cbfe994e22d2d890f330a933" diff --git a/maps/.gitignore b/maps/.gitignore new file mode 100644 index 00000000..2ccbe465 --- /dev/null +++ b/maps/.gitignore @@ -0,0 +1 @@ +/node_modules/ diff --git a/maps/dist/.htaccess b/maps/dist/.htaccess new file mode 100644 index 00000000..f2895509 --- /dev/null +++ b/maps/dist/.htaccess @@ -0,0 +1 @@ +Header set Access-Control-Allow-Origin "*" diff --git a/maps/objects/computer.ts b/maps/objects/computer.ts index e69de29b..145d19df 100644 --- a/maps/objects/computer.ts +++ b/maps/objects/computer.ts @@ -0,0 +1,56 @@ +import * as Phaser from 'phaser'; +import {Scene} from "phaser"; +import Sprite = Phaser.GameObjects.Sprite; + +interface ITiledMapObject { + id: number; + + /** + * Tile object id + */ + gid: number; + height: number; + name: string; + properties: {[key: string]: string}; + rotation: number; + type: string; + visible: boolean; + width: number; + x: number; + y: number; + + /** + * Whether or not object is an ellipse + */ + ellipse: boolean; + + /** + * Polygon points + */ + polygon: {x: number, y: number}[]; + + /** + * Polyline points + */ + polyline: {x: number, y: number}[]; +} + +class MySprite extends Sprite { + +} + + +export default { + preload: (loader: Phaser.Loader.LoaderPlugin) => { + loader.atlas('computer', 'http://maps.workadventure.localhost/computer/computer.png', 'http://maps.workadventure.localhost/computer/computer_atlas.json'); + }, + create: (scene: Scene) => { + + }, + factory: (scene: Scene, object: ITiledMapObject) => { + // Idée: ESSAYER WebPack? https://paultavares.wordpress.com/2018/07/02/webpack-how-to-generate-an-es-module-bundle/ + let foo = new MySprite(scene, object.x, object.y, 'computer'); + scene.add.existing(foo); + //scene.add.sprite(object.x, object.y, 'computer'); + } +}; diff --git a/maps/package.json b/maps/package.json index a20c876f..3623c205 100644 --- a/maps/package.json +++ b/maps/package.json @@ -1,13 +1,12 @@ { - "name": "workadventureback", + "name": "workadventuremaps", "version": "1.0.0", "description": "", "main": "index.js", "scripts": { "tsc": "tsc", - "dev": "ts-node-dev --respawn --transpileOnly ./server.ts", - "prod": "tsc && node ./dist/server.js", - "profile": "tsc && node --prof ./dist/server.js", + "dev": "tsc -w", + "prod": "tsc", "test": "ts-node node_modules/jasmine/bin/jasmine --config=jasmine.json", "lint": "node_modules/.bin/eslint src/ . --ext .ts", "fix": "node_modules/.bin/eslint --fix src/ . --ext .ts" @@ -36,22 +35,9 @@ }, "homepage": "https://github.com/thecodingmachine/workadventure#readme", "dependencies": { - "@types/express": "^4.17.4", - "@types/http-status-codes": "^1.2.0", - "@types/jsonwebtoken": "^8.3.8", - "@types/socket.io": "^2.1.4", - "@types/uuidv4": "^5.0.0", - "body-parser": "^1.19.0", - "express": "^4.17.1", - "generic-type-guard": "^3.2.0", - "http-status-codes": "^1.4.0", - "jsonwebtoken": "^8.5.1", - "prom-client": "^12.0.0", - "socket.io": "^2.3.0", - "systeminformation": "^4.26.5", + "phaser": "^3.24.1", "ts-node-dev": "^1.0.0-pre.44", - "typescript": "^3.8.3", - "uuidv4": "^6.0.7" + "typescript": "^3.8.3" }, "devDependencies": { "@types/jasmine": "^3.5.10", From 2484e4f1df75876cf01875f00e9fcd472c9360c8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20N=C3=A9grier?= Date: Thu, 23 Jul 2020 18:43:51 +0200 Subject: [PATCH 063/313] Moving maps to their own container --- .github/workflows/build-and-deploy.yml | 24 +++++++++ back/src/Controller/MapController.ts | 3 +- deeployer.libsonnet | 8 +++ docker-compose.yaml | 2 +- .../resources/items/computer/computer.png | Bin 0 -> 577 bytes .../items/computer/computer_atlas.json | 47 ++++++++++++++++++ .../items/computer/original/computer.png | Bin 0 -> 577 bytes .../computer/original/computer_atlas.json | 47 ++++++++++++++++++ .../items/computer/unpack/computer_off.png | Bin 0 -> 379 bytes .../items/computer/unpack/computer_on1.png | Bin 0 -> 492 bytes .../items/computer/unpack/computer_on2.png | Bin 0 -> 452 bytes front/src/Phaser/Items/Computer/computer.ts | 2 +- maps/{dist => }/.htaccess | 0 maps/Dockerfile | 9 ++++ .../Assets/Maps => maps}/Floor0/floor0.json | 0 .../Maps => maps}/Floor0/floortileset.png | Bin .../Floor0/tilesets_deviant_milkian_1.png | Bin .../Maps => maps}/Floor1/FloorTile_S.jpg | Bin .../Assets/Maps => maps}/Floor1/floor1.json | 0 .../Maps => maps}/Floor1/floortileset.png | Bin .../Floor1/tilesets_deviant_milkian_1.png | Bin .../Maps => maps}/Lyon/floortileset.png | Bin {back/src/Assets/Maps => maps}/Lyon/lyon.json | 0 .../Lyon/tilesets_deviant_milkian_1.png | Bin maps/objects/computer.ts | 2 +- 25 files changed, 140 insertions(+), 4 deletions(-) create mode 100644 front/dist/resources/items/computer/computer.png create mode 100644 front/dist/resources/items/computer/computer_atlas.json create mode 100644 front/dist/resources/items/computer/original/computer.png create mode 100644 front/dist/resources/items/computer/original/computer_atlas.json create mode 100644 front/dist/resources/items/computer/unpack/computer_off.png create mode 100644 front/dist/resources/items/computer/unpack/computer_on1.png create mode 100644 front/dist/resources/items/computer/unpack/computer_on2.png rename maps/{dist => }/.htaccess (100%) create mode 100644 maps/Dockerfile rename {back/src/Assets/Maps => maps}/Floor0/floor0.json (100%) rename {back/src/Assets/Maps => maps}/Floor0/floortileset.png (100%) rename {back/src/Assets/Maps => maps}/Floor0/tilesets_deviant_milkian_1.png (100%) rename {back/src/Assets/Maps => maps}/Floor1/FloorTile_S.jpg (100%) rename {back/src/Assets/Maps => maps}/Floor1/floor1.json (100%) rename {back/src/Assets/Maps => maps}/Floor1/floortileset.png (100%) rename {back/src/Assets/Maps => maps}/Floor1/tilesets_deviant_milkian_1.png (100%) rename {back/src/Assets/Maps => maps}/Lyon/floortileset.png (100%) rename {back/src/Assets/Maps => maps}/Lyon/lyon.json (100%) rename {back/src/Assets/Maps => maps}/Lyon/tilesets_deviant_milkian_1.png (100%) diff --git a/.github/workflows/build-and-deploy.yml b/.github/workflows/build-and-deploy.yml index e79fe2a9..edd7b553 100644 --- a/.github/workflows/build-and-deploy.yml +++ b/.github/workflows/build-and-deploy.yml @@ -79,6 +79,30 @@ jobs: tags: ${{ env.GITHUB_REF_SLUG }} add_git_labels: true + build-maps: + + runs-on: ubuntu-latest + + steps: + + - name: Checkout + uses: actions/checkout@v2 + + + # Create a slugified value of the branch + - uses: rlespinasse/github-slug-action@master + + - name: "Build and push front image" + uses: docker/build-push-action@v1 + with: + dockerfile: maps/Dockerfile + path: maps/ + username: ${{ secrets.DOCKER_USERNAME }} + password: ${{ secrets.DOCKER_PASSWORD }} + repository: thecodingmachine/workadventure-maps + tags: ${{ env.GITHUB_REF_SLUG }} + add_git_labels: true + deeploy: needs: - build-front diff --git a/back/src/Controller/MapController.ts b/back/src/Controller/MapController.ts index e3730898..af2ba848 100644 --- a/back/src/Controller/MapController.ts +++ b/back/src/Controller/MapController.ts @@ -19,8 +19,9 @@ export class MapController { // Returns a map mapping map name to file name of the map getStartMap() { this.App.get("/start-map", (req: Request, res: Response) => { + let url = req.headers.host?.replace('api.', 'maps.') + URL_ROOM_STARTED; res.status(OK).send({ - mapUrlStart: req.headers.host + "/map/files" + URL_ROOM_STARTED, + mapUrlStart: url, startInstance: "global" }); }); diff --git a/deeployer.libsonnet b/deeployer.libsonnet index 09074148..bb0ce34d 100644 --- a/deeployer.libsonnet +++ b/deeployer.libsonnet @@ -28,6 +28,14 @@ "API_URL": "api."+url } }, + "maps": { + "image": "thecodingmachine/workadventure-maps:"+tag, + "host": { + "url": "maps."+url, + "https": "enable" + }, + "ports": [80] + }, "website": { "image": "thecodingmachine/workadventure-website:"+tag, "host": { diff --git a/docker-compose.yaml b/docker-compose.yaml index 53208c76..6d9380b8 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -44,7 +44,7 @@ services: DEBUG_MODE: "$DEBUG_MODE" HOST: "0.0.0.0" NODE_ENV: development - APACHE_DOCUMENT_ROOT: dist/ + #APACHE_DOCUMENT_ROOT: dist/ #APACHE_EXTENSIONS: headers #APACHE_EXTENSION_HEADERS: 1 STARTUP_COMMAND_0: sudo a2enmod headers diff --git a/front/dist/resources/items/computer/computer.png b/front/dist/resources/items/computer/computer.png new file mode 100644 index 0000000000000000000000000000000000000000..cd3a261991801be8a1a79cd6a4ecb1656fec500e GIT binary patch literal 577 zcmV-H0>1r;P) z_y>hR@q`gY@w|$(;XC*1>V@psjnth@yDHtP+YRj3|nyiLH*mTJE@Z(AGU+ zL{U7=-8ZuI#1uvGB&2afM2rD?Tm=ONRmQ)NTEn0W`ZK|WwEFcd3Jj`Da3L?BMTbEd zbeL4o_b<7b*!kG&hx1Gh=NW@CXeL~FWf)YMu|eJH`YW7T>C{^XgEHtaQ?I-q&_BdHs4_4=wMKzKm4SI&1qB9GhAXcOgDL~_xC#mks?5K+;VuP(l4kh^iEayrv_vb( P00000NkvXXu0mjfFhUGc literal 0 HcmV?d00001 diff --git a/front/dist/resources/items/computer/computer_atlas.json b/front/dist/resources/items/computer/computer_atlas.json new file mode 100644 index 00000000..881f1189 --- /dev/null +++ b/front/dist/resources/items/computer/computer_atlas.json @@ -0,0 +1,47 @@ +{ + "frames": [ + { + "filename": "computer_off", + "frame": { + "w": 42, + "h": 40, + "x": 0, + "y": 0 + }, + "anchor": { + "x": 0.5, + "y": 0.5 + } + }, + { + "filename": "computer_on1", + "frame": { + "w": 42, + "h": 40, + "x": 0, + "y": 40 + }, + "anchor": { + "x": 0.5, + "y": 0.5 + } + }, + { + "filename": "computer_on2", + "frame": { + "w": 42, + "h": 40, + "x": 42, + "y": 0 + }, + "anchor": { + "x": 0.5, + "y": 0.5 + } + } + ], + "meta": { + "description": "Atlas generado con Atlas Packer Gamma V2", + "web": "https://gammafp.github.io/atlas-packer-phaser/" + } +} \ No newline at end of file diff --git a/front/dist/resources/items/computer/original/computer.png b/front/dist/resources/items/computer/original/computer.png new file mode 100644 index 0000000000000000000000000000000000000000..cd3a261991801be8a1a79cd6a4ecb1656fec500e GIT binary patch literal 577 zcmV-H0>1r;P) z_y>hR@q`gY@w|$(;XC*1>V@psjnth@yDHtP+YRj3|nyiLH*mTJE@Z(AGU+ zL{U7=-8ZuI#1uvGB&2afM2rD?Tm=ONRmQ)NTEn0W`ZK|WwEFcd3Jj`Da3L?BMTbEd zbeL4o_b<7b*!kG&hx1Gh=NW@CXeL~FWf)YMu|eJH`YW7T>C{^XgEHtaQ?I-q&_BdHs4_4=wMKzKm4SI&1qB9GhAXcOgDL~_xC#mks?5K+;VuP(l4kh^iEayrv_vb( P00000NkvXXu0mjfFhUGc literal 0 HcmV?d00001 diff --git a/front/dist/resources/items/computer/original/computer_atlas.json b/front/dist/resources/items/computer/original/computer_atlas.json new file mode 100644 index 00000000..881f1189 --- /dev/null +++ b/front/dist/resources/items/computer/original/computer_atlas.json @@ -0,0 +1,47 @@ +{ + "frames": [ + { + "filename": "computer_off", + "frame": { + "w": 42, + "h": 40, + "x": 0, + "y": 0 + }, + "anchor": { + "x": 0.5, + "y": 0.5 + } + }, + { + "filename": "computer_on1", + "frame": { + "w": 42, + "h": 40, + "x": 0, + "y": 40 + }, + "anchor": { + "x": 0.5, + "y": 0.5 + } + }, + { + "filename": "computer_on2", + "frame": { + "w": 42, + "h": 40, + "x": 42, + "y": 0 + }, + "anchor": { + "x": 0.5, + "y": 0.5 + } + } + ], + "meta": { + "description": "Atlas generado con Atlas Packer Gamma V2", + "web": "https://gammafp.github.io/atlas-packer-phaser/" + } +} \ No newline at end of file diff --git a/front/dist/resources/items/computer/unpack/computer_off.png b/front/dist/resources/items/computer/unpack/computer_off.png new file mode 100644 index 0000000000000000000000000000000000000000..544838fe0b24506c5934cf8fbc7574a7bd98d2fe GIT binary patch literal 379 zcmeAS@N?(olHy`uVBq!ia0vp^T0pG9!3HEdxHAHP6lZ})WHAE+-w_aIoT|+y&A`B@ z>*?Yc64Cm0#(uv;0V3`DrQ}-G1ER?a)SK<0SnWFt~zv#r*TkhPxT!AHf_lMg0rQR$DKHD(FTxU%% zkYU^~!+))CZdi5Eu2_pc=A3&j;#W_-J!d?#vn}$Bw`V0ozy|e+dmnpD@v&0uHFck` zLNK%!1NpxBp7H;mwkAIV+u;}UX1Fj{*B;c%y8C+ZgzeYmf3+X6+aHoG+&sfYw;^o% zUZxjUaTa&)uc$SKhFz@-4inQxn`HrY$F+K@OXTR(7OlImCbL-b`(^*|p9D$+9 N;OXk;vd$@?2>_4Go6P_K literal 0 HcmV?d00001 diff --git a/front/dist/resources/items/computer/unpack/computer_on1.png b/front/dist/resources/items/computer/unpack/computer_on1.png new file mode 100644 index 0000000000000000000000000000000000000000..e2492441e294b71049346902c083c246cc1d5eaa GIT binary patch literal 492 zcmV?00009a7bBm000ie z000ie0hKEb8vp*MgxL5L7NRJEA|#-MK)^;MZAAP7wKE{W zMyxE;hy;{W3TiB@B^E&tL_`dT4`9Tnut>8OW{kUW*3BwA%;4$ny@cExK4vouh9CeO z$8m%ZqS7MS?gqFgQm?O&pch56ZzUQELt zp@{np>u)Pj?Eyfd_eeRj!zd$z5v|eUMLn{_sE2AX<*H}4ZoloT=2w?J0PNjdcef?B z8kL5E_B-d@o0QmTR8mN1T(!)c?EjQORo4Bm+o;M|P?KJRvcHp4f7TeIp%$$cQ?8s9 z(wUCj`t`$LjL}dT^=2$+W>rrz*-!XOOSKZiycNw6OU2t0YJru|D&#Jaw0jY z^#o1z>b)9Dq_b|1ro7xoZuWY4qgy5NKy|<6{5Y`o5LXC^6HhH?00009a7bBm000ie z000ie0hKEb8vp^8j!h2Y^=l5rD4yYE5OfRYIl*i)OP4{60xm?CoxcdNPd$>AD+f?Eyfc_!2qG zhf$UnQd&cid!qsDdPS={=eI-qQFF_k0pR)RGTD~o)u=M`-+p+W+@vC(Mir%UO{-Pr zRNo|nf01vaQO3q$QX$5u(V}*}qMe)q5M$H=IJ&6z0nYYM0JwU%A+Fxp zvH^Ji{LnH!PQ)11&e4NI|BGm4a}9uoUG)d$MZL}dnMUvL{I4RF$zR%hpo-b|BoR5IVW@ocS^muqVP0000 { - loader.atlas('computer', 'http://maps.workadventure.localhost/computer/computer.png', 'http://maps.workadventure.localhost/computer/computer_atlas.json'); + loader.atlas('computer', '/resources/items/computer/computer.png', '/resources/items/computer/computer_atlas.json'); }, create: (scene: GameScene): void => { diff --git a/maps/dist/.htaccess b/maps/.htaccess similarity index 100% rename from maps/dist/.htaccess rename to maps/.htaccess diff --git a/maps/Dockerfile b/maps/Dockerfile new file mode 100644 index 00000000..550d87f1 --- /dev/null +++ b/maps/Dockerfile @@ -0,0 +1,9 @@ +# we are rebuilding on each deploy to cope with the API_URL environment URL +FROM thecodingmachine/nodejs:12-apache + +COPY --chown=docker:docker . . +#RUN yarn install + +#ENV NODE_ENV=production +#ENV STARTUP_COMMAND_1="yarn run build" +#ENV APACHE_DOCUMENT_ROOT=dist/ diff --git a/back/src/Assets/Maps/Floor0/floor0.json b/maps/Floor0/floor0.json similarity index 100% rename from back/src/Assets/Maps/Floor0/floor0.json rename to maps/Floor0/floor0.json diff --git a/back/src/Assets/Maps/Floor0/floortileset.png b/maps/Floor0/floortileset.png similarity index 100% rename from back/src/Assets/Maps/Floor0/floortileset.png rename to maps/Floor0/floortileset.png diff --git a/back/src/Assets/Maps/Floor0/tilesets_deviant_milkian_1.png b/maps/Floor0/tilesets_deviant_milkian_1.png similarity index 100% rename from back/src/Assets/Maps/Floor0/tilesets_deviant_milkian_1.png rename to maps/Floor0/tilesets_deviant_milkian_1.png diff --git a/back/src/Assets/Maps/Floor1/FloorTile_S.jpg b/maps/Floor1/FloorTile_S.jpg similarity index 100% rename from back/src/Assets/Maps/Floor1/FloorTile_S.jpg rename to maps/Floor1/FloorTile_S.jpg diff --git a/back/src/Assets/Maps/Floor1/floor1.json b/maps/Floor1/floor1.json similarity index 100% rename from back/src/Assets/Maps/Floor1/floor1.json rename to maps/Floor1/floor1.json diff --git a/back/src/Assets/Maps/Floor1/floortileset.png b/maps/Floor1/floortileset.png similarity index 100% rename from back/src/Assets/Maps/Floor1/floortileset.png rename to maps/Floor1/floortileset.png diff --git a/back/src/Assets/Maps/Floor1/tilesets_deviant_milkian_1.png b/maps/Floor1/tilesets_deviant_milkian_1.png similarity index 100% rename from back/src/Assets/Maps/Floor1/tilesets_deviant_milkian_1.png rename to maps/Floor1/tilesets_deviant_milkian_1.png diff --git a/back/src/Assets/Maps/Lyon/floortileset.png b/maps/Lyon/floortileset.png similarity index 100% rename from back/src/Assets/Maps/Lyon/floortileset.png rename to maps/Lyon/floortileset.png diff --git a/back/src/Assets/Maps/Lyon/lyon.json b/maps/Lyon/lyon.json similarity index 100% rename from back/src/Assets/Maps/Lyon/lyon.json rename to maps/Lyon/lyon.json diff --git a/back/src/Assets/Maps/Lyon/tilesets_deviant_milkian_1.png b/maps/Lyon/tilesets_deviant_milkian_1.png similarity index 100% rename from back/src/Assets/Maps/Lyon/tilesets_deviant_milkian_1.png rename to maps/Lyon/tilesets_deviant_milkian_1.png diff --git a/maps/objects/computer.ts b/maps/objects/computer.ts index 145d19df..3c48f91a 100644 --- a/maps/objects/computer.ts +++ b/maps/objects/computer.ts @@ -42,7 +42,7 @@ class MySprite extends Sprite { export default { preload: (loader: Phaser.Loader.LoaderPlugin) => { - loader.atlas('computer', 'http://maps.workadventure.localhost/computer/computer.png', 'http://maps.workadventure.localhost/computer/computer_atlas.json'); + loader.atlas('computer', '/resources/items/computer/computer.png', '/resources/items/computer/computer_atlas.json'); }, create: (scene: Scene) => { From d48d5b0285ef0729c2c86f4920cc0ac6a8adf562 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20N=C3=A9grier?= Date: Thu, 23 Jul 2020 18:47:28 +0200 Subject: [PATCH 064/313] Fix CS --- back/src/Controller/MapController.ts | 2 +- front/src/Phaser/Game/GameScene.ts | 23 +++++++++++---------- front/src/Phaser/Items/ActionableItem.ts | 2 +- front/src/Phaser/Items/Computer/computer.ts | 2 +- front/src/index.ts | 2 +- 5 files changed, 16 insertions(+), 15 deletions(-) diff --git a/back/src/Controller/MapController.ts b/back/src/Controller/MapController.ts index af2ba848..58ce40a9 100644 --- a/back/src/Controller/MapController.ts +++ b/back/src/Controller/MapController.ts @@ -19,7 +19,7 @@ export class MapController { // Returns a map mapping map name to file name of the map getStartMap() { this.App.get("/start-map", (req: Request, res: Response) => { - let url = req.headers.host?.replace('api.', 'maps.') + URL_ROOM_STARTED; + const url = req.headers.host?.replace('api.', 'maps.') + URL_ROOM_STARTED; res.status(OK).send({ mapUrlStart: url, startInstance: "global" diff --git a/front/src/Phaser/Game/GameScene.ts b/front/src/Phaser/Game/GameScene.ts index 6d311e33..9ee54058 100644 --- a/front/src/Phaser/Game/GameScene.ts +++ b/front/src/Phaser/Game/GameScene.ts @@ -252,11 +252,11 @@ export class GameScene extends Phaser.Scene { }) // Scan the object layers for objects to load and load them. - let objects = new Map(); + const objects = new Map(); - for (let layer of this.mapFile.layers) { + for (const layer of this.mapFile.layers) { if (layer.type === 'objectgroup') { - for (let object of layer.objects) { + for (const object of layer.objects) { let objectsOfType: ITiledMapObject[]|undefined; if (!objects.has(object.type)) { objectsOfType = new Array(); @@ -272,16 +272,17 @@ export class GameScene extends Phaser.Scene { } } - for (let [itemType, objectsOfType] of objects) { + for (const [itemType, objectsOfType] of objects) { // FIXME: we would ideally need for the loader to WAIT for the import to be performed, which means writing our own loader plugin. let itemFactory: ItemFactoryInterface; switch (itemType) { - case 'computer': - let module = await import('../Items/Computer/computer'); - itemFactory = module.default as ItemFactoryInterface; + case 'computer': { + const module = await import('../Items/Computer/computer'); + itemFactory = module.default; break; + } default: throw new Error('Unsupported object type: "'+ itemType +'"'); } @@ -295,9 +296,9 @@ export class GameScene extends Phaser.Scene { this.createPromise.then(() => { itemFactory.create(this); - for (let object of objectsOfType) { + for (const object of objectsOfType) { // TODO: we should pass here a factory to create sprites (maybe?) - let actionableItem = itemFactory.factory(this, object); + const actionableItem = itemFactory.factory(this, object); this.actionableItems.push(actionableItem); } }); @@ -675,8 +676,8 @@ export class GameScene extends Phaser.Scene { let shortestDistance: number = Infinity; let selectedItem: ActionableItem|null = null; - for (let item of this.actionableItems) { - let distance = item.actionableDistance(x, y); + for (const item of this.actionableItems) { + const distance = item.actionableDistance(x, y); if (distance !== null && distance < shortestDistance) { shortestDistance = distance; selectedItem = item; diff --git a/front/src/Phaser/Items/ActionableItem.ts b/front/src/Phaser/Items/ActionableItem.ts index 229b0888..01e85c64 100644 --- a/front/src/Phaser/Items/ActionableItem.ts +++ b/front/src/Phaser/Items/ActionableItem.ts @@ -18,7 +18,7 @@ export class ActionableItem { * OR null if we are out of range. */ public actionableDistance(x: number, y: number): number|null { - let distanceSquared = (x - this.sprite.x)*(x - this.sprite.x) + (y - this.sprite.y)*(y - this.sprite.y); + const distanceSquared = (x - this.sprite.x)*(x - this.sprite.x) + (y - this.sprite.y)*(y - this.sprite.y); if (distanceSquared < this.activationRadiusSquared) { return distanceSquared; } else { diff --git a/front/src/Phaser/Items/Computer/computer.ts b/front/src/Phaser/Items/Computer/computer.ts index 7ea7b318..b979ebf6 100644 --- a/front/src/Phaser/Items/Computer/computer.ts +++ b/front/src/Phaser/Items/Computer/computer.ts @@ -15,7 +15,7 @@ export default { }, factory: (scene: GameScene, object: ITiledMapObject): ActionableItem => { // Idée: ESSAYER WebPack? https://paultavares.wordpress.com/2018/07/02/webpack-how-to-generate-an-es-module-bundle/ - let foo = new Sprite(scene, object.x, object.y, 'computer'); + const foo = new Sprite(scene, object.x, object.y, 'computer'); scene.add.existing(foo); return new ActionableItem(foo, 32); diff --git a/front/src/index.ts b/front/src/index.ts index b847fa74..bf744a36 100644 --- a/front/src/index.ts +++ b/front/src/index.ts @@ -27,7 +27,7 @@ const config: GameConfig = { callbacks: { postBoot: game => { // FIXME: we should fore WebGL in the config. - let renderer = game.renderer as WebGLRenderer; + const renderer = game.renderer as WebGLRenderer; renderer.addPipeline(OutlinePipeline.KEY, new OutlinePipeline(game)); } } From 513244ae1f55df558ee4de17a54e6f2a3e55ca17 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20N=C3=A9grier?= Date: Thu, 23 Jul 2020 19:04:33 +0200 Subject: [PATCH 065/313] Enabling header module on Apache maps container --- maps/Dockerfile | 1 + 1 file changed, 1 insertion(+) diff --git a/maps/Dockerfile b/maps/Dockerfile index 550d87f1..33ca48b5 100644 --- a/maps/Dockerfile +++ b/maps/Dockerfile @@ -7,3 +7,4 @@ COPY --chown=docker:docker . . #ENV NODE_ENV=production #ENV STARTUP_COMMAND_1="yarn run build" #ENV APACHE_DOCUMENT_ROOT=dist/ +RUN sudo a2enmod headers From ee612f65859b5629c8db945ad25c4eb647c38e4b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20N=C3=A9grier?= Date: Mon, 27 Jul 2020 22:36:07 +0200 Subject: [PATCH 066/313] Adding event support to items --- back/src/Controller/IoSocketController.ts | 38 +++++++++- back/src/Model/Websocket/ItemEventMessage.ts | 10 +++ back/src/Model/World.ts | 10 +++ front/package.json | 1 + front/src/Connection.ts | 34 ++++++++- front/src/Phaser/Game/GameScene.ts | 68 +++++++++++++---- front/src/Phaser/Items/ActionableItem.ts | 36 ++++++++- front/src/Phaser/Items/Computer/computer.ts | 74 +++++++++++++++++-- .../src/Phaser/Items/ItemFactoryInterface.ts | 2 +- front/src/Phaser/Player/Player.ts | 11 +-- front/yarn.lock | 5 ++ 11 files changed, 253 insertions(+), 36 deletions(-) create mode 100644 back/src/Model/Websocket/ItemEventMessage.ts diff --git a/back/src/Controller/IoSocketController.ts b/back/src/Controller/IoSocketController.ts index edd29e7b..f0ac0337 100644 --- a/back/src/Controller/IoSocketController.ts +++ b/back/src/Controller/IoSocketController.ts @@ -19,6 +19,7 @@ import {isJoinRoomMessageInterface} from "../Model/Websocket/JoinRoomMessage"; import {isPointInterface, PointInterface} from "../Model/Websocket/PointInterface"; import {isWebRtcSignalMessageInterface} from "../Model/Websocket/WebRtcSignalMessage"; import {UserInGroupInterface} from "../Model/Websocket/UserInGroupInterface"; +import {isItemEventMessageInterface} from "../Model/Websocket/ItemEventMessage"; enum SockerIoEvent { CONNECTION = "connection", @@ -33,7 +34,8 @@ enum SockerIoEvent { MESSAGE_ERROR = "message-error", GROUP_CREATE_UPDATE = "group-create-update", GROUP_DELETE = "group-delete", - SET_PLAYER_DETAILS = "set-player-details" + SET_PLAYER_DETAILS = "set-player-details", + ITEM_EVENT = 'item-event', } export class IoSocketController { @@ -190,7 +192,16 @@ export class IoSocketController { } return new MessageUserPosition(user.id, player.name, player.character, player.position); }).filter((item: MessageUserPosition|null) => item !== null); - answerFn(listOfUsers); + + const listOfItems: {[itemId: string]: unknown} = {}; + for (const [itemId, item] of world.getItemsState().entries()) { + listOfItems[itemId] = item; + } + + answerFn({ + users: listOfUsers, + items: listOfItems + }); } catch (e) { console.error('An error occurred on "join_room" event'); console.error(e); @@ -281,6 +292,29 @@ export class IoSocketController { Client.character = playerDetails.character; answerFn(Client.userId); }); + + socket.on(SockerIoEvent.ITEM_EVENT, (itemEvent: unknown) => { + if (!isItemEventMessageInterface(itemEvent)) { + socket.emit(SockerIoEvent.MESSAGE_ERROR, {message: 'Invalid ITEM_EVENT message.'}); + console.warn('Invalid ITEM_EVENT message received: ', itemEvent); + return; + } + try { + const Client = (socket as ExSocketInterface); + + socket.to(Client.roomId).emit(SockerIoEvent.ITEM_EVENT, itemEvent); + + const world = this.Worlds.get(Client.roomId); + if (!world) { + console.error("Could not find world with id '", Client.roomId, "'"); + return; + } + world.setItemState(itemEvent.itemId, itemEvent.state); + } catch (e) { + console.error('An error occurred on "item_event"'); + console.error(e); + } + }); }); } diff --git a/back/src/Model/Websocket/ItemEventMessage.ts b/back/src/Model/Websocket/ItemEventMessage.ts new file mode 100644 index 00000000..b1f9203e --- /dev/null +++ b/back/src/Model/Websocket/ItemEventMessage.ts @@ -0,0 +1,10 @@ +import * as tg from "generic-type-guard"; + +export const isItemEventMessageInterface = + new tg.IsInterface().withProperties({ + itemId: tg.isNumber, + event: tg.isString, + state: tg.isUnknown, + parameters: tg.isUnknown, + }).get(); +export type ItemEventMessageInterface = tg.GuardedType; diff --git a/back/src/Model/World.ts b/back/src/Model/World.ts index 6d4fc205..5d26f817 100644 --- a/back/src/Model/World.ts +++ b/back/src/Model/World.ts @@ -27,6 +27,8 @@ export class World { private readonly groupUpdatedCallback: GroupUpdatedCallback; private readonly groupDeletedCallback: GroupDeletedCallback; + private itemsState: Map = new Map(); + constructor(connectCallback: ConnectCallback, disconnectCallback: DisconnectCallback, minDistance: number, @@ -227,6 +229,14 @@ export class World { return Math.sqrt(Math.pow(position2.x - position1.x, 2) + Math.pow(position2.y - position1.y, 2)); } + public setItemState(itemId: number, state: unknown) { + this.itemsState.set(itemId, state); + } + + public getItemsState(): Map { + return this.itemsState; + } + /*getDistancesBetweenGroupUsers(group: Group): Distance[] { let i = 0; diff --git a/front/package.json b/front/package.json index e5ea5b66..a9c7b3f8 100644 --- a/front/package.json +++ b/front/package.json @@ -22,6 +22,7 @@ "@types/axios": "^0.14.0", "@types/simple-peer": "^9.6.0", "@types/socket.io-client": "^1.4.32", + "generic-type-guard": "^3.2.0", "phaser": "^3.22.0", "queue-typescript": "^1.0.1", "simple-peer": "^9.6.2", diff --git a/front/src/Connection.ts b/front/src/Connection.ts index c4ac92c6..5e51974f 100644 --- a/front/src/Connection.ts +++ b/front/src/Connection.ts @@ -22,6 +22,7 @@ enum EventMessage{ GROUP_CREATE_UPDATE = "group-create-update", GROUP_DELETE = "group-delete", SET_PLAYER_DETAILS = "set-player-details", // Send the name and character to the server (on connect), receive back the id. + ITEM_EVENT = 'item-event', CONNECT_ERROR = "connect_error", } @@ -91,6 +92,18 @@ export interface StartMapInterface { startInstance: string } +export interface ItemEventMessageInterface { + itemId: number, + event: string, + state: unknown, + parameters: unknown +} + +export interface RoomJoinedMessageInterface { + users: MessageUserPositionInterface[] + items: { [itemId: number] : unknown } +} + export class Connection implements Connection { private readonly socket: Socket; private userId: string|null = null; @@ -147,10 +160,10 @@ export class Connection implements Connection { } - public joinARoom(roomId: string, startX: number, startY: number, direction: string, moving: boolean): Promise { - const promise = new Promise((resolve, reject) => { - this.socket.emit(EventMessage.JOIN_ROOM, { roomId, position: {x: startX, y: startY, direction, moving }}, (userPositions: MessageUserPositionInterface[]) => { - resolve(userPositions); + public joinARoom(roomId: string, startX: number, startY: number, direction: string, moving: boolean): Promise { + const promise = new Promise((resolve, reject) => { + this.socket.emit(EventMessage.JOIN_ROOM, { roomId, position: {x: startX, y: startY, direction, moving }}, (roomJoinedMessage: RoomJoinedMessageInterface) => { + resolve(roomJoinedMessage); }); }) return promise; @@ -223,4 +236,17 @@ export class Connection implements Connection { disconnectMessage(callback: (message: WebRtcDisconnectMessageInterface) => void): void { this.socket.on(EventMessage.WEBRTC_DISCONNECT, callback); } + + emitActionableEvent(itemId: number, event: string, state: unknown, parameters: unknown) { + return this.socket.emit(EventMessage.ITEM_EVENT, { + itemId, + event, + state, + parameters + }); + } + + onActionableEvent(callback: (message: ItemEventMessageInterface) => void): void { + this.socket.on(EventMessage.ITEM_EVENT, callback); + } } diff --git a/front/src/Phaser/Game/GameScene.ts b/front/src/Phaser/Game/GameScene.ts index 9ee54058..c7c9e626 100644 --- a/front/src/Phaser/Game/GameScene.ts +++ b/front/src/Phaser/Game/GameScene.ts @@ -3,7 +3,7 @@ import { Connection, GroupCreatedUpdatedMessageInterface, MessageUserJoined, MessageUserMovedInterface, - MessageUserPositionInterface, PointInterface, PositionInterface + MessageUserPositionInterface, PointInterface, PositionInterface, RoomJoinedMessageInterface } from "../../Connection"; import {CurrentGamerInterface, hasMovedEventName, Player} from "../Player/Player"; import { DEBUG_MODE, ZOOM_LEVEL, POSITION_DELAY } from "../../Enum/EnvironmentVariable"; @@ -30,6 +30,7 @@ import FILE_LOAD_ERROR = Phaser.Loader.Events.FILE_LOAD_ERROR; import {FourOFourSceneName} from "../Reconnecting/FourOFourScene"; import {ItemFactoryInterface} from "../Items/ItemFactoryInterface"; import {ActionableItem} from "../Items/ActionableItem"; +import {UserInputManager} from "../UserInput/UserInputManager"; export enum Textures { @@ -91,6 +92,8 @@ export class GameScene extends Phaser.Scene { private connection: Connection; private simplePeer : SimplePeer; private connectionPromise: Promise + private connectionAnswerPromise: Promise; + private connectionAnswerPromiseResolve: (value?: RoomJoinedMessageInterface | PromiseLike) => void; // A promise that will resolve when the "create" method is called (signaling loading is ended) private createPromise: Promise; private createPromiseResolve: (value?: void | PromiseLike) => void; @@ -111,9 +114,10 @@ export class GameScene extends Phaser.Scene { private PositionNextScene: Array> = new Array>(); private startLayerName: string|undefined; - private actionableItems: Array = new Array(); + private actionableItems: Map = new Map(); // The item that can be selected by pressing the space key. private outlinedItem: ActionableItem|null = null; + private userInputManager: UserInputManager; static createFromUrl(mapUrlFile: string, instance: string, key: string|null = null): GameScene { const mapKey = GameScene.getMapKeyByUrl(mapUrlFile); @@ -140,6 +144,9 @@ export class GameScene extends Phaser.Scene { this.createPromise = new Promise((resolve, reject): void => { this.createPromiseResolve = resolve; }) + this.connectionAnswerPromise = new Promise((resolve, reject): void => { + this.connectionAnswerPromiseResolve = resolve; + }) } //hook preload scene @@ -225,6 +232,15 @@ export class GameScene extends Phaser.Scene { this.scene.remove(this.scene.key); }) + connection.onActionableEvent((message => { + const item = this.actionableItems.get(message.itemId); + if (item === undefined) { + console.warn('Received an event about object "'+message.itemId+'" but cannot find this item on the map.'); + return; + } + item.fire(message.event, message.state, message.parameters); + })); + // When connection is performed, let's connect SimplePeer this.simplePeer = new SimplePeer(this.connection); @@ -293,13 +309,19 @@ export class GameScene extends Phaser.Scene { this.load.on('complete', () => { // FIXME: the factory might fail because the resources might not be loaded yet... // We would need to add a loader ended event in addition to the createPromise - this.createPromise.then(() => { + this.createPromise.then(async () => { itemFactory.create(this); + const roomJoinedAnswer = await this.connectionAnswerPromise; + for (const object of objectsOfType) { // TODO: we should pass here a factory to create sprites (maybe?) - const actionableItem = itemFactory.factory(this, object); - this.actionableItems.push(actionableItem); + + // Do we have a state for this object? + const state = roomJoinedAnswer.items[object.id]; + + const actionableItem = itemFactory.factory(this, object, state); + this.actionableItems.set(actionableItem.getId(), actionableItem); } }); }); @@ -414,13 +436,15 @@ export class GameScene extends Phaser.Scene { //initialise list of other player this.MapPlayers = this.physics.add.group({ immovable: true }); + //create input to move + this.userInputManager = new UserInputManager(this); + //notify game manager can to create currentUser in map this.createCurrentPlayer(); //initialise camera this.initCamera(); - // Let's generate the circle for the group delimiter const circleElement = Object.values(this.textures.list).find((object: Texture) => object.key === 'circleSprite'); if(circleElement) { @@ -455,6 +479,11 @@ export class GameScene extends Phaser.Scene { } this.createPromiseResolve(); + + // TODO: use inputmanager instead + this.input.keyboard.on('keyup-SPACE', () => { + this.outlinedItem?.activate(); + }); } private getExitSceneUrl(layer: ITiledMapLayer): string|undefined { @@ -605,7 +634,8 @@ export class GameScene extends Phaser.Scene { this.GameManager.getPlayerName(), this.GameManager.getCharacterSelected(), PlayerAnimationNames.WalkDown, - false + false, + this.userInputManager ); //create collision @@ -614,8 +644,9 @@ export class GameScene extends Phaser.Scene { //join room this.connectionPromise.then((connection: Connection) => { - connection.joinARoom(this.RoomId, this.startX, this.startY, PlayerAnimationNames.WalkDown, false).then((userPositions: MessageUserPositionInterface[]) => { - this.initUsersPosition(userPositions); + connection.joinARoom(this.RoomId, this.startX, this.startY, PlayerAnimationNames.WalkDown, false).then((roomJoinedMessage: RoomJoinedMessageInterface) => { + this.initUsersPosition(roomJoinedMessage.users); + this.connectionAnswerPromiseResolve(roomJoinedMessage); }); //listen event to share position of user @@ -676,7 +707,7 @@ export class GameScene extends Phaser.Scene { let shortestDistance: number = Infinity; let selectedItem: ActionableItem|null = null; - for (const item of this.actionableItems) { + for (const item of this.actionableItems.values()) { const distance = item.actionableDistance(x, y); if (distance !== null && distance < shortestDistance) { shortestDistance = distance; @@ -766,10 +797,7 @@ export class GameScene extends Phaser.Scene { } } - /** - * - */ - checkToExit(): {key: string, hash: string} | null { + private checkToExit(): {key: string, hash: string} | null { const x = Math.floor(this.CurrentPlayer.x / 32); const y = Math.floor(this.CurrentPlayer.y / 32); @@ -947,4 +975,16 @@ export class GameScene extends Phaser.Scene { const endPos = mapUrlStart.indexOf(".json"); return mapUrlStart.substring(startPos, endPos); } + + /** + * Sends to the server an event emitted by one of the ActionableItems. + * + * @param itemId + * @param eventName + * @param state + * @param parameters + */ + emitActionableEvent(itemId: number, eventName: string, state: unknown, parameters: unknown) { + this.connection.emitActionableEvent(itemId, eventName, state, parameters); + } } diff --git a/front/src/Phaser/Items/ActionableItem.ts b/front/src/Phaser/Items/ActionableItem.ts index 01e85c64..36b14921 100644 --- a/front/src/Phaser/Items/ActionableItem.ts +++ b/front/src/Phaser/Items/ActionableItem.ts @@ -4,15 +4,23 @@ */ import Sprite = Phaser.GameObjects.Sprite; import {OutlinePipeline} from "../Shaders/OutlinePipeline"; +import {GameScene} from "../Game/GameScene"; + +type EventCallback = (state: unknown, parameters: unknown) => void; export class ActionableItem { private readonly activationRadiusSquared : number; private isSelectable: boolean = false; + private callbacks: Map> = new Map>(); - public constructor(private sprite: Sprite, private activationRadius: number) { + public constructor(private id: number, private sprite: Sprite, private eventHandler: GameScene, private activationRadius: number, private onActivateCallback: (item: ActionableItem) => void) { this.activationRadiusSquared = activationRadius * activationRadius; } + public getId(): number { + return this.id; + } + /** * Returns the square of the distance to the object center IF we are in item action range * OR null if we are out of range. @@ -54,7 +62,31 @@ export class ActionableItem { * Triggered when the "space" key is pressed and the object is in range of being activated. */ public activate(): void { + this.onActivateCallback(this); + } + public emit(eventName: string, state: unknown, parameters: unknown = null): void { + this.eventHandler.emitActionableEvent(this.id, eventName, state, parameters); + // Also, execute the action locally. + this.fire(eventName, state, parameters); + } + + public on(eventName: string, callback: EventCallback): void { + let callbacksArray: Array|undefined = this.callbacks.get(eventName); + if (callbacksArray === undefined) { + callbacksArray = new Array(); + this.callbacks.set(eventName, callbacksArray); + } + callbacksArray.push(callback); + } + + public fire(eventName: string, state: unknown, parameters: unknown): void { + const callbacksArray = this.callbacks.get(eventName); + if (callbacksArray === undefined) { + return; + } + for (const callback of callbacksArray) { + callback(state, parameters); + } } } - diff --git a/front/src/Phaser/Items/Computer/computer.ts b/front/src/Phaser/Items/Computer/computer.ts index b979ebf6..fdc7a358 100644 --- a/front/src/Phaser/Items/Computer/computer.ts +++ b/front/src/Phaser/Items/Computer/computer.ts @@ -5,20 +5,82 @@ import {ITiledMapObject} from "../../Map/ITiledMap"; import {ItemFactoryInterface} from "../ItemFactoryInterface"; import {GameScene} from "../../Game/GameScene"; import {ActionableItem} from "../ActionableItem"; +import * as tg from "generic-type-guard"; + +const isComputerState = + new tg.IsInterface().withProperties({ + status: tg.isString, + }).get(); +type ComputerState = tg.GuardedType; + +let state: ComputerState = { + 'status': 'off' +}; export default { preload: (loader: Phaser.Loader.LoaderPlugin): void => { loader.atlas('computer', '/resources/items/computer/computer.png', '/resources/items/computer/computer_atlas.json'); }, create: (scene: GameScene): void => { - + scene.anims.create({ + key: 'computer_off', + frames: [ + { + key: 'computer', + frame: 'computer_off' + } + ], + frameRate: 10, + repeat: -1 + }); + scene.anims.create({ + key: 'computer_run', + frames: [ + { + key: 'computer', + frame: 'computer_on1' + }, + { + key: 'computer', + frame: 'computer_on2' + } + ], + frameRate: 5, + repeat: -1 + }); }, - factory: (scene: GameScene, object: ITiledMapObject): ActionableItem => { - // Idée: ESSAYER WebPack? https://paultavares.wordpress.com/2018/07/02/webpack-how-to-generate-an-es-module-bundle/ - const foo = new Sprite(scene, object.x, object.y, 'computer'); - scene.add.existing(foo); + factory: (scene: GameScene, object: ITiledMapObject, initState: unknown): ActionableItem => { + if (initState !== undefined) { + if (!isComputerState(initState)) { + throw new Error('Invalid state received for computer object'); + } + state = initState; + } - return new ActionableItem(foo, 32); + // Idée: ESSAYER WebPack? https://paultavares.wordpress.com/2018/07/02/webpack-how-to-generate-an-es-module-bundle/ + const computer = new Sprite(scene, object.x, object.y, 'computer'); + scene.add.existing(computer); + if (state.status === 'on') { + computer.anims.play('computer_run'); + } + + const item = new ActionableItem(object.id, computer, scene, 32, (item: ActionableItem) => { + if (state.status === 'off') { + state.status = 'on'; + item.emit('TURN_ON', state); + } else { + state.status = 'off'; + item.emit('TURN_OFF', state); + } + }); + item.on('TURN_ON', () => { + computer.anims.play('computer_run'); + }); + item.on('TURN_OFF', () => { + computer.anims.play('computer_off'); + }); + + return item; //scene.add.sprite(object.x, object.y, 'computer'); } } as ItemFactoryInterface; diff --git a/front/src/Phaser/Items/ItemFactoryInterface.ts b/front/src/Phaser/Items/ItemFactoryInterface.ts index 0f88f76b..e3e52517 100644 --- a/front/src/Phaser/Items/ItemFactoryInterface.ts +++ b/front/src/Phaser/Items/ItemFactoryInterface.ts @@ -6,5 +6,5 @@ import {ActionableItem} from "./ActionableItem"; export interface ItemFactoryInterface { preload: (loader: LoaderPlugin) => void; create: (scene: GameScene) => void; - factory: (scene: GameScene, object: ITiledMapObject) => ActionableItem; + factory: (scene: GameScene, object: ITiledMapObject, state: unknown) => ActionableItem; } diff --git a/front/src/Phaser/Player/Player.ts b/front/src/Phaser/Player/Player.ts index 64adc246..1ddd8b87 100644 --- a/front/src/Phaser/Player/Player.ts +++ b/front/src/Phaser/Player/Player.ts @@ -13,9 +13,8 @@ export interface CurrentGamerInterface extends Character{ } export class Player extends Character implements CurrentGamerInterface { - userInputManager: UserInputManager; - previousDirection: string; - wasMoving: boolean; + private previousDirection: string; + private wasMoving: boolean; constructor( Scene: GameScene, @@ -24,13 +23,11 @@ export class Player extends Character implements CurrentGamerInterface { name: string, PlayerTexture: string, direction: string, - moving: boolean + moving: boolean, + private userInputManager: UserInputManager ) { super(Scene, x, y, PlayerTexture, name, direction, moving, 1); - //create input to move - this.userInputManager = new UserInputManager(Scene); - //the current player model should be push away by other players to prevent conflict this.setImmovable(false); } diff --git a/front/yarn.lock b/front/yarn.lock index b943ebf0..ae7b5558 100644 --- a/front/yarn.lock +++ b/front/yarn.lock @@ -1904,6 +1904,11 @@ functional-red-black-tree@^1.0.1: resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= +generic-type-guard@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/generic-type-guard/-/generic-type-guard-3.2.0.tgz#1fb136f934730c776486526b8a21fe96b067e691" + integrity sha512-EkkrXYbOtJ3VPB+SOrU7EhwY65rZErItGtBg5wAqywaj07BOubwOZqMYaxOWekJ9akioGqXIsw1fYk3wwbWsDQ== + get-browser-rtc@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/get-browser-rtc/-/get-browser-rtc-1.0.2.tgz#bbcd40c8451a7ed4ef5c373b8169a409dd1d11d9" From 2d818ec79d4c5d2e4cb07029a1853d7be8743523 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20N=C3=A9grier?= Date: Mon, 27 Jul 2020 22:48:04 +0200 Subject: [PATCH 067/313] Fixing broken Jasmine test due to module config --- docker-compose.yaml | 2 +- front/Dockerfile | 2 +- front/tsconfig.json | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/docker-compose.yaml b/docker-compose.yaml index 6d9380b8..d691f204 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -19,7 +19,7 @@ services: - /var/run/docker.sock:/var/run/docker.sock front: - image: thecodingmachine/nodejs:12 + image: thecodingmachine/nodejs:14 environment: DEBUG_MODE: "$DEBUG_MODE" HOST: "0.0.0.0" diff --git a/front/Dockerfile b/front/Dockerfile index ee15270e..c5c605a8 100644 --- a/front/Dockerfile +++ b/front/Dockerfile @@ -1,5 +1,5 @@ # we are rebuilding on each deploy to cope with the API_URL environment URL -FROM thecodingmachine/nodejs:12-apache +FROM thecodingmachine/nodejs:14-apache COPY --chown=docker:docker . . RUN yarn install diff --git a/front/tsconfig.json b/front/tsconfig.json index 9a140744..b0eac1c0 100644 --- a/front/tsconfig.json +++ b/front/tsconfig.json @@ -3,7 +3,7 @@ "outDir": "./dist/", "sourceMap": true, "moduleResolution": "node", - "module": "ESNext", + "module": "CommonJS", "target": "ES2015", "downlevelIteration": true, "jsx": "react", From 21d2a7939be5fe74f6d622847bdd1beda6769b85 Mon Sep 17 00:00:00 2001 From: David Perez Date: Tue, 28 Jul 2020 11:06:08 +0200 Subject: [PATCH 068/313] custome characters --- front/src/Phaser/Entity/body_character.ts | 300 ++++++++++++++++++++++ front/src/Phaser/Login/CustomizeScene.ts | 283 ++++++++++++++++++++ front/src/index.ts | 1 + front/webpack.config.js | 3 +- 4 files changed, 586 insertions(+), 1 deletion(-) create mode 100644 front/src/Phaser/Entity/body_character.ts create mode 100644 front/src/Phaser/Login/CustomizeScene.ts diff --git a/front/src/Phaser/Entity/body_character.ts b/front/src/Phaser/Entity/body_character.ts new file mode 100644 index 00000000..f56de7c1 --- /dev/null +++ b/front/src/Phaser/Entity/body_character.ts @@ -0,0 +1,300 @@ +import {Character} from "./character_animation"; + +export interface BodyResourceDescriptionInterface { + name: string, + img: string +} + +export const COLOR_RESOURCES: Array = [ + {name:"color_1", img: "resources/customisation/character_color/character_color0.png"}, + {name:"color_2", img: "resources/customisation/character_color/character_color1.png"}, + {name:"color_3", img: "resources/customisation/character_color/character_color2.png"}, + {name:"color_4", img: "resources/customisation/character_color/character_color3.png"}, + {name:"color_5", img: "resources/customisation/character_color/character_color4.png"}, + {name:"color_6", img: "resources/customisation/character_color/character_color5.png"}, + {name:"color_7", img: "resources/customisation/character_color/character_color6.png"}, + {name:"color_8", img: "resources/customisation/character_color/character_color7.png"}, + {name:"color_9", img: "resources/customisation/character_color/character_color8.png"}, + {name:"color_10",img: "resources/customisation/character_color/character_color9.png"}, + {name:"color_11",img: "resources/customisation/character_color/character_color10.png"}, + {name:"color_12",img: "resources/customisation/character_color/character_color11.png"}, + {name:"color_13",img: "resources/customisation/character_color/character_color12.png"}, + {name:"color_14",img: "resources/customisation/character_color/character_color13.png"}, + {name:"color_15",img: "resources/customisation/character_color/character_color14.png"}, + {name:"color_16",img: "resources/customisation/character_color/character_color15.png"}, + {name:"color_17",img: "resources/customisation/character_color/character_color16.png"}, + {name:"color_18",img: "resources/customisation/character_color/character_color17.png"}, + {name:"color_19",img: "resources/customisation/character_color/character_color18.png"}, + {name:"color_20",img: "resources/customisation/character_color/character_color19.png"}, + {name:"color_21",img: "resources/customisation/character_color/character_color20.png"}, + {name:"color_22",img: "resources/customisation/character_color/character_color21.png"}, + {name:"color_23",img: "resources/customisation/character_color/character_color22.png"}, + {name:"color_24",img: "resources/customisation/character_color/character_color23.png"}, + {name:"color_25",img: "resources/customisation/character_color/character_color24.png"}, + {name:"color_26",img: "resources/customisation/character_color/character_color25.png"}, + {name:"color_27",img: "resources/customisation/character_color/character_color26.png"}, + {name:"color_28",img: "resources/customisation/character_color/character_color27.png"}, + {name:"color_29",img: "resources/customisation/character_color/character_color28.png"}, + {name:"color_30",img: "resources/customisation/character_color/character_color29.png"}, + {name:"color_31",img: "resources/customisation/character_color/character_color30.png"}, + {name:"color_32",img: "resources/customisation/character_color/character_color31.png"}, + {name:"color_33",img: "resources/customisation/character_color/character_color32.png"} +]; + +export const EYES_RESOURCES: Array = [ + {name: "eyes_1", img: "resources/customisation/character_eyes/character_eyes1.png"}, + {name: "eyes_2", img: "resources/customisation/character_eyes/character_eyes2.png"}, + {name: "eyes_3", img: "resources/customisation/character_eyes/character_eyes3.png"}, + {name: "eyes_4", img: "resources/customisation/character_eyes/character_eyes4.png"}, + {name: "eyes_5", img: "resources/customisation/character_eyes/character_eyes5.png"}, + {name: "eyes_6", img: "resources/customisation/character_eyes/character_eyes6.png"}, + {name: "eyes_7", img: "resources/customisation/character_eyes/character_eyes7.png"}, + {name: "eyes_8", img: "resources/customisation/character_eyes/character_eyes8.png"}, + {name: "eyes_9", img: "resources/customisation/character_eyes/character_eyes9.png"}, + {name: "eyes_10", img: "resources/customisation/character_eyes/character_eyes10.png"}, + {name: "eyes_11", img: "resources/customisation/character_eyes/character_eyes11.png"}, + {name: "eyes_12", img: "resources/customisation/character_eyes/character_eyes12.png"}, + {name: "eyes_13", img: "resources/customisation/character_eyes/character_eyes13.png"}, + {name: "eyes_14", img: "resources/customisation/character_eyes/character_eyes14.png"}, + {name: "eyes_15", img: "resources/customisation/character_eyes/character_eyes15.png"}, + {name: "eyes_16", img: "resources/customisation/character_eyes/character_eyes16.png"}, + {name: "eyes_17", img: "resources/customisation/character_eyes/character_eyes17.png"}, + {name: "eyes_18", img: "resources/customisation/character_eyes/character_eyes18.png"}, + {name: "eyes_19", img: "resources/customisation/character_eyes/character_eyes19.png"}, + {name: "eyes_20", img: "resources/customisation/character_eyes/character_eyes20.png"}, + {name: "eyes_21", img: "resources/customisation/character_eyes/character_eyes21.png"}, + {name: "eyes_22", img: "resources/customisation/character_eyes/character_eyes22.png"}, + {name: "eyes_23", img: "resources/customisation/character_eyes/character_eyes23.png"}, + {name: "eyes_24", img: "resources/customisation/character_eyes/character_eyes24.png"}, + {name: "eyes_25", img: "resources/customisation/character_eyes/character_eyes25.png"}, + {name: "eyes_26", img: "resources/customisation/character_eyes/character_eyes26.png"}, + {name: "eyes_27", img: "resources/customisation/character_eyes/character_eyes27.png"}, + {name: "eyes_28", img: "resources/customisation/character_eyes/character_eyes28.png"}, + {name: "eyes_29", img: "resources/customisation/character_eyes/character_eyes29.png"}, + {name: "eyes_30", img: "resources/customisation/character_eyes/character_eyes30.png"} + +] + +export const HAIR_RESOURCES: Array = [ + {name:"hair_1", img: "resources/customisation/character_hairs/character_hairs0.png"}, + {name:"hair_2", img: "resources/customisation/character_hairs/character_hairs1.png"}, + {name:"hair_3", img: "resources/customisation/character_hairs/character_hairs2.png"}, + {name:"hair_4", img: "resources/customisation/character_hairs/character_hairs3.png"}, + {name:"hair_5", img: "resources/customisation/character_hairs/character_hairs4.png"}, + {name:"hair_6", img: "resources/customisation/character_hairs/character_hairs5.png"}, + {name:"hair_7", img: "resources/customisation/character_hairs/character_hairs6.png"}, + {name:"hair_8", img: "resources/customisation/character_hairs/character_hairs7.png"}, + {name:"hair_9", img: "resources/customisation/character_hairs/character_hairs8.png"}, + {name:"hair_10",img: "resources/customisation/character_hairs/character_hairs9.png"}, + {name:"hair_11",img: "resources/customisation/character_hairs/character_hairs10.png"}, + {name:"hair_12",img: "resources/customisation/character_hairs/character_hairs11.png"}, + {name:"hair_13",img: "resources/customisation/character_hairs/character_hairs12.png"}, + {name:"hair_14",img: "resources/customisation/character_hairs/character_hairs13.png"}, + {name:"hair_15",img: "resources/customisation/character_hairs/character_hairs14.png"}, + {name:"hair_16",img: "resources/customisation/character_hairs/character_hairs15.png"}, + {name:"hair_17",img: "resources/customisation/character_hairs/character_hairs16.png"}, + {name:"hair_18",img: "resources/customisation/character_hairs/character_hairs17.png"}, + {name:"hair_19",img: "resources/customisation/character_hairs/character_hairs18.png"}, + {name:"hair_20",img: "resources/customisation/character_hairs/character_hairs19.png"}, + {name:"hair_21",img: "resources/customisation/character_hairs/character_hairs20.png"}, + {name:"hair_22",img: "resources/customisation/character_hairs/character_hairs21.png"}, + {name:"hair_23",img: "resources/customisation/character_hairs/character_hairs22.png"}, + {name:"hair_24",img: "resources/customisation/character_hairs/character_hairs23.png"}, + {name:"hair_25",img: "resources/customisation/character_hairs/character_hairs24.png"}, + {name:"hair_26",img: "resources/customisation/character_hairs/character_hairs25.png"}, + {name:"hair_27",img: "resources/customisation/character_hairs/character_hairs26.png"}, + {name:"hair_28",img: "resources/customisation/character_hairs/character_hairs27.png"}, + {name:"hair_29",img: "resources/customisation/character_hairs/character_hairs28.png"}, + {name:"hair_30",img: "resources/customisation/character_hairs/character_hairs29.png"}, + {name:"hair_31",img: "resources/customisation/character_hairs/character_hairs30.png"}, + {name:"hair_32",img: "resources/customisation/character_hairs/character_hairs31.png"}, + {name:"hair_33",img: "resources/customisation/character_hairs/character_hairs32.png"}, + {name:"hair_34",img: "resources/customisation/character_hairs/character_hairs33.png"}, + {name:"hair_35",img: "resources/customisation/character_hairs/character_hairs34.png"}, + {name:"hair_36",img: "resources/customisation/character_hairs/character_hairs35.png"}, + {name:"hair_37",img: "resources/customisation/character_hairs/character_hairs36.png"}, + {name:"hair_38",img: "resources/customisation/character_hairs/character_hairs37.png"}, + {name:"hair_39",img: "resources/customisation/character_hairs/character_hairs38.png"}, + {name:"hair_40",img: "resources/customisation/character_hairs/character_hairs39.png"}, + {name:"hair_41",img: "resources/customisation/character_hairs/character_hairs40.png"}, + {name:"hair_42",img: "resources/customisation/character_hairs/character_hairs41.png"}, + {name:"hair_43",img: "resources/customisation/character_hairs/character_hairs42.png"}, + {name:"hair_44",img: "resources/customisation/character_hairs/character_hairs43.png"}, + {name:"hair_45",img: "resources/customisation/character_hairs/character_hairs44.png"}, + {name:"hair_46",img: "resources/customisation/character_hairs/character_hairs45.png"}, + {name:"hair_47",img: "resources/customisation/character_hairs/character_hairs46.png"}, + {name:"hair_48",img: "resources/customisation/character_hairs/character_hairs47.png"}, + {name:"hair_49",img: "resources/customisation/character_hairs/character_hairs48.png"}, + {name:"hair_50",img: "resources/customisation/character_hairs/character_hairs49.png"}, + {name:"hair_51",img: "resources/customisation/character_hairs/character_hairs50.png"}, + {name:"hair_52",img: "resources/customisation/character_hairs/character_hairs51.png"}, + {name:"hair_53",img: "resources/customisation/character_hairs/character_hairs52.png"}, + {name:"hair_54",img: "resources/customisation/character_hairs/character_hairs53.png"}, + {name:"hair_55",img: "resources/customisation/character_hairs/character_hairs54.png"}, + {name:"hair_56",img: "resources/customisation/character_hairs/character_hairs55.png"}, + {name:"hair_57",img: "resources/customisation/character_hairs/character_hairs56.png"}, + {name:"hair_58",img: "resources/customisation/character_hairs/character_hairs57.png"}, + {name:"hair_59",img: "resources/customisation/character_hairs/character_hairs58.png"}, + {name:"hair_60",img: "resources/customisation/character_hairs/character_hairs59.png"}, + {name:"hair_61",img: "resources/customisation/character_hairs/character_hairs60.png"}, + {name:"hair_62",img: "resources/customisation/character_hairs/character_hairs61.png"}, + {name:"hair_63",img: "resources/customisation/character_hairs/character_hairs62.png"}, + {name:"hair_64",img: "resources/customisation/character_hairs/character_hairs63.png"}, + {name:"hair_65",img: "resources/customisation/character_hairs/character_hairs64.png"}, + {name:"hair_66",img: "resources/customisation/character_hairs/character_hairs65.png"}, + {name:"hair_67",img: "resources/customisation/character_hairs/character_hairs66.png"}, + {name:"hair_68",img: "resources/customisation/character_hairs/character_hairs67.png"}, + {name:"hair_69",img: "resources/customisation/character_hairs/character_hairs68.png"}, + {name:"hair_70",img: "resources/customisation/character_hairs/character_hairs69.png"}, + {name:"hair_71",img: "resources/customisation/character_hairs/character_hairs70.png"}, + {name:"hair_72",img: "resources/customisation/character_hairs/character_hairs71.png"}, + {name:"hair_73",img: "resources/customisation/character_hairs/character_hairs72.png"}, + {name:"hair_74",img: "resources/customisation/character_hairs/character_hairs73.png"} +]; + + +export const CLOTHES_RESOURCES: Array = [ + {name:"clothes_1", img: "resources/customisation/character_clothes/character_clothes0.png"}, + {name:"clothes_2", img: "resources/customisation/character_clothes/character_clothes1.png"}, + {name:"clothes_3", img: "resources/customisation/character_clothes/character_clothes2.png"}, + {name:"clothes_4", img: "resources/customisation/character_clothes/character_clothes3.png"}, + {name:"clothes_5", img: "resources/customisation/character_clothes/character_clothes4.png"}, + {name:"clothes_6", img: "resources/customisation/character_clothes/character_clothes5.png"}, + {name:"clothes_7", img: "resources/customisation/character_clothes/character_clothes6.png"}, + {name:"clothes_8", img: "resources/customisation/character_clothes/character_clothes7.png"}, + {name:"clothes_9", img: "resources/customisation/character_clothes/character_clothes8.png"}, + {name:"clothes_10",img: "resources/customisation/character_clothes/character_clothes9.png"}, + {name:"clothes_11",img: "resources/customisation/character_clothes/character_clothes10.png"}, + {name:"clothes_12",img: "resources/customisation/character_clothes/character_clothes11.png"}, + {name:"clothes_13",img: "resources/customisation/character_clothes/character_clothes12.png"}, + {name:"clothes_14",img: "resources/customisation/character_clothes/character_clothes13.png"}, + {name:"clothes_15",img: "resources/customisation/character_clothes/character_clothes14.png"}, + {name:"clothes_16",img: "resources/customisation/character_clothes/character_clothes15.png"}, + {name:"clothes_17",img: "resources/customisation/character_clothes/character_clothes16.png"}, + {name:"clothes_18",img: "resources/customisation/character_clothes/character_clothes17.png"}, + {name:"clothes_19",img: "resources/customisation/character_clothes/character_clothes18.png"}, + {name:"clothes_20",img: "resources/customisation/character_clothes/character_clothes19.png"}, + {name:"clothes_21",img: "resources/customisation/character_clothes/character_clothes20.png"}, + {name:"clothes_22",img: "resources/customisation/character_clothes/character_clothes21.png"}, + {name:"clothes_23",img: "resources/customisation/character_clothes/character_clothes22.png"}, + {name:"clothes_24",img: "resources/customisation/character_clothes/character_clothes23.png"}, + {name:"clothes_25",img: "resources/customisation/character_clothes/character_clothes24.png"}, + {name:"clothes_26",img: "resources/customisation/character_clothes/character_clothes25.png"}, + {name:"clothes_27",img: "resources/customisation/character_clothes/character_clothes26.png"}, + {name:"clothes_28",img: "resources/customisation/character_clothes/character_clothes27.png"}, + {name:"clothes_29",img: "resources/customisation/character_clothes/character_clothes28.png"}, + {name:"clothes_30",img: "resources/customisation/character_clothes/character_clothes29.png"}, + {name:"clothes_31",img: "resources/customisation/character_clothes/character_clothes30.png"}, + {name:"clothes_32",img: "resources/customisation/character_clothes/character_clothes31.png"}, + {name:"clothes_33",img: "resources/customisation/character_clothes/character_clothes32.png"}, + {name:"clothes_34",img: "resources/customisation/character_clothes/character_clothes33.png"}, + {name:"clothes_35",img: "resources/customisation/character_clothes/character_clothes34.png"}, + {name:"clothes_36",img: "resources/customisation/character_clothes/character_clothes35.png"}, + {name:"clothes_37",img: "resources/customisation/character_clothes/character_clothes36.png"}, + {name:"clothes_38",img: "resources/customisation/character_clothes/character_clothes37.png"}, + {name:"clothes_39",img: "resources/customisation/character_clothes/character_clothes38.png"}, + {name:"clothes_40",img: "resources/customisation/character_clothes/character_clothes39.png"}, + {name:"clothes_41",img: "resources/customisation/character_clothes/character_clothes40.png"}, + {name:"clothes_42",img: "resources/customisation/character_clothes/character_clothes41.png"}, + {name:"clothes_43",img: "resources/customisation/character_clothes/character_clothes42.png"}, + {name:"clothes_44",img: "resources/customisation/character_clothes/character_clothes43.png"}, + {name:"clothes_45",img: "resources/customisation/character_clothes/character_clothes44.png"}, + {name:"clothes_46",img: "resources/customisation/character_clothes/character_clothes45.png"}, + {name:"clothes_47",img: "resources/customisation/character_clothes/character_clothes46.png"}, + {name:"clothes_48",img: "resources/customisation/character_clothes/character_clothes47.png"}, + {name:"clothes_49",img: "resources/customisation/character_clothes/character_clothes48.png"}, + {name:"clothes_50",img: "resources/customisation/character_clothes/character_clothes49.png"}, + {name:"clothes_51",img: "resources/customisation/character_clothes/character_clothes50.png"}, + {name:"clothes_52",img: "resources/customisation/character_clothes/character_clothes51.png"}, + {name:"clothes_53",img: "resources/customisation/character_clothes/character_clothes52.png"}, + {name:"clothes_54",img: "resources/customisation/character_clothes/character_clothes53.png"}, + {name:"clothes_55",img: "resources/customisation/character_clothes/character_clothes54.png"}, + {name:"clothes_56",img: "resources/customisation/character_clothes/character_clothes55.png"}, + {name:"clothes_57",img: "resources/customisation/character_clothes/character_clothes56.png"}, + {name:"clothes_58",img: "resources/customisation/character_clothes/character_clothes57.png"}, + {name:"clothes_59",img: "resources/customisation/character_clothes/character_clothes58.png"}, + {name:"clothes_60",img: "resources/customisation/character_clothes/character_clothes59.png"}, + {name:"clothes_61",img: "resources/customisation/character_clothes/character_clothes60.png"}, + {name:"clothes_62",img: "resources/customisation/character_clothes/character_clothes61.png"}, + {name:"clothes_63",img: "resources/customisation/character_clothes/character_clothes62.png"}, + {name:"clothes_64",img: "resources/customisation/character_clothes/character_clothes63.png"}, + {name:"clothes_65",img: "resources/customisation/character_clothes/character_clothes64.png"}, + {name:"clothes_66",img: "resources/customisation/character_clothes/character_clothes65.png"}, + {name:"clothes_67",img: "resources/customisation/character_clothes/character_clothes66.png"}, + {name:"clothes_68",img: "resources/customisation/character_clothes/character_clothes67.png"}, + {name:"clothes_69",img: "resources/customisation/character_clothes/character_clothes68.png"}, + {name:"clothes_70",img: "resources/customisation/character_clothes/character_clothes69.png"}, +]; + +export const HATS_RESOURCES: Array = [ + {name: "hats_1", img: "resources/customisation/character_hats/character_hats1.png"}, + {name: "hats_2", img: "resources/customisation/character_hats/character_hats2.png"}, + {name: "hats_3", img: "resources/customisation/character_hats/character_hats3.png"}, + {name: "hats_4", img: "resources/customisation/character_hats/character_hats4.png"}, + {name: "hats_5", img: "resources/customisation/character_hats/character_hats5.png"}, + {name: "hats_6", img: "resources/customisation/character_hats/character_hats6.png"}, + {name: "hats_7", img: "resources/customisation/character_hats/character_hats7.png"}, + {name: "hats_8", img: "resources/customisation/character_hats/character_hats8.png"}, + {name: "hats_9", img: "resources/customisation/character_hats/character_hats9.png"}, + {name: "hats_10", img: "resources/customisation/character_hats/character_hats10.png"}, + {name: "hats_11", img: "resources/customisation/character_hats/character_hats11.png"}, + {name: "hats_12", img: "resources/customisation/character_hats/character_hats12.png"}, + {name: "hats_13", img: "resources/customisation/character_hats/character_hats13.png"}, + {name: "hats_14", img: "resources/customisation/character_hats/character_hats14.png"}, + {name: "hats_15", img: "resources/customisation/character_hats/character_hats15.png"}, + {name: "hats_16", img: "resources/customisation/character_hats/character_hats16.png"}, + {name: "hats_17", img: "resources/customisation/character_hats/character_hats17.png"}, + {name: "hats_18", img: "resources/customisation/character_hats/character_hats18.png"}, + {name: "hats_19", img: "resources/customisation/character_hats/character_hats19.png"}, + {name: "hats_20", img: "resources/customisation/character_hats/character_hats20.png"}, + {name: "hats_21", img: "resources/customisation/character_hats/character_hats21.png"}, + {name: "hats_22", img: "resources/customisation/character_hats/character_hats22.png"}, + {name: "hats_23", img: "resources/customisation/character_hats/character_hats23.png"}, + {name: "hats_24", img: "resources/customisation/character_hats/character_hats24.png"}, + {name: "hats_25", img: "resources/customisation/character_hats/character_hats25.png"}, + {name: "hats_26", img: "resources/customisation/character_hats/character_hats26.png"} +]; + +export const ACCESSORIES_RESOURCES: Array = [ + {name: "accessory_1", img: "resources/customisation/character_accessories/character_accessories1.png"}, + {name: "accessory_2", img: "resources/customisation/character_accessories/character_accessories2.png"}, + {name: "accessory_3", img: "resources/customisation/character_accessories/character_accessories3.png"}, + {name: "accessory_4", img: "resources/customisation/character_accessories/character_accessories4.png"}, + {name: "accessory_5", img: "resources/customisation/character_accessories/character_accessories5.png"}, + {name: "accessory_6", img: "resources/customisation/character_accessories/character_accessories6.png"}, + {name: "accessory_7", img: "resources/customisation/character_accessories/character_accessories7.png"}, + {name: "accessory_8", img: "resources/customisation/character_accessories/character_accessories8.png"}, + {name: "accessory_9", img: "resources/customisation/character_accessories/character_accessories9.png"}, + {name: "accessory_10", img: "resources/customisation/character_accessories/character_accessories10.png"}, + {name: "accessory_11", img: "resources/customisation/character_accessories/character_accessories11.png"}, + {name: "accessory_12", img: "resources/customisation/character_accessories/character_accessories12.png"}, + {name: "accessory_13", img: "resources/customisation/character_accessories/character_accessories13.png"}, + {name: "accessory_14", img: "resources/customisation/character_accessories/character_accessories14.png"}, + {name: "accessory_15", img: "resources/customisation/character_accessories/character_accessories15.png"}, + {name: "accessory_16", img: "resources/customisation/character_accessories/character_accessories16.png"}, + {name: "accessory_17", img: "resources/customisation/character_accessories/character_accessories17.png"}, + {name: "accessory_18", img: "resources/customisation/character_accessories/character_accessories18.png"}, + {name: "accessory_19", img: "resources/customisation/character_accessories/character_accessories19.png"}, + {name: "accessory_20", img: "resources/customisation/character_accessories/character_accessories20.png"}, + {name: "accessory_21", img: "resources/customisation/character_accessories/character_accessories21.png"}, + {name: "accessory_22", img: "resources/customisation/character_accessories/character_accessories22.png"}, + {name: "accessory_23", img: "resources/customisation/character_accessories/character_accessories23.png"}, + {name: "accessory_24", img: "resources/customisation/character_accessories/character_accessories24.png"}, + {name: "accessory_25", img: "resources/customisation/character_accessories/character_accessories25.png"}, + {name: "accessory_26", img: "resources/customisation/character_accessories/character_accessories26.png"}, + {name: "accessory_27", img: "resources/customisation/character_accessories/character_accessories27.png"}, + {name: "accessory_28", img: "resources/customisation/character_accessories/character_accessories28.png"}, + {name: "accessory_29", img: "resources/customisation/character_accessories/character_accessories29.png"}, + {name: "accessory_30", img: "resources/customisation/character_accessories/character_accessories30.png"}, + {name: "accessory_31", img: "resources/customisation/character_accessories/character_accessories31.png"}, + {name: "accessory_32", img: "resources/customisation/character_accessories/character_accessories32.png"} +]; + +export const LAYERS: Array> = [ + COLOR_RESOURCES, + EYES_RESOURCES, + HAIR_RESOURCES, + CLOTHES_RESOURCES, + HATS_RESOURCES, + ACCESSORIES_RESOURCES +]; diff --git a/front/src/Phaser/Login/CustomizeScene.ts b/front/src/Phaser/Login/CustomizeScene.ts new file mode 100644 index 00000000..b28d11d7 --- /dev/null +++ b/front/src/Phaser/Login/CustomizeScene.ts @@ -0,0 +1,283 @@ +import {EnableCameraSceneName} from "./EnableCameraScene"; +import {TextField} from "../Components/TextField"; +import Image = Phaser.GameObjects.Image; +import Rectangle = Phaser.GameObjects.Rectangle; +import {LAYERS} from "../Entity/body_character"; +import Sprite = Phaser.GameObjects.Sprite; +import Container = Phaser.GameObjects.Container; + +export const CustomizeSceneName = "CustomizeScene"; + +enum CustomizeTextures{ + icon = "icon", + arrowRight = "arrow_right", + mainFont = "main_font", + arrowUp = "arrow_up", +} + +export interface CustomizeSceneInitDataInterface { + name: string +} + +export class CustomizeScene extends Phaser.Scene { + + private textField: TextField; + private enterField: TextField; + + private arrowRight: Image; + private arrowLeft: Image; + + private arrowDown: Image; + private arrowUp: Image; + + private Rectangle: Rectangle; + + private logo: Image; + + private loginName: String; + + private selectedLayers: Array = [0]; + private containersRow: Array> = new Array>(); + private activeRow = 0; + + private repositionCallback: (this: Window, ev: UIEvent) => void; + + constructor() { + super({ + key: CustomizeSceneName + }); + } + + init({name}: CustomizeSceneInitDataInterface) { + this.loginName = name; + } + + preload() { + this.load.image(CustomizeTextures.arrowRight, "resources/objects/arrow_right.png"); + this.load.image(CustomizeTextures.icon, "resources/logos/tcm_full.png"); + this.load.image(CustomizeTextures.arrowUp, "resources/objects/arrow_up.png"); + this.load.bitmapFont(CustomizeTextures.mainFont, 'resources/fonts/arcade.png', 'resources/fonts/arcade.xml'); + + //load all the png files + for (let j = 0; j < LAYERS.length; j++) { + for (let i = 0; i < LAYERS[j].length; i++) { + this.load.spritesheet( + LAYERS[j][i].name, + LAYERS[j][i].img, + {frameWidth: 32, frameHeight: 32} + ) + } + } + } + + create() { + this.textField = new TextField(this, this.game.renderer.width / 2, 30, 'Customize your own Avatar!'); + this.textField.setOrigin(0.5).setCenterAlign(); + this.textField.setVisible(true); + + this.enterField = new TextField(this, this.game.renderer.width / 2, 500, 'you can start the game by pressing SPACE..'); + this.enterField.setOrigin(0.5).setCenterAlign(); + this.enterField.setVisible(true); + + this.logo = new Image(this, this.game.renderer.width - 30, this.game.renderer.height - 20, CustomizeTextures.icon); + this.add.existing(this.logo); + + + this.arrowRight = new Image(this, this.game.renderer.width*0.9, this.game.renderer.height/2, CustomizeTextures.arrowRight); + this.add.existing(this.arrowRight); + + this.arrowLeft = new Image(this, this.game.renderer.width/9, this.game.renderer.height/2, CustomizeTextures.arrowRight); + this.arrowLeft.flipX = true; + this.add.existing(this.arrowLeft); + + + this.Rectangle = this.add.rectangle(this.cameras.main.worldView.x + this.cameras.main.width / 2, this.cameras.main.worldView.y + this.cameras.main.height / 2, 32, 33) + this.Rectangle.setStrokeStyle(2, 0xFFFFFF); + this.add.existing(this.Rectangle); + + this.arrowDown = new Image(this, this.game.renderer.width - 30, 100, CustomizeTextures.arrowUp); + this.arrowDown.flipY = true; + this.add.existing(this.arrowDown); + + this.arrowUp = new Image(this, this.game.renderer.width - 30, 60, CustomizeTextures.arrowUp); + this.add.existing(this.arrowUp); + + this.createCustomizeLayer(0, 0, 0); + this.createCustomizeLayer(0, 0, 1); + this.createCustomizeLayer(0, 0, 2); + this.createCustomizeLayer(0, 0, 3); + this.createCustomizeLayer(0, 0, 4); + this.createCustomizeLayer(0, 0, 5); + + this.moveLayers(); + this.input.keyboard.on('keyup-ENTER', () => { + return this.scene.start(EnableCameraSceneName); + }); + + this.input.keyboard.on('keydown-RIGHT', () => { + if (this.selectedLayers[this.activeRow] === undefined) { + this.selectedLayers[this.activeRow] = 0; + } + if (this.selectedLayers[this.activeRow] < LAYERS[this.activeRow].length - 1) { + this.selectedLayers[this.activeRow]++; + this.moveLayers(); + this.updateSelectedLayer(); + } + }); + + this.input.keyboard.on('keydown-LEFT', () => { + if (this.selectedLayers[this.activeRow] > 0) { + if (this.selectedLayers[this.activeRow] === 0) { + delete this.selectedLayers[this.activeRow]; + } else { + this.selectedLayers[this.activeRow]--; + } + this.moveLayers(); + this.updateSelectedLayer(); + } + }); + + this.input.keyboard.on('keydown-DOWN', () => { + if (this.activeRow < LAYERS.length - 1) { + this.activeRow++; + this.moveLayers(); + } + }); + + this.input.keyboard.on('keydown-UP', () => { + if (this.activeRow > 0) { + this.activeRow--; + this.moveLayers(); + } + }); + + this.repositionCallback = this.reposition.bind(this); + window.addEventListener('resize', this.repositionCallback); + + } + update(time: number, delta: number): void { + super.update(time, delta); + this.enterField.setVisible(!!(Math.floor(time / 500) % 2)); + } + + /** + * @param x, the layer's vertical position + * @param y, the layer's horizontal position + * @param layerNumber, index of the LAYERS array + * create the layer and display it on the scene + */ + private createCustomizeLayer(x: number, y: number, layerNumber: number): void { + this.containersRow[layerNumber] = new Array(); + let alpha = 0; + let layerPosX = 0; + for (let i = 0; i < LAYERS[layerNumber].length; i++) { + const container = this.generateCharacter(300 + x + layerPosX, y, layerNumber, i); + + this.containersRow[layerNumber][i] = container; + this.add.existing(container); + layerPosX += 30; + alpha += 0.1; + } + } + + /** + * Generates a character from the current selected items BUT replaces + * one layer item with an item we pass in parameter. + * + * Current selected items are fetched from this.selectedLayers + * + * @param x, + * @param y, + * @param layerNumber, The selected layer number (0 for body...) + * @param selectedItem, The number of the item select (0 for black body...) + */ + private generateCharacter(x: number, y: number, layerNumber: number, selectedItem: number) { + return new Container(this, x, y,this.getContainerChildren(layerNumber,selectedItem)); + } + + private getContainerChildren(layerNumber: number, selectedItem: number): Array { + const children: Array = new Array(); + for (let j = 0; j <= layerNumber; j++) { + if (j === layerNumber) { + children.push(this.generateLayers(0, 0, LAYERS[j][selectedItem].name)); + } else { + const layer = this.selectedLayers[j]; + if (layer === undefined) { + continue; + } + children.push(this.generateLayers(0, 0, LAYERS[j][layer].name)); + } + } + return children; + } + + /** + * Move the layer left, right, up and down and update the selected layer + */ + private moveLayers(): void { + const screenCenterX = this.cameras.main.worldView.x + this.cameras.main.width / 2; + const screenCenterY = this.cameras.main.worldView.y + this.cameras.main.height / 2; + const screenWidth = this.game.renderer.width; + const screenHeight = this.game.renderer.height; + for (let i = 0; i < this.containersRow.length; i++) { + for (let j = 0; j < this.containersRow[i].length; j++) { + let selectedX = this.selectedLayers[i]; + if (selectedX === undefined) { + selectedX = 0; + } + this.containersRow[i][j].x = screenCenterX + (j - selectedX) * 40; + this.containersRow[i][j].y = screenCenterY + (i - this.activeRow) * 40; + const alpha1 = Math.abs(selectedX - j)*47*2/screenWidth; + const alpha2 = Math.abs(this.activeRow - i)*49*2/screenHeight; + this.containersRow[i][j].setAlpha((1 -alpha1)*(1 - alpha2)); + } + + } + } + + /** + * @param x, the sprite's vertical position + * @param y, the sprites's horizontal position + * @param name, the sprite's name + * @return a new sprite + */ + private generateLayers(x: number, y: number, name: string): Sprite { + return new Sprite(this, x, y, name); + } + + private updateSelectedLayer() { + for(let i = 0; i < this.containersRow.length; i++){ + for(let j = 0; j < this.containersRow[i].length; j++){ + const children = this.getContainerChildren(i, j); + this.containersRow[i][j].removeAll(true); + this.containersRow[i][j].add(children); + + } + } + + } + + private reposition() { + this.moveLayers(); + + this.Rectangle.x = this.cameras.main.worldView.x + this.cameras.main.width / 2; + this.Rectangle.y = this.cameras.main.worldView.y + this.cameras.main.height / 2; + + this.textField.x = this.game.renderer.width/2; + + this.logo.x = this.game.renderer.width - 30; + this.logo.y = this.game.renderer.height - 20; + + this.arrowUp.x = this.game.renderer.width - 30; + this.arrowUp.y = 60; + + this.arrowDown.x = this.game.renderer.width - 30; + this.arrowDown.y = 100; + + this.arrowLeft.x = this.game.renderer.width/9; + this.arrowLeft.y = this.game.renderer.height/2; + + this.arrowRight.x = this.game.renderer.width*0.9; + this.arrowRight.y = this.game.renderer.height/2; + } +} \ No newline at end of file diff --git a/front/src/index.ts b/front/src/index.ts index 15c2e0e8..98718223 100644 --- a/front/src/index.ts +++ b/front/src/index.ts @@ -7,6 +7,7 @@ import {ReconnectingScene} from "./Phaser/Reconnecting/ReconnectingScene"; import {gameManager} from "./Phaser/Game/GameManager"; import {SelectCharacterScene} from "./Phaser/Login/SelectCharacterScene"; import {EnableCameraScene} from "./Phaser/Login/EnableCameraScene"; +import {CustomizeScene} from "./Phaser/Login/CustomizeScene"; const config: GameConfig = { title: "Office game", diff --git a/front/webpack.config.js b/front/webpack.config.js index e162b4f8..61424eeb 100644 --- a/front/webpack.config.js +++ b/front/webpack.config.js @@ -43,5 +43,6 @@ module.exports = { Phaser: 'phaser' }), new webpack.EnvironmentPlugin(['API_URL', 'DEBUG_MODE']) - ] + ], + }; From 25abcfe20204702e9a43871a7e0e05886493a02a Mon Sep 17 00:00:00 2001 From: David Perez Date: Tue, 28 Jul 2020 11:10:05 +0200 Subject: [PATCH 069/313] png files --- .../character_accessories1.png | Bin 0 -> 293 bytes .../character_accessories10.png | Bin 0 -> 517 bytes .../character_accessories11.png | Bin 0 -> 517 bytes .../character_accessories12.png | Bin 0 -> 524 bytes .../character_accessories13.png | Bin 0 -> 505 bytes .../character_accessories14.png | Bin 0 -> 525 bytes .../character_accessories15.png | Bin 0 -> 517 bytes .../character_accessories16.png | Bin 0 -> 743 bytes .../character_accessories17.png | Bin 0 -> 798 bytes .../character_accessories18.png | Bin 0 -> 754 bytes .../character_accessories19.png | Bin 0 -> 814 bytes .../character_accessories2.png | Bin 0 -> 452 bytes .../character_accessories20.png | Bin 0 -> 810 bytes .../character_accessories21.png | Bin 0 -> 827 bytes .../character_accessories22.png | Bin 0 -> 451 bytes .../character_accessories23.png | Bin 0 -> 451 bytes .../character_accessories24.png | Bin 0 -> 451 bytes .../character_accessories25.png | Bin 0 -> 451 bytes .../character_accessories26.png | Bin 0 -> 281 bytes .../character_accessories27.png | Bin 0 -> 276 bytes .../character_accessories28.png | Bin 0 -> 368 bytes .../character_accessories29.png | Bin 0 -> 332 bytes .../character_accessories3.png | Bin 0 -> 450 bytes .../character_accessories30.png | Bin 0 -> 324 bytes .../character_accessories31.png | Bin 0 -> 349 bytes .../character_accessories32.png | Bin 0 -> 347 bytes .../character_accessories4.png | Bin 0 -> 486 bytes .../character_accessories5.png | Bin 0 -> 390 bytes .../character_accessories6.png | Bin 0 -> 495 bytes .../character_accessories7.png | Bin 0 -> 389 bytes .../character_accessories8.png | Bin 0 -> 516 bytes .../character_accessories9.png | Bin 0 -> 505 bytes .../character_clothes/character_clothes0.png | Bin 0 -> 454 bytes .../character_clothes/character_clothes1.png | Bin 0 -> 454 bytes .../character_clothes/character_clothes10.png | Bin 0 -> 1000 bytes .../character_clothes/character_clothes11.png | Bin 0 -> 1011 bytes .../character_clothes/character_clothes12.png | Bin 0 -> 965 bytes .../character_clothes/character_clothes13.png | Bin 0 -> 965 bytes .../character_clothes/character_clothes14.png | Bin 0 -> 910 bytes .../character_clothes/character_clothes15.png | Bin 0 -> 980 bytes .../character_clothes/character_clothes16.png | Bin 0 -> 938 bytes .../character_clothes/character_clothes17.png | Bin 0 -> 961 bytes .../character_clothes/character_clothes18.png | Bin 0 -> 977 bytes .../character_clothes/character_clothes19.png | Bin 0 -> 977 bytes .../character_clothes/character_clothes2.png | Bin 0 -> 388 bytes .../character_clothes/character_clothes20.png | Bin 0 -> 977 bytes .../character_clothes/character_clothes21.png | Bin 0 -> 2097 bytes .../character_clothes/character_clothes22.png | Bin 0 -> 2047 bytes .../character_clothes/character_clothes23.png | Bin 0 -> 2083 bytes .../character_clothes/character_clothes24.png | Bin 0 -> 3415 bytes .../character_clothes/character_clothes25.png | Bin 0 -> 4106 bytes .../character_clothes/character_clothes26.png | Bin 0 -> 3921 bytes .../character_clothes/character_clothes27.png | Bin 0 -> 3888 bytes .../character_clothes/character_clothes28.png | Bin 0 -> 4587 bytes .../character_clothes/character_clothes29.png | Bin 0 -> 4377 bytes .../character_clothes/character_clothes3.png | Bin 0 -> 388 bytes .../character_clothes/character_clothes30.png | Bin 0 -> 3941 bytes .../character_clothes/character_clothes31.png | Bin 0 -> 3602 bytes .../character_clothes/character_clothes32.png | Bin 0 -> 3496 bytes .../character_clothes/character_clothes33.png | Bin 0 -> 3951 bytes .../character_clothes/character_clothes34.png | Bin 0 -> 4560 bytes .../character_clothes/character_clothes35.png | Bin 0 -> 3862 bytes .../character_clothes/character_clothes36.png | Bin 0 -> 4174 bytes .../character_clothes/character_clothes37.png | Bin 0 -> 3962 bytes .../character_clothes/character_clothes38.png | Bin 0 -> 4279 bytes .../character_clothes/character_clothes39.png | Bin 0 -> 3030 bytes .../character_clothes/character_clothes4.png | Bin 0 -> 354 bytes .../character_clothes/character_clothes40.png | Bin 0 -> 2228 bytes .../character_clothes/character_clothes41.png | Bin 0 -> 2161 bytes .../character_clothes/character_clothes42.png | Bin 0 -> 2274 bytes .../character_clothes/character_clothes43.png | Bin 0 -> 1040 bytes .../character_clothes/character_clothes44.png | Bin 0 -> 1085 bytes .../character_clothes/character_clothes45.png | Bin 0 -> 1085 bytes .../character_clothes/character_clothes46.png | Bin 0 -> 1051 bytes .../character_clothes/character_clothes47.png | Bin 0 -> 1107 bytes .../character_clothes/character_clothes48.png | Bin 0 -> 1095 bytes .../character_clothes/character_clothes49.png | Bin 0 -> 922 bytes .../character_clothes/character_clothes5.png | Bin 0 -> 356 bytes .../character_clothes/character_clothes50.png | Bin 0 -> 955 bytes .../character_clothes/character_clothes51.png | Bin 0 -> 972 bytes .../character_clothes/character_clothes52.png | Bin 0 -> 866 bytes .../character_clothes/character_clothes53.png | Bin 0 -> 877 bytes .../character_clothes/character_clothes54.png | Bin 0 -> 905 bytes .../character_clothes/character_clothes55.png | Bin 0 -> 388 bytes .../character_clothes/character_clothes56.png | Bin 0 -> 465 bytes .../character_clothes/character_clothes57.png | Bin 0 -> 465 bytes .../character_clothes/character_clothes58.png | Bin 0 -> 550 bytes .../character_clothes/character_clothes59.png | Bin 0 -> 550 bytes .../character_clothes/character_clothes6.png | Bin 0 -> 469 bytes .../character_clothes/character_clothes60.png | Bin 0 -> 457 bytes .../character_clothes/character_clothes61.png | Bin 0 -> 457 bytes .../character_clothes/character_clothes62.png | Bin 0 -> 4868 bytes .../character_clothes/character_clothes63.png | Bin 0 -> 529 bytes .../character_clothes/character_clothes64.png | Bin 0 -> 529 bytes .../character_clothes/character_clothes65.png | Bin 0 -> 3518 bytes .../character_clothes/character_clothes66.png | Bin 0 -> 3587 bytes .../character_clothes/character_clothes67.png | Bin 0 -> 1184 bytes .../character_clothes/character_clothes68.png | Bin 0 -> 1184 bytes .../character_clothes/character_clothes69.png | Bin 0 -> 1184 bytes .../character_clothes/character_clothes7.png | Bin 0 -> 469 bytes .../character_clothes/character_clothes8.png | Bin 0 -> 336 bytes .../character_clothes/character_clothes9.png | Bin 0 -> 1046 bytes .../customisation/character_color/_‚È‚µ.png | Bin 0 -> 293 bytes .../character_color/character_color0.png | Bin 0 -> 1363 bytes .../character_color/character_color1.png | Bin 0 -> 1370 bytes .../character_color/character_color10.png | Bin 0 -> 1377 bytes .../character_color/character_color11.png | Bin 0 -> 1377 bytes .../character_color/character_color12.png | Bin 0 -> 1329 bytes .../character_color/character_color13.png | Bin 0 -> 1329 bytes .../character_color/character_color14.png | Bin 0 -> 1329 bytes .../character_color/character_color15.png | Bin 0 -> 1329 bytes .../character_color/character_color16.png | Bin 0 -> 1329 bytes .../character_color/character_color17.png | Bin 0 -> 801 bytes .../character_color/character_color18.png | Bin 0 -> 801 bytes .../character_color/character_color19.png | Bin 0 -> 801 bytes .../character_color/character_color2.png | Bin 0 -> 1363 bytes .../character_color/character_color20.png | Bin 0 -> 801 bytes .../character_color/character_color21.png | Bin 0 -> 1339 bytes .../character_color/character_color22.png | Bin 0 -> 1334 bytes .../character_color/character_color23.png | Bin 0 -> 1334 bytes .../character_color/character_color24.png | Bin 0 -> 1334 bytes .../character_color/character_color25.png | Bin 0 -> 1334 bytes .../character_color/character_color26.png | Bin 0 -> 1334 bytes .../character_color/character_color27.png | Bin 0 -> 1354 bytes .../character_color/character_color28.png | Bin 0 -> 1349 bytes .../character_color/character_color29.png | Bin 0 -> 1349 bytes .../character_color/character_color3.png | Bin 0 -> 1363 bytes .../character_color/character_color30.png | Bin 0 -> 1349 bytes .../character_color/character_color31.png | Bin 0 -> 1349 bytes .../character_color/character_color32.png | Bin 0 -> 1349 bytes .../character_color/character_color4.png | Bin 0 -> 1363 bytes .../character_color/character_color5.png | Bin 0 -> 1363 bytes .../character_color/character_color6.png | Bin 0 -> 1384 bytes .../character_color/character_color7.png | Bin 0 -> 1377 bytes .../character_color/character_color8.png | Bin 0 -> 1392 bytes .../character_color/character_color9.png | Bin 0 -> 1377 bytes .../character_eyes/character_eyes1.png | Bin 0 -> 1670 bytes .../character_eyes/character_eyes10.png | Bin 0 -> 1652 bytes .../character_eyes/character_eyes11.png | Bin 0 -> 1696 bytes .../character_eyes/character_eyes12.png | Bin 0 -> 1706 bytes .../character_eyes/character_eyes13.png | Bin 0 -> 1701 bytes .../character_eyes/character_eyes14.png | Bin 0 -> 1591 bytes .../character_eyes/character_eyes15.png | Bin 0 -> 1791 bytes .../character_eyes/character_eyes16.png | Bin 0 -> 1461 bytes .../character_eyes/character_eyes17.png | Bin 0 -> 1431 bytes .../character_eyes/character_eyes18.png | Bin 0 -> 1520 bytes .../character_eyes/character_eyes19.png | Bin 0 -> 1672 bytes .../character_eyes/character_eyes2.png | Bin 0 -> 1516 bytes .../character_eyes/character_eyes20.png | Bin 0 -> 1471 bytes .../character_eyes/character_eyes21.png | Bin 0 -> 314 bytes .../character_eyes/character_eyes22.png | Bin 0 -> 289 bytes .../character_eyes/character_eyes23.png | Bin 0 -> 265 bytes .../character_eyes/character_eyes24.png | Bin 0 -> 267 bytes .../character_eyes/character_eyes25.png | Bin 0 -> 348 bytes .../character_eyes/character_eyes26.png | Bin 0 -> 345 bytes .../character_eyes/character_eyes27.png | Bin 0 -> 381 bytes .../character_eyes/character_eyes28.png | Bin 0 -> 378 bytes .../character_eyes/character_eyes29.png | Bin 0 -> 873 bytes .../character_eyes/character_eyes3.png | Bin 0 -> 1575 bytes .../character_eyes/character_eyes30.png | Bin 0 -> 716 bytes .../character_eyes/character_eyes31.png | Bin 0 -> 789 bytes .../character_eyes/character_eyes32.png | Bin 0 -> 898 bytes .../character_eyes/character_eyes33.png | Bin 0 -> 1394 bytes .../character_eyes/character_eyes34.png | Bin 0 -> 1303 bytes .../character_eyes/character_eyes4.png | Bin 0 -> 1526 bytes .../character_eyes/character_eyes5.png | Bin 0 -> 1605 bytes .../character_eyes/character_eyes6.png | Bin 0 -> 1587 bytes .../character_eyes/character_eyes7.png | Bin 0 -> 1514 bytes .../character_eyes/character_eyes8.png | Bin 0 -> 1495 bytes .../character_eyes/character_eyes9.png | Bin 0 -> 1447 bytes .../character_hairs/character_hairs0.png | Bin 0 -> 293 bytes .../character_hairs/character_hairs1.png | Bin 0 -> 2815 bytes .../character_hairs/character_hairs10.png | Bin 0 -> 2973 bytes .../character_hairs/character_hairs11.png | Bin 0 -> 3073 bytes .../character_hairs/character_hairs12.png | Bin 0 -> 2774 bytes .../character_hairs/character_hairs13.png | Bin 0 -> 2813 bytes .../character_hairs/character_hairs14.png | Bin 0 -> 3245 bytes .../character_hairs/character_hairs15.png | Bin 0 -> 3273 bytes .../character_hairs/character_hairs16.png | Bin 0 -> 3404 bytes .../character_hairs/character_hairs17.png | Bin 0 -> 3391 bytes .../character_hairs/character_hairs18.png | Bin 0 -> 2601 bytes .../character_hairs/character_hairs19.png | Bin 0 -> 2625 bytes .../character_hairs/character_hairs2.png | Bin 0 -> 2681 bytes .../character_hairs/character_hairs20.png | Bin 0 -> 2878 bytes .../character_hairs/character_hairs21.png | Bin 0 -> 2020 bytes .../character_hairs/character_hairs22.png | Bin 0 -> 2910 bytes .../character_hairs/character_hairs23.png | Bin 0 -> 3307 bytes .../character_hairs/character_hairs24.png | Bin 0 -> 3346 bytes .../character_hairs/character_hairs25.png | Bin 0 -> 785 bytes .../character_hairs/character_hairs26.png | Bin 0 -> 785 bytes .../character_hairs/character_hairs27.png | Bin 0 -> 781 bytes .../character_hairs/character_hairs28.png | Bin 0 -> 781 bytes .../character_hairs/character_hairs29.png | Bin 0 -> 3241 bytes .../character_hairs/character_hairs3.png | Bin 0 -> 2710 bytes .../character_hairs/character_hairs30.png | Bin 0 -> 3340 bytes .../character_hairs/character_hairs31.png | Bin 0 -> 3255 bytes .../character_hairs/character_hairs32.png | Bin 0 -> 3373 bytes .../character_hairs/character_hairs33.png | Bin 0 -> 2671 bytes .../character_hairs/character_hairs34.png | Bin 0 -> 2750 bytes .../character_hairs/character_hairs35.png | Bin 0 -> 3186 bytes .../character_hairs/character_hairs36.png | Bin 0 -> 3274 bytes .../character_hairs/character_hairs37.png | Bin 0 -> 3590 bytes .../character_hairs/character_hairs38.png | Bin 0 -> 3690 bytes .../character_hairs/character_hairs39.png | Bin 0 -> 2408 bytes .../character_hairs/character_hairs4.png | Bin 0 -> 2613 bytes .../character_hairs/character_hairs40.png | Bin 0 -> 2452 bytes .../character_hairs/character_hairs41.png | Bin 0 -> 2610 bytes .../character_hairs/character_hairs42.png | Bin 0 -> 2627 bytes .../character_hairs/character_hairs43.png | Bin 0 -> 2582 bytes .../character_hairs/character_hairs44.png | Bin 0 -> 2630 bytes .../character_hairs/character_hairs45.png | Bin 0 -> 2652 bytes .../character_hairs/character_hairs46.png | Bin 0 -> 2666 bytes .../character_hairs/character_hairs47.png | Bin 0 -> 3719 bytes .../character_hairs/character_hairs48.png | Bin 0 -> 3511 bytes .../character_hairs/character_hairs49.png | Bin 0 -> 2994 bytes .../character_hairs/character_hairs5.png | Bin 0 -> 2630 bytes .../character_hairs/character_hairs50.png | Bin 0 -> 2946 bytes .../character_hairs/character_hairs51.png | Bin 0 -> 3066 bytes .../character_hairs/character_hairs52.png | Bin 0 -> 3153 bytes .../character_hairs/character_hairs53.png | Bin 0 -> 2659 bytes .../character_hairs/character_hairs54.png | Bin 0 -> 2625 bytes .../character_hairs/character_hairs55.png | Bin 0 -> 2711 bytes .../character_hairs/character_hairs56.png | Bin 0 -> 2771 bytes .../character_hairs/character_hairs57.png | Bin 0 -> 3160 bytes .../character_hairs/character_hairs58.png | Bin 0 -> 3155 bytes .../character_hairs/character_hairs59.png | Bin 0 -> 2272 bytes .../character_hairs/character_hairs6.png | Bin 0 -> 2788 bytes .../character_hairs/character_hairs60.png | Bin 0 -> 2309 bytes .../character_hairs/character_hairs61.png | Bin 0 -> 3081 bytes .../character_hairs/character_hairs62.png | Bin 0 -> 3118 bytes .../character_hairs/character_hairs63.png | Bin 0 -> 3134 bytes .../character_hairs/character_hairs64.png | Bin 0 -> 3192 bytes .../character_hairs/character_hairs65.png | Bin 0 -> 3107 bytes .../character_hairs/character_hairs66.png | Bin 0 -> 3138 bytes .../character_hairs/character_hairs67.png | Bin 0 -> 1939 bytes .../character_hairs/character_hairs68.png | Bin 0 -> 2237 bytes .../character_hairs/character_hairs69.png | Bin 0 -> 2275 bytes .../character_hairs/character_hairs7.png | Bin 0 -> 2845 bytes .../character_hairs/character_hairs70.png | Bin 0 -> 1441 bytes .../character_hairs/character_hairs71.png | Bin 0 -> 1434 bytes .../character_hairs/character_hairs72.png | Bin 0 -> 1544 bytes .../character_hairs/character_hairs73.png | Bin 0 -> 1554 bytes .../character_hairs/character_hairs8.png | Bin 0 -> 2896 bytes .../character_hairs/character_hairs9.png | Bin 0 -> 2924 bytes .../character_hats/character_hats1.png | Bin 0 -> 293 bytes .../character_hats/character_hats10.png | Bin 0 -> 2077 bytes .../character_hats/character_hats11.png | Bin 0 -> 1605 bytes .../character_hats/character_hats12.png | Bin 0 -> 2072 bytes .../character_hats/character_hats13.png | Bin 0 -> 2069 bytes .../character_hats/character_hats14.png | Bin 0 -> 1505 bytes .../character_hats/character_hats15.png | Bin 0 -> 539 bytes .../character_hats/character_hats16.png | Bin 0 -> 814 bytes .../character_hats/character_hats17.png | Bin 0 -> 608 bytes .../character_hats/character_hats18.png | Bin 0 -> 445 bytes .../character_hats/character_hats19.png | Bin 0 -> 445 bytes .../character_hats/character_hats2.png | Bin 0 -> 2509 bytes .../character_hats/character_hats20.png | Bin 0 -> 445 bytes .../character_hats/character_hats21.png | Bin 0 -> 352 bytes .../character_hats/character_hats22.png | Bin 0 -> 352 bytes .../character_hats/character_hats23.png | Bin 0 -> 352 bytes .../character_hats/character_hats24.png | Bin 0 -> 353 bytes .../character_hats/character_hats25.png | Bin 0 -> 353 bytes .../character_hats/character_hats26.png | Bin 0 -> 353 bytes .../character_hats/character_hats3.png | Bin 0 -> 685 bytes .../character_hats/character_hats4.png | Bin 0 -> 1843 bytes .../character_hats/character_hats5.png | Bin 0 -> 1510 bytes .../character_hats/character_hats6.png | Bin 0 -> 1728 bytes .../character_hats/character_hats7.png | Bin 0 -> 1717 bytes .../character_hats/character_hats8.png | Bin 0 -> 1975 bytes .../character_hats/character_hats9.png | Bin 0 -> 1676 bytes 270 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 front/dist/resources/customisation/character_accessories/character_accessories1.png create mode 100644 front/dist/resources/customisation/character_accessories/character_accessories10.png create mode 100644 front/dist/resources/customisation/character_accessories/character_accessories11.png create mode 100644 front/dist/resources/customisation/character_accessories/character_accessories12.png create mode 100644 front/dist/resources/customisation/character_accessories/character_accessories13.png create mode 100644 front/dist/resources/customisation/character_accessories/character_accessories14.png create mode 100644 front/dist/resources/customisation/character_accessories/character_accessories15.png create mode 100644 front/dist/resources/customisation/character_accessories/character_accessories16.png create mode 100644 front/dist/resources/customisation/character_accessories/character_accessories17.png create mode 100644 front/dist/resources/customisation/character_accessories/character_accessories18.png create mode 100644 front/dist/resources/customisation/character_accessories/character_accessories19.png create mode 100644 front/dist/resources/customisation/character_accessories/character_accessories2.png create mode 100644 front/dist/resources/customisation/character_accessories/character_accessories20.png create mode 100644 front/dist/resources/customisation/character_accessories/character_accessories21.png create mode 100644 front/dist/resources/customisation/character_accessories/character_accessories22.png create mode 100644 front/dist/resources/customisation/character_accessories/character_accessories23.png create mode 100644 front/dist/resources/customisation/character_accessories/character_accessories24.png create mode 100644 front/dist/resources/customisation/character_accessories/character_accessories25.png create mode 100644 front/dist/resources/customisation/character_accessories/character_accessories26.png create mode 100644 front/dist/resources/customisation/character_accessories/character_accessories27.png create mode 100644 front/dist/resources/customisation/character_accessories/character_accessories28.png create mode 100644 front/dist/resources/customisation/character_accessories/character_accessories29.png create mode 100644 front/dist/resources/customisation/character_accessories/character_accessories3.png create mode 100644 front/dist/resources/customisation/character_accessories/character_accessories30.png create mode 100644 front/dist/resources/customisation/character_accessories/character_accessories31.png create mode 100644 front/dist/resources/customisation/character_accessories/character_accessories32.png create mode 100644 front/dist/resources/customisation/character_accessories/character_accessories4.png create mode 100644 front/dist/resources/customisation/character_accessories/character_accessories5.png create mode 100644 front/dist/resources/customisation/character_accessories/character_accessories6.png create mode 100644 front/dist/resources/customisation/character_accessories/character_accessories7.png create mode 100644 front/dist/resources/customisation/character_accessories/character_accessories8.png create mode 100644 front/dist/resources/customisation/character_accessories/character_accessories9.png create mode 100644 front/dist/resources/customisation/character_clothes/character_clothes0.png create mode 100644 front/dist/resources/customisation/character_clothes/character_clothes1.png create mode 100644 front/dist/resources/customisation/character_clothes/character_clothes10.png create mode 100644 front/dist/resources/customisation/character_clothes/character_clothes11.png create mode 100644 front/dist/resources/customisation/character_clothes/character_clothes12.png create mode 100644 front/dist/resources/customisation/character_clothes/character_clothes13.png create mode 100644 front/dist/resources/customisation/character_clothes/character_clothes14.png create mode 100644 front/dist/resources/customisation/character_clothes/character_clothes15.png create mode 100644 front/dist/resources/customisation/character_clothes/character_clothes16.png create mode 100644 front/dist/resources/customisation/character_clothes/character_clothes17.png create mode 100644 front/dist/resources/customisation/character_clothes/character_clothes18.png create mode 100644 front/dist/resources/customisation/character_clothes/character_clothes19.png create mode 100644 front/dist/resources/customisation/character_clothes/character_clothes2.png create mode 100644 front/dist/resources/customisation/character_clothes/character_clothes20.png create mode 100644 front/dist/resources/customisation/character_clothes/character_clothes21.png create mode 100644 front/dist/resources/customisation/character_clothes/character_clothes22.png create mode 100644 front/dist/resources/customisation/character_clothes/character_clothes23.png create mode 100644 front/dist/resources/customisation/character_clothes/character_clothes24.png create mode 100644 front/dist/resources/customisation/character_clothes/character_clothes25.png create mode 100644 front/dist/resources/customisation/character_clothes/character_clothes26.png create mode 100644 front/dist/resources/customisation/character_clothes/character_clothes27.png create mode 100644 front/dist/resources/customisation/character_clothes/character_clothes28.png create mode 100644 front/dist/resources/customisation/character_clothes/character_clothes29.png create mode 100644 front/dist/resources/customisation/character_clothes/character_clothes3.png create mode 100644 front/dist/resources/customisation/character_clothes/character_clothes30.png create mode 100644 front/dist/resources/customisation/character_clothes/character_clothes31.png create mode 100644 front/dist/resources/customisation/character_clothes/character_clothes32.png create mode 100644 front/dist/resources/customisation/character_clothes/character_clothes33.png create mode 100644 front/dist/resources/customisation/character_clothes/character_clothes34.png create mode 100644 front/dist/resources/customisation/character_clothes/character_clothes35.png create mode 100644 front/dist/resources/customisation/character_clothes/character_clothes36.png create mode 100644 front/dist/resources/customisation/character_clothes/character_clothes37.png create mode 100644 front/dist/resources/customisation/character_clothes/character_clothes38.png create mode 100644 front/dist/resources/customisation/character_clothes/character_clothes39.png create mode 100644 front/dist/resources/customisation/character_clothes/character_clothes4.png create mode 100644 front/dist/resources/customisation/character_clothes/character_clothes40.png create mode 100644 front/dist/resources/customisation/character_clothes/character_clothes41.png create mode 100644 front/dist/resources/customisation/character_clothes/character_clothes42.png create mode 100644 front/dist/resources/customisation/character_clothes/character_clothes43.png create mode 100644 front/dist/resources/customisation/character_clothes/character_clothes44.png create mode 100644 front/dist/resources/customisation/character_clothes/character_clothes45.png create mode 100644 front/dist/resources/customisation/character_clothes/character_clothes46.png create mode 100644 front/dist/resources/customisation/character_clothes/character_clothes47.png create mode 100644 front/dist/resources/customisation/character_clothes/character_clothes48.png create mode 100644 front/dist/resources/customisation/character_clothes/character_clothes49.png create mode 100644 front/dist/resources/customisation/character_clothes/character_clothes5.png create mode 100644 front/dist/resources/customisation/character_clothes/character_clothes50.png create mode 100644 front/dist/resources/customisation/character_clothes/character_clothes51.png create mode 100644 front/dist/resources/customisation/character_clothes/character_clothes52.png create mode 100644 front/dist/resources/customisation/character_clothes/character_clothes53.png create mode 100644 front/dist/resources/customisation/character_clothes/character_clothes54.png create mode 100644 front/dist/resources/customisation/character_clothes/character_clothes55.png create mode 100644 front/dist/resources/customisation/character_clothes/character_clothes56.png create mode 100644 front/dist/resources/customisation/character_clothes/character_clothes57.png create mode 100644 front/dist/resources/customisation/character_clothes/character_clothes58.png create mode 100644 front/dist/resources/customisation/character_clothes/character_clothes59.png create mode 100644 front/dist/resources/customisation/character_clothes/character_clothes6.png create mode 100644 front/dist/resources/customisation/character_clothes/character_clothes60.png create mode 100644 front/dist/resources/customisation/character_clothes/character_clothes61.png create mode 100644 front/dist/resources/customisation/character_clothes/character_clothes62.png create mode 100644 front/dist/resources/customisation/character_clothes/character_clothes63.png create mode 100644 front/dist/resources/customisation/character_clothes/character_clothes64.png create mode 100644 front/dist/resources/customisation/character_clothes/character_clothes65.png create mode 100644 front/dist/resources/customisation/character_clothes/character_clothes66.png create mode 100644 front/dist/resources/customisation/character_clothes/character_clothes67.png create mode 100644 front/dist/resources/customisation/character_clothes/character_clothes68.png create mode 100644 front/dist/resources/customisation/character_clothes/character_clothes69.png create mode 100644 front/dist/resources/customisation/character_clothes/character_clothes7.png create mode 100644 front/dist/resources/customisation/character_clothes/character_clothes8.png create mode 100644 front/dist/resources/customisation/character_clothes/character_clothes9.png create mode 100644 front/dist/resources/customisation/character_color/_‚È‚µ.png create mode 100644 front/dist/resources/customisation/character_color/character_color0.png create mode 100644 front/dist/resources/customisation/character_color/character_color1.png create mode 100644 front/dist/resources/customisation/character_color/character_color10.png create mode 100644 front/dist/resources/customisation/character_color/character_color11.png create mode 100644 front/dist/resources/customisation/character_color/character_color12.png create mode 100644 front/dist/resources/customisation/character_color/character_color13.png create mode 100644 front/dist/resources/customisation/character_color/character_color14.png create mode 100644 front/dist/resources/customisation/character_color/character_color15.png create mode 100644 front/dist/resources/customisation/character_color/character_color16.png create mode 100644 front/dist/resources/customisation/character_color/character_color17.png create mode 100644 front/dist/resources/customisation/character_color/character_color18.png create mode 100644 front/dist/resources/customisation/character_color/character_color19.png create mode 100644 front/dist/resources/customisation/character_color/character_color2.png create mode 100644 front/dist/resources/customisation/character_color/character_color20.png create mode 100644 front/dist/resources/customisation/character_color/character_color21.png create mode 100644 front/dist/resources/customisation/character_color/character_color22.png create mode 100644 front/dist/resources/customisation/character_color/character_color23.png create mode 100644 front/dist/resources/customisation/character_color/character_color24.png create mode 100644 front/dist/resources/customisation/character_color/character_color25.png create mode 100644 front/dist/resources/customisation/character_color/character_color26.png create mode 100644 front/dist/resources/customisation/character_color/character_color27.png create mode 100644 front/dist/resources/customisation/character_color/character_color28.png create mode 100644 front/dist/resources/customisation/character_color/character_color29.png create mode 100644 front/dist/resources/customisation/character_color/character_color3.png create mode 100644 front/dist/resources/customisation/character_color/character_color30.png create mode 100644 front/dist/resources/customisation/character_color/character_color31.png create mode 100644 front/dist/resources/customisation/character_color/character_color32.png create mode 100644 front/dist/resources/customisation/character_color/character_color4.png create mode 100644 front/dist/resources/customisation/character_color/character_color5.png create mode 100644 front/dist/resources/customisation/character_color/character_color6.png create mode 100644 front/dist/resources/customisation/character_color/character_color7.png create mode 100644 front/dist/resources/customisation/character_color/character_color8.png create mode 100644 front/dist/resources/customisation/character_color/character_color9.png create mode 100644 front/dist/resources/customisation/character_eyes/character_eyes1.png create mode 100644 front/dist/resources/customisation/character_eyes/character_eyes10.png create mode 100644 front/dist/resources/customisation/character_eyes/character_eyes11.png create mode 100644 front/dist/resources/customisation/character_eyes/character_eyes12.png create mode 100644 front/dist/resources/customisation/character_eyes/character_eyes13.png create mode 100644 front/dist/resources/customisation/character_eyes/character_eyes14.png create mode 100644 front/dist/resources/customisation/character_eyes/character_eyes15.png create mode 100644 front/dist/resources/customisation/character_eyes/character_eyes16.png create mode 100644 front/dist/resources/customisation/character_eyes/character_eyes17.png create mode 100644 front/dist/resources/customisation/character_eyes/character_eyes18.png create mode 100644 front/dist/resources/customisation/character_eyes/character_eyes19.png create mode 100644 front/dist/resources/customisation/character_eyes/character_eyes2.png create mode 100644 front/dist/resources/customisation/character_eyes/character_eyes20.png create mode 100644 front/dist/resources/customisation/character_eyes/character_eyes21.png create mode 100644 front/dist/resources/customisation/character_eyes/character_eyes22.png create mode 100644 front/dist/resources/customisation/character_eyes/character_eyes23.png create mode 100644 front/dist/resources/customisation/character_eyes/character_eyes24.png create mode 100644 front/dist/resources/customisation/character_eyes/character_eyes25.png create mode 100644 front/dist/resources/customisation/character_eyes/character_eyes26.png create mode 100644 front/dist/resources/customisation/character_eyes/character_eyes27.png create mode 100644 front/dist/resources/customisation/character_eyes/character_eyes28.png create mode 100644 front/dist/resources/customisation/character_eyes/character_eyes29.png create mode 100644 front/dist/resources/customisation/character_eyes/character_eyes3.png create mode 100644 front/dist/resources/customisation/character_eyes/character_eyes30.png create mode 100644 front/dist/resources/customisation/character_eyes/character_eyes31.png create mode 100644 front/dist/resources/customisation/character_eyes/character_eyes32.png create mode 100644 front/dist/resources/customisation/character_eyes/character_eyes33.png create mode 100644 front/dist/resources/customisation/character_eyes/character_eyes34.png create mode 100644 front/dist/resources/customisation/character_eyes/character_eyes4.png create mode 100644 front/dist/resources/customisation/character_eyes/character_eyes5.png create mode 100644 front/dist/resources/customisation/character_eyes/character_eyes6.png create mode 100644 front/dist/resources/customisation/character_eyes/character_eyes7.png create mode 100644 front/dist/resources/customisation/character_eyes/character_eyes8.png create mode 100644 front/dist/resources/customisation/character_eyes/character_eyes9.png create mode 100644 front/dist/resources/customisation/character_hairs/character_hairs0.png create mode 100644 front/dist/resources/customisation/character_hairs/character_hairs1.png create mode 100644 front/dist/resources/customisation/character_hairs/character_hairs10.png create mode 100644 front/dist/resources/customisation/character_hairs/character_hairs11.png create mode 100644 front/dist/resources/customisation/character_hairs/character_hairs12.png create mode 100644 front/dist/resources/customisation/character_hairs/character_hairs13.png create mode 100644 front/dist/resources/customisation/character_hairs/character_hairs14.png create mode 100644 front/dist/resources/customisation/character_hairs/character_hairs15.png create mode 100644 front/dist/resources/customisation/character_hairs/character_hairs16.png create mode 100644 front/dist/resources/customisation/character_hairs/character_hairs17.png create mode 100644 front/dist/resources/customisation/character_hairs/character_hairs18.png create mode 100644 front/dist/resources/customisation/character_hairs/character_hairs19.png create mode 100644 front/dist/resources/customisation/character_hairs/character_hairs2.png create mode 100644 front/dist/resources/customisation/character_hairs/character_hairs20.png create mode 100644 front/dist/resources/customisation/character_hairs/character_hairs21.png create mode 100644 front/dist/resources/customisation/character_hairs/character_hairs22.png create mode 100644 front/dist/resources/customisation/character_hairs/character_hairs23.png create mode 100644 front/dist/resources/customisation/character_hairs/character_hairs24.png create mode 100644 front/dist/resources/customisation/character_hairs/character_hairs25.png create mode 100644 front/dist/resources/customisation/character_hairs/character_hairs26.png create mode 100644 front/dist/resources/customisation/character_hairs/character_hairs27.png create mode 100644 front/dist/resources/customisation/character_hairs/character_hairs28.png create mode 100644 front/dist/resources/customisation/character_hairs/character_hairs29.png create mode 100644 front/dist/resources/customisation/character_hairs/character_hairs3.png create mode 100644 front/dist/resources/customisation/character_hairs/character_hairs30.png create mode 100644 front/dist/resources/customisation/character_hairs/character_hairs31.png create mode 100644 front/dist/resources/customisation/character_hairs/character_hairs32.png create mode 100644 front/dist/resources/customisation/character_hairs/character_hairs33.png create mode 100644 front/dist/resources/customisation/character_hairs/character_hairs34.png create mode 100644 front/dist/resources/customisation/character_hairs/character_hairs35.png create mode 100644 front/dist/resources/customisation/character_hairs/character_hairs36.png create mode 100644 front/dist/resources/customisation/character_hairs/character_hairs37.png create mode 100644 front/dist/resources/customisation/character_hairs/character_hairs38.png create mode 100644 front/dist/resources/customisation/character_hairs/character_hairs39.png create mode 100644 front/dist/resources/customisation/character_hairs/character_hairs4.png create mode 100644 front/dist/resources/customisation/character_hairs/character_hairs40.png create mode 100644 front/dist/resources/customisation/character_hairs/character_hairs41.png create mode 100644 front/dist/resources/customisation/character_hairs/character_hairs42.png create mode 100644 front/dist/resources/customisation/character_hairs/character_hairs43.png create mode 100644 front/dist/resources/customisation/character_hairs/character_hairs44.png create mode 100644 front/dist/resources/customisation/character_hairs/character_hairs45.png create mode 100644 front/dist/resources/customisation/character_hairs/character_hairs46.png create mode 100644 front/dist/resources/customisation/character_hairs/character_hairs47.png create mode 100644 front/dist/resources/customisation/character_hairs/character_hairs48.png create mode 100644 front/dist/resources/customisation/character_hairs/character_hairs49.png create mode 100644 front/dist/resources/customisation/character_hairs/character_hairs5.png create mode 100644 front/dist/resources/customisation/character_hairs/character_hairs50.png create mode 100644 front/dist/resources/customisation/character_hairs/character_hairs51.png create mode 100644 front/dist/resources/customisation/character_hairs/character_hairs52.png create mode 100644 front/dist/resources/customisation/character_hairs/character_hairs53.png create mode 100644 front/dist/resources/customisation/character_hairs/character_hairs54.png create mode 100644 front/dist/resources/customisation/character_hairs/character_hairs55.png create mode 100644 front/dist/resources/customisation/character_hairs/character_hairs56.png create mode 100644 front/dist/resources/customisation/character_hairs/character_hairs57.png create mode 100644 front/dist/resources/customisation/character_hairs/character_hairs58.png create mode 100644 front/dist/resources/customisation/character_hairs/character_hairs59.png create mode 100644 front/dist/resources/customisation/character_hairs/character_hairs6.png create mode 100644 front/dist/resources/customisation/character_hairs/character_hairs60.png create mode 100644 front/dist/resources/customisation/character_hairs/character_hairs61.png create mode 100644 front/dist/resources/customisation/character_hairs/character_hairs62.png create mode 100644 front/dist/resources/customisation/character_hairs/character_hairs63.png create mode 100644 front/dist/resources/customisation/character_hairs/character_hairs64.png create mode 100644 front/dist/resources/customisation/character_hairs/character_hairs65.png create mode 100644 front/dist/resources/customisation/character_hairs/character_hairs66.png create mode 100644 front/dist/resources/customisation/character_hairs/character_hairs67.png create mode 100644 front/dist/resources/customisation/character_hairs/character_hairs68.png create mode 100644 front/dist/resources/customisation/character_hairs/character_hairs69.png create mode 100644 front/dist/resources/customisation/character_hairs/character_hairs7.png create mode 100644 front/dist/resources/customisation/character_hairs/character_hairs70.png create mode 100644 front/dist/resources/customisation/character_hairs/character_hairs71.png create mode 100644 front/dist/resources/customisation/character_hairs/character_hairs72.png create mode 100644 front/dist/resources/customisation/character_hairs/character_hairs73.png create mode 100644 front/dist/resources/customisation/character_hairs/character_hairs8.png create mode 100644 front/dist/resources/customisation/character_hairs/character_hairs9.png create mode 100644 front/dist/resources/customisation/character_hats/character_hats1.png create mode 100644 front/dist/resources/customisation/character_hats/character_hats10.png create mode 100644 front/dist/resources/customisation/character_hats/character_hats11.png create mode 100644 front/dist/resources/customisation/character_hats/character_hats12.png create mode 100644 front/dist/resources/customisation/character_hats/character_hats13.png create mode 100644 front/dist/resources/customisation/character_hats/character_hats14.png create mode 100644 front/dist/resources/customisation/character_hats/character_hats15.png create mode 100644 front/dist/resources/customisation/character_hats/character_hats16.png create mode 100644 front/dist/resources/customisation/character_hats/character_hats17.png create mode 100644 front/dist/resources/customisation/character_hats/character_hats18.png create mode 100644 front/dist/resources/customisation/character_hats/character_hats19.png create mode 100644 front/dist/resources/customisation/character_hats/character_hats2.png create mode 100644 front/dist/resources/customisation/character_hats/character_hats20.png create mode 100644 front/dist/resources/customisation/character_hats/character_hats21.png create mode 100644 front/dist/resources/customisation/character_hats/character_hats22.png create mode 100644 front/dist/resources/customisation/character_hats/character_hats23.png create mode 100644 front/dist/resources/customisation/character_hats/character_hats24.png create mode 100644 front/dist/resources/customisation/character_hats/character_hats25.png create mode 100644 front/dist/resources/customisation/character_hats/character_hats26.png create mode 100644 front/dist/resources/customisation/character_hats/character_hats3.png create mode 100644 front/dist/resources/customisation/character_hats/character_hats4.png create mode 100644 front/dist/resources/customisation/character_hats/character_hats5.png create mode 100644 front/dist/resources/customisation/character_hats/character_hats6.png create mode 100644 front/dist/resources/customisation/character_hats/character_hats7.png create mode 100644 front/dist/resources/customisation/character_hats/character_hats8.png create mode 100644 front/dist/resources/customisation/character_hats/character_hats9.png diff --git a/front/dist/resources/customisation/character_accessories/character_accessories1.png b/front/dist/resources/customisation/character_accessories/character_accessories1.png new file mode 100644 index 0000000000000000000000000000000000000000..fc15513be4e28ac08e83ac276674d48daa82a9f7 GIT binary patch literal 293 zcmeAS@N?(olHy`uVBq!ia0vp^2|(Py!3HG1+{xJmq$EpRBT9nv(@M${i&7aJQ}UBi z6+Ckj(^G>|6H_V+Po~-c6&?3BLf4+VS@wvpDQx=g*aXI^eXRV1qv}R zFfu4GFt9K*Ffa%(FfcJVP$oz%a}dsuk78tFNJwM;Tf*93!vF-Hu6{1-oD!MK4!06MD6F_WAF3&o{PA75b-o^w!e40Ih3Pr%Gais+6`LcPY@=Be>Ah?xGw^ z?FkXHIRy+0tK!7XG%idF@z7d#R=6bGz=``%r=SdnsO{nerkd4_f_7P2GhS}#J^%N6 z_yW$y@0^5xope8bFv{qGS<;3p^r=85p>Q zK$!8;-MT+O1y-Iejv*0;-%fY*J8U4}`d0eL%Ft^Qxz~7J-jH`^6Z^t%44K6Yw;ul4 z&~&E!X~~ggPM^ars=QB^v7B^V!Zq+;gYFWiqrB##3C!j-Pkqb|?%TR1C@*We?}p#9 z;x86HY^_M({3gh1<@|7Ix>LinT`miRh3`2=Y`G!CaZ*Z&qq}jtN^JAaY9j@c83&?_ zHh0xO`yJfM$*%Sw?Nccu=ltx+hYwvdn77@+chUllu0=rfhdU%x;B&5uEtRU!&-AYDDs)O6hG40TZ_SDr`}>{!N1-N(RKVj5UjV+F~3*4*ECEzlcZMKyX>R4lsBbJYD@<);T3K F0RVR=#W4T? literal 0 HcmV?d00001 diff --git a/front/dist/resources/customisation/character_accessories/character_accessories13.png b/front/dist/resources/customisation/character_accessories/character_accessories13.png new file mode 100644 index 0000000000000000000000000000000000000000..14607d74e430ee4518c33a7203794a516db71719 GIT binary patch literal 505 zcmeAS@N?(olHy`uVBq!ia0vp^2|(Py!VDzYJ{5KXDVB6cUq=Rpjs4tz5?O(Kg=CK) zUj~LMHK4i{28LfC^)DD0N(~qoUL`OvSj}Ky5HFasE6@fgAsyfo;tHgFOc)w67&gvj zIK7kM|9ggzkg&3{3ZVF-mZFP5im@cfFPOpM*^M+1C&}C0g`tC0)&t1lEbxddW?Tu9L?6l>}S)yB3Pb*uc+a4Acc`@@j`AJN~n-pU7q~>uoOuDgU_7bsL&Z`o$4Gvwpxa;q|t5<#qwthIL zeNBFu2Z#J>r#)3G{aVDLnG`cMMgQ2%Tln`NkB^1%;j)!W)!tP2-0j&t-&X(n=eFak zTI7FJ#Vs;EdAT6%`|O1gUBOR&3a~f=(GHOnCq!5IG{-D+)VB+^*qh2#zO(6c?#r+D o&o0Q5`+RQorc)xD^o5@boBVgEE^B$=0t`+DPgg&ebxsLQ01+e02><{9 literal 0 HcmV?d00001 diff --git a/front/dist/resources/customisation/character_accessories/character_accessories14.png b/front/dist/resources/customisation/character_accessories/character_accessories14.png new file mode 100644 index 0000000000000000000000000000000000000000..5f617b867ceae7badf4a6691f4e3dfb058097fbe GIT binary patch literal 525 zcmeAS@N?(olHy`uVBq!ia0vp^2|(Py!VDzYJ{5KXDVB6cUq=Rpjs4tz5?O(Kg=CK) zUj~LMHK4i{28LfC^)DD0N(~qoUL`OvSj}Ky5HFasE6@fgAs65i;tHgvPoMe!|NrgV zcVD`6&Buh{^iGC`42F$!fiesg9J@XNDaMi@zhDN3XE)M7oFs2|7lsa2Sq~tGv%n*= zn1O*?2!t6g-L3lrRABGv;usQf`0dn8SoVM>x7;NW{r?G(tEQ~ z;BUu=c9qpL0-74KRT!*GbezmeI+UauolQ1!NH|TYYdP~-L7;ts;L%-f%qWvXpVz?fW$<+Mb6Mw< G&;$Vg$kLSn literal 0 HcmV?d00001 diff --git a/front/dist/resources/customisation/character_accessories/character_accessories15.png b/front/dist/resources/customisation/character_accessories/character_accessories15.png new file mode 100644 index 0000000000000000000000000000000000000000..161b4e77320f24c0b124fea0e6feadc96c8cf6b8 GIT binary patch literal 517 zcmeAS@N?(olHy`uVBq!ia0vp^2|(Py!VDzYJ{5KXDVB6cUq=Rpjs4tz5?O(Kg=CK) zUj~LMHK4i{28LfC^)DD0N(~qoUL`OvSj}Ky5HFasE6@fgAsyfo;tHgFOc)w67*6kG z*f^IVBqZ$rdxo;I3ZVGjuf->U6k|z{UoeBivm0q3PLj8~3quF1tOt<8S>O>_%)r1c z1j3A$?$-SQDzNf&aSVw#{C2vd-(dp**SFF~R)$`i$i2q%@`k)So7fkAW5_IKxb^VQ zhNd&+PfLz0bNU>1QRRKQjOC=`60U*&8g!R99pyC_O<*>!dFo?!aNpK7L3vrzeK-7; z6@RhtVQWPK=QlxCE9Zwx)14Zo?Q&TlEPT%~V#^I7j+0VK9NmrERbrcWRvRgp%s3Eb zw7IMP+3(<1PIk2iX`f0NIp=3jK78n!!MyDjzLOScbS(m+Kin~S?>zFY#CLD`RvdZE zRAZlQoydnD&%XbNzQmv&?9XzjCZd?P)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw0000R zP)t-s0001&mzn?n|F^fh($dy4GBi|FR(5uH0001za`Pkr0004WQchCsO|qaHF?j^=M>RM?5lJ20|HDUqB`2bu!dU->)J3s99D^OvoUi zCWP!B?mQt#+JuB)LwL8v1mIp;n${ZIe<$$HzGalq0YXa%JLwlh2tT4BgfThazE?UaPFP3 zFYusLK0eOAL^d2ZEy0`!QkBLrS;Z}C47pkt=J z9nY(l>=zX&1wV@>B`;f09U3D004R>004l5008;`004mK004C`008P>0026e000+ooVrmw0000X zP)t-s0001&mzn?n|F^fh($dy4GBi|FR(5uHQ%50gUMv6r07Je*?f?J)0d!JMQvg8b z*k%9#00Cl4M??UK1szBL000SaNLh0L01FZT01FZU(%pXi0006_Nkl)RbBRJZO1-%e;e0|~O@J2s!OQ4YBM?(h~Bj7CsXn^qn0xmp(?j`A|+XCQ|1}<8F z*|5nb5vhBgHUKh35n1XMrr77RBLH%a09j~&f9N3p)T30%8UZ)`hZ^Xm#?ME!AH9>t z&*Q}w1CJVj?#Hq|W|RBckKPM&Lta%B(3$E^8b32W%tg7cP;GTdP~X-j7k`W{|Q1QdmwqRKhJD(Rr`kvcBtu5meQWV0*rsuVTPm33@3p4`D+q@H`u?X zeo>(tcLD5wB|cM0iUSfKbLs<0plb7jf`a~C$^F88Lg3hHxpHFGB`~M9swQOVNV!~} zfJHo^K=m6(^7wjd0oAWoz+SyDcYq~ri2zPZE)b9G8J2%B0|L&>&~IvKQC(ph?l*Mz zqvz#zv%)sZNCEx4SUJwqaAx-_kv7?`!t)XIq&lAYycOX17_|cA*UPvK;P{7u`z@Y| z{Pf_LEdU=3oA@&YNDJd>b3PwT$=T^h2>WA+NXzaBVrJh#3y=}gI)8LLgHr&H04tqu zHI!$h07x_f^wIshz4wI_$oeP%3A$eg$OKR%XxA3#ejPZib|Y1wZCa33&0Yz*o$;nr zJz}%wcbY+uc`Eeo&@}eJ%PvXp1@~cpzv+!=d+uEee!)fveFaq c{%6Aa1BZ#2uS@M@?EnA(07*qoM6N<$f-w_X1poj5 literal 0 HcmV?d00001 diff --git a/front/dist/resources/customisation/character_accessories/character_accessories18.png b/front/dist/resources/customisation/character_accessories/character_accessories18.png new file mode 100644 index 0000000000000000000000000000000000000000..71a7655d1c6bddceea4a43d63a1ee1f30c1a40b7 GIT binary patch literal 754 zcmV004R>004l5008;`004mK004C`008P>0026e000+ooVrmw0000U zP)t-s0001&mzn?n|F^fh($dyUGys5T0L!@mv7G<_003cFbuRz_00DGTPE!Ct=GbNc z0004EOGiWihy@);00009a7bBm000XT000XT0n*)m`~Uy~BuPX;R9M69SFvv6FbtJY zsI#ndZ;$KVt*Ox;un` z;+sHT*bxiw*93aG^bQvT{7U-uBhwGKQA@u%6w_nm8}n#(dhj=IuQs*#*SQ2@f3$DH zIEDz_>}o6Q3fy$vp?~aLiLBWlZ9vx@>vNF|KW zD4G|Gv3^_ACe5#W{p@IZ5nTimB&z%DFh|U89 zo-Hr&-w~i=ro0@_vy$v56(tG$EQ*voZ6T@97$E|rg}RTwANOJ+fLkzUzljG0Z61lh z`SNkzwkW^3YdjNyb&Cw*i1J$l>A+n+M(k03YjBs65yR!f`^f-e*WC-T;2F|P4)e)? kAoO_pM?^$KM0_{=2fTw;H;WpDdjJ3c07*qoM6N<$f(@NA8~^|S literal 0 HcmV?d00001 diff --git a/front/dist/resources/customisation/character_accessories/character_accessories19.png b/front/dist/resources/customisation/character_accessories/character_accessories19.png new file mode 100644 index 0000000000000000000000000000000000000000..022f402d1615a87322d8d593b410984b8b23fd9b GIT binary patch literal 814 zcmV+}1JV46P)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw0000X zP)t-s0001&mzn?n|F^fh($dy4GBi|FR(5uHQ%50gUMv6r07Je*?f?J)0d!JMQvg8b z*k%9#00Cl4M??UK1szBL000SaNLh0L01FZT01FZU(%pXi0007ANklvW4S=G+6d59MnDSLA_TJAQ3zsZFPb2uQJ~?^EosR%@0dv87PNd9 zOUHZeL$;41AzuHadTopJ4O6epr*DU|Od(i3w}2D_UjZ<*Dmp>{J#hpMx_}b|M91yG z0S2@S%iaepOFB_NnSo`Vy${f-%E*c>Q7`8u-vbjEfnI6gDFlF6#XA>Wff*sv_w3~- z1ms;(8yMd_RZ(3u5qJ&!z<_+M4YRlgN?i{%zzMN-xg)=dU6 zR~PKL0rDWw0mLF~N+P1rSEAYisz|d3#y5{k$Z8AJ4q`DL8IRiNp$WU|VQ07p0J#|u z1SB}Z8W?6J0ND3+i6dM9fPp*Je4L>OzaL1O7)OR2me?&Tg4cheo+}Wz0%+Ty-M~2n zI!i<&ln%Rq2myE-v4lO+t`u|%o9K6@z)eiMQlKVCWTv1&U?s#&z!d$X2_|q8ItAOW zrW+yyO`LKRVVLh7sLsK_G>guH45g?HgU%6~BbY4$I8O=v21c~X0StLChY8d!ati~b zL(^alLsrGuQrwa@ncI5}#2IlC8@TzSuffa9%L|EHgQ<0q^J;0^c9)`hKu8{5{>hO0 zYCo=p9HTeWTuKC7j}J`%y`H}XNZAU6qa_Aj4WP10vVn2Z3fLu$9@|P1hh0736F?!+ z2_U~T0QQKE7%B$ZRMj3P4a>~hj_eZvI7EEpfZz`iUS6L-uKz<`I{Fumz;*n~5qNP1 sTuTaEf#lQmz`kUTK;Z~D|CBzWzu+;LhlJr9yZ`_I07*qoM6N<$g0pKvRsaA1 literal 0 HcmV?d00001 diff --git a/front/dist/resources/customisation/character_accessories/character_accessories2.png b/front/dist/resources/customisation/character_accessories/character_accessories2.png new file mode 100644 index 0000000000000000000000000000000000000000..030a6ae64c34cf2b8cea82ffdc80f13cc2bbf78b GIT binary patch literal 452 zcmV;#0XzPQP)Px#4^T{0MF0Q*Lp(2NUqOg}VbappMO^>?00001bW%=J z06^y0W&i*IMoC0LR9M69mr-)WAP9yr%>fkm0MYaSjoSm*ruRQneO!KaWir#Z^1osD z0Ga3@k?X%I6ulH*TSWY+06v7(<=3o$u-}A*z(+@*3E)^QfQ5?&4g|6U8g+;_2Z*C| zP$?C#0niK}ly%a?CjeD&*r7(~(y-qlU{QeVODIO05Fj#k9U2yiyF{P@zy_dez!PvY z07`g-@aIqqSTnZC0EWXw08i~`)5VJ+`Q7Mpxm+%n>yIVpi)4-`V=@%e?_p**#nAM9 zH&dJ<=GVUIBIIQGCV-xGO=p||ivqv{P1%GeNjm~}3&>>-j1|#`zDIb6L`)!y#E1$A zyPR&9X3VY(UC1yUFJLD~paMPs{4>l74vTsu$A@4W)tcmUA;by5m6GsZd7J004R>004l5008;`004mK004C`008P>0026e000+ooVrmw0000d zP)t-s0001&mzn?n|F^fh($dyUGys5T0I{6_%eesm?*LR(R(5uH0001n-_3&n0004W zQchC-@l5w%?Xww=Rk{lG4PLY5!&ETE5ocNCxj#=8hOas)cZ zq^C{;fKLiIY5<14I-5j<>UmHDh!90YqFNYWpAUBch!FxrssR3}h5UVwLS|D0oXu}5 z;BBb==(_TQ_d@$oFb}s~p%gum)Dji1PDr+ft_fggnnSKz3_>p7G+U^0ybPQQf0RggJu&Xn&{e3_Ix= z_5k&xpCkakuzy4Sv_v_VA*muv0}z0 zFrv0B7i8%OF`Mpzaj~F4`5Q-~;$~?8Ky;0IMY%D6Y*JW`8gP0uIbD zuWM;sUSS(9R&@8H=jHQif^8O)0_u4&a;&G}!0wlMSZCYv&xhBGYB}cfMu6jE&?9@{-uB{+(uU$s85B0$yHT|BE1W1rkRBQbz*r3P<4a!4dfC3Z$+r o-T!qnurID}N1QkU&i_nU&jkp*(!i9#O#lD@07*qoM6N<$f?b$lD*ylh literal 0 HcmV?d00001 diff --git a/front/dist/resources/customisation/character_accessories/character_accessories21.png b/front/dist/resources/customisation/character_accessories/character_accessories21.png new file mode 100644 index 0000000000000000000000000000000000000000..3fd72ef03f8892cbe8ba1e0cf245a5a541b4cb3b GIT binary patch literal 827 zcmV-B1H}A^P)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw0000d zP)t-s0001&mzn?n|F^fh($dyUGys5T0L!@mv7G=^R964*0CskG0002luFRVN0004W zQchC93voj*9;tBK)bN$dBC!S0|g`zSmx3503E7~EZq{-a-8rzFn|&0nFfB$03a6G z&P7*XMhNshyZZ$J`K71~jBlQ*DDUeCyaK*rKt5K6QC0!+cDXUI@!1>wk=7-N#a!nW z^DV&ABB>&*>kMM7F4)f+i1U1^*C(^OBqCCMCCV+JiZpv*eDk=3EVn@AASSD&@u-a+ z>ae>Wc7|I3kc%lnK!GEyfnk&YfPG#kIKn*u7`Ri-XAz3<=bAK$ab$>LiEddDTKzZb z_yS#D0Bsx84V*&2St1&twC@4}1mJDN67~pPDd-S3(Q~H2O$=QrP!l9DQ_ybLN{E|) zDSAf(OyDMT3btPjH$()Qc+XLUe!O>}ItK&OEclQ|C`D-)bdI;?2xgNU&Qn4^ff228 z07IOQVFI;_T*3h1iD|HgAuBU%NiRv0%WFZSbF$Q61sjip4u`Rd99(ChhAfRv5EY&plkqXCpwNj9)58Ueec zy(nJ^`c>odDto17J7kh@oPjO;zn-(y)xI?Z`d>fJ4Mf4hZcbqE)L`Am9HX zPdxooPvAWJ?g`v^1HL8YzCiKndSKroPayRKynjkB(O=GpypNBu`|$t(002ovPDHLk FV1m}XTlW9} literal 0 HcmV?d00001 diff --git a/front/dist/resources/customisation/character_accessories/character_accessories22.png b/front/dist/resources/customisation/character_accessories/character_accessories22.png new file mode 100644 index 0000000000000000000000000000000000000000..a824fc86ac472f5220c6bad21c0d1b91b7821948 GIT binary patch literal 451 zcmeAS@N?(olHy`uVBq!ia0vp^2|(Py!VDzYJ{5KXDVB6cUq=Rpjs4tz5?O(Kg=CK) zUj~LMHK4i{28LfC^)DD0N(~qoUL`OvSj}Ky5HFasE6@fgAs65i;tHfEGBEt#z1PQt z;W&^HpRjQ*Lqi6`)5|~^2IhTp&43hRNswPKgTu2MX&_FLx4R2N2dk_Hki%Kv5n0T@ zz%2yAjF;}#{Q(Mo^>lFzi8%arx+7ncfq-kfk5aVHo`!h~Se);2vkN@tG}vL9xX}H> zja?;myh}NyC;u;-x-b0HDM7_2{gLYL&X>7HCDmK{sT+NGz3jM4`M7~CRNG{3cO9W@9@_7(IFrf;K8dhzoV&7&@s66 zg)FCHi-6M!AsvJEgo}9`&jlQIPmXLa<_Opx2IM@ra3j3qpZHh(-OkGSUnH&P@Gh8; ze|biP{1 ei9?b56Pwl)lFzi8%ar>TWJ3LjhNHpTyNl5z#l;7iH_Ni1_`2Rn$H~@fZ8Q zZEK5_CB?WM-@V*qtS-E5hPKm*dVycErw@CEYMk0-cf@P|yA5lm_x=@PTUK-TL2dtX z+w;>mhKWTU;5F9%5+x!f@ad*Zb^43zIjno#-FG~c)YD-3b77-ipw*@iJZqNc=U@32 zeXzFawgbn{mdP@zenlc8Ck+eKl8RdH-jig!DA4D+?E%N`#FDLFS$4O7{rH9D#ve`V zrUd6?_r7Bq3A1iaOx#tvJxMw2#D|Rbi@HxIZ>~N&|C)y8sp<}~)&GL6mh4*a)!kT{ iL$O7`i9^x;IcwNrL>30`9CVa zo?-p*__zP3c7>PcdT(Bl43yDg*}n!zF_r}R1v5B2yO9RsBze2LFm$lWdH^|`1s;*b z3=G^tAk28_ZrvZC;8#x<$B>A_Z>Kx*H5mxFw)-eW`|N3$w}8d@E;qZtV@`t|rilyP zKit?=QpdZLQ+o3MvZ?#RPn{A}e9|AO{_cF4YgAIbrJuUdhu6!FyOjTno3_@t|MPX( zmR+Wun>IF8L?k=0Yh2TK!Q7?Hq0D72@L*DDz*qXoeL>30`9CVa zo?-p*__zP3c7>PcdT(Bl43yDg*}n!zF_r}R1v5B2yO9RsBze2LFm$lWdH^|`1s;*b z3=G^tAk28_ZrvZC;8#x<$B>A_Z>R3&VlotPRrg6;trQV`gMCr9?uv-tFIYwG6BK{3 z|J$~IGVD`oObhd4B$t zZ_x*9n{GRB{A`&lqv}^AB68BOKrN}L`pA%`jusO``3?OSZ@5$ zv~EgpPIm7*rjan~=ETHZrQ4H~!%lq2XuqiYbn@ovv-7WMXr8L>5L^8(*lNkH1z+8b jr8yK^1e`b&?Vq!TEmpqsM}=Pi7yt~Ou6{1-oD!M1kyNXe$s-a2zLe>A>J6|4B;p1Cueg8J=50%7-C;HqBe{54f?RlekPQ51M z)#GkA$5K-dZq>;Crgy9xTc=fR`n_T4;wMWdCY-%~((KHKXH%!{X9rrrP~dlCdt~&b zQ%mwMw$DDGnlfdV`}M^2%N%r6VuD#;rTvj(uiM$@eQw#(e-RV5zjbaqbe)BvA-{sD WqmIpanL+AtkQtt?elF{r5}E*pj%nWj literal 0 HcmV?d00001 diff --git a/front/dist/resources/customisation/character_accessories/character_accessories27.png b/front/dist/resources/customisation/character_accessories/character_accessories27.png new file mode 100644 index 0000000000000000000000000000000000000000..3d90a5261897f75f0317b6ae36a6bd5b4bb3971f GIT binary patch literal 276 zcmeAS@N?(olHy`uVBq!ia0vp^2|(Py!VDzYJ{5KXDVB6cUq=Rpjs4tz5?O(K#^NA% zCx&(BWL^R}`~f~8u0UE#OUuH-A~rTwR8;gr#aBg;x{@HjUhS+)>f3bArYWH%=lN1*_Y3H;GVDt$j0kQx7gKn{_wnwY z=$;IH&x$)ihYkyszT!H%wWYmEdG5mAtD-ix@>T1ERz0SVNb&yW1&^Ka+piq7ue^Lk#^tt0Ck{eI^gTe~DWM4fx1nNm literal 0 HcmV?d00001 diff --git a/front/dist/resources/customisation/character_accessories/character_accessories28.png b/front/dist/resources/customisation/character_accessories/character_accessories28.png new file mode 100644 index 0000000000000000000000000000000000000000..d653d302359537668d04a0cfb145938d4d7a510d GIT binary patch literal 368 zcmeAS@N?(olHy`uVBq!ia0vp^2|(Py!VDzYJ{5KXDVB6cUq=Rpjs4tz5?O(K#^NA% zCx&(BWL^R}`~f~8u0UE#OUuH-A~rTwR8;gr#aBg;x{@HjU|ij-`2r z&D=QC9JRUZZp_-CeaPa*l*;5^9nIga3Yczr{@j=2r`o$~FBsx4s!F_Vy~F+Y*x7Fq z+SeR|6`!dsydA1=)V^-RTc+z>5y#y&=9S&Z&(8j@&?4XzRl%^8m8bPN)1-?)-!pi+ L`njxgN@xNAk|L0( literal 0 HcmV?d00001 diff --git a/front/dist/resources/customisation/character_accessories/character_accessories29.png b/front/dist/resources/customisation/character_accessories/character_accessories29.png new file mode 100644 index 0000000000000000000000000000000000000000..ac49af380a96b64a8c80f1cd6f5f36432472e2c6 GIT binary patch literal 332 zcmeAS@N?(olHy`uVBq!ia0vp^2|(Py!VDzYJ{5KXDVB6cUq=Rpjs4tz5?O(K#^NA% zCx&(BWL^R}q5(c3u0VSF^qH3~UHkw4e@IA}k&#JRSw+a(dlewnB|(0{3=Yq3qyaf6 zJY5_^A`ZWu?#p$^K%muFVDq+>?|K=(`|4lVRgimxS>)jFc*hr~W*&R-z^UcC?&QkK zpP7mC3>g~YH(leJbx9$VCHLf_wVb<}99MB@S zy7QxNkHyl-Y|oBpY3$jXd3xK0nh!zD`_h5dGcbHGpAhz7E1RdLhU&!S|L#mkXVp8N zHTm7K8=IM4J8!KoKfbpkTKP0fnc@kfc{g8ft+8{qZHlpaD|>uF?a{cIjw=uDXJTM@ az%5rKz%%Rh=^2kfW_r5%xvXPx#4^T{0MF0Q*Lp(2NUqOg}VbappMO^>?00001bW%=J z06^y0W&i*IL`g(JR9M69mO+xlAP7Yz#Q})v10*^ZFu8!~x&NJ}dl$YAR=Q?4{GF5! z3;{F**ZjOj4)E?IXHeAKoT%ude7&wc1X8)UsbYlyV&bc~ihq zhbIyZ=!rp{3o%&0(gci!!|wp{Zx;waK&b;D%Lsspv8-xGE<6JCkBdzRoJrHJlbCU4 zQGzwxJrVC31Tf?)1Q0R^8Pm(am$!*@9#1N>F|8rl<2*f7$XTW|TeF=Knn;cF_|+7o sJ??3{+thwLxLhum%jI&pT&_RX59f3sH{S><*Z=?k07*qoM6N<$f>+eB?*IS* literal 0 HcmV?d00001 diff --git a/front/dist/resources/customisation/character_accessories/character_accessories30.png b/front/dist/resources/customisation/character_accessories/character_accessories30.png new file mode 100644 index 0000000000000000000000000000000000000000..07a7c00cead22163b4e7ec08b2da2d67bdced1e5 GIT binary patch literal 324 zcmeAS@N?(olHy`uVBq!ia0vp^2|(Py!VDzYJ{5KXDVB6cUq=Rpjs4tz5?O(K#^NA% zCx&(BWL^R}q5(c3u0VSF^qH3~UHkw4e@IA}k&#JRSw+a(dlewnB|(0{3=Yq3qyaex zJY5_^A`ZWuV#s$`fycG+lI?_T)=yXtum-I>b;nDvxc$q&@E18w4soma{^uV1_pd>? zg@NG@|KUQfFmdUoU|n-F7OfDTAny(SbvYSx^NY?WJ$;wi|Jh9|q(+>nc4=Xm$-c8o zUj`kSX0`6_N{=kV@6R*XYECmW#4GG%I$Ap~&*qGlyyzd?xfAYO+E#IK zdUVu&;R{`Bx0vh{v9UUSX|C^=e4}-Hew{Sbw=;5A<*l;>IvoTi>vzrJnYB%My$6Wr M>FVdQ&MBb@099Cg4FCWD literal 0 HcmV?d00001 diff --git a/front/dist/resources/customisation/character_accessories/character_accessories31.png b/front/dist/resources/customisation/character_accessories/character_accessories31.png new file mode 100644 index 0000000000000000000000000000000000000000..df282a6862e705fbb292476da66a82fad9dfcc5a GIT binary patch literal 349 zcmeAS@N?(olHy`uVBq!ia0vp^2|(Py!VDzYJ{5KXDVB6cUq=Rpjs4tz5?O(K#^NA% zCx&(BWL^R}asfUeu0VPk1H&E$hLDi3OP8)qpFY#b$fT^SqL6{%|Ns9S(er+Sw3P(; z1v5B2yO9RuT<~;p42d}WcDgn9Ap?3g$r8wl%}jFUYzlpQlA$oT pCpR7QEWgNYyy9G8IM9@ugTnvv1Pw$@s(e6(db;|#taD0e0swA_gWCWA literal 0 HcmV?d00001 diff --git a/front/dist/resources/customisation/character_accessories/character_accessories32.png b/front/dist/resources/customisation/character_accessories/character_accessories32.png new file mode 100644 index 0000000000000000000000000000000000000000..b8671332fadddf689ff59494964677fe2a685d6e GIT binary patch literal 347 zcmeAS@N?(olHy`uVBq!ia0vp^2|(Py!VDzYJ{5KXDVB6cUq=Rpjs4tz5?O(K#^NA% zCx&(BWL^R}asfUeu0VPk1H&E$hLDi3OP8)qpFY#b$fT^SqL6{%|Ns9S(er+Sw3P(; z1v5B2yO9Ruobz;X42d}WcB(D+Ap?OnVdh6S*c|Wrm~C(JNMCr9)jnHVcQ!ZM zFR;Jy^U{ohZi_wV%cfVq_npCJ literal 0 HcmV?d00001 diff --git a/front/dist/resources/customisation/character_accessories/character_accessories4.png b/front/dist/resources/customisation/character_accessories/character_accessories4.png new file mode 100644 index 0000000000000000000000000000000000000000..842df71e9ba6d5eef75b4836fd561ef69ccb9cf5 GIT binary patch literal 486 zcmV@P)Px#6;Mo6MF0Q*Lp(2+mzii^L5P20|NsBe($;2gfRO+I z00DGTPE!Ct=GbNc00Cl2L_t(o!|j+sZi6roMQumw+OAR7E)uMRg1V331eVM?MS}Yu zq3SAlhI%qht5((g9pGnwn*`6dQlhWOaDgVETY(E)i}*4llQFxD5QqdYkw80TE)ww6 zBA{8eP0SRTzzim7-jJm=Gf@LTcWBai3-bbi!IlBkV-Ep+E?p{BAz&ys_y*uoUY4q3 z0*4C$DC#)|EVBo1nSV+IP#wTo`$qx%b97t)j>rWl%Oa6TBoc}KoB}tw#GeM*iD|pJ z129)6&}6_&wtvdP%N@XyWuGJY9!#2f#cDfk0o{|paSnw{uv6&`fm5-gR6qhSJM97W zx^WF-hev>ZUQ>#nhO_Dfs%h81rgR&@cjfHm$8m6VeRFgut-7;n?A*3u*X8v%pFWsu zz+$zn9nO-LSFrCqB>?+)B+yogL?Y2Ykf%=1yejWPXkUYSIocTEfn86W>Y$Afd3MBz c?pHqP??V!Z07*qoM6N<$f}4rUdH?_b literal 0 HcmV?d00001 diff --git a/front/dist/resources/customisation/character_accessories/character_accessories5.png b/front/dist/resources/customisation/character_accessories/character_accessories5.png new file mode 100644 index 0000000000000000000000000000000000000000..4bca9461b1b3d604bda5e0381f7839d0d6ca9d23 GIT binary patch literal 390 zcmeAS@N?(olHy`uVBq!ia0vp^2|(Py!VDzYJ{5KXDVB6cUq=Rpjs4tz5?O(K#^NA% zCx&(BWL^R}5&=FTu0Yz^Mt}PBnH}|smo8n)hoE%T(-?G=9hr+gO zk^Pr%@?F-xT&gCN^}zmvt2R~Dnx!7P{MPBUtaew+^pFXfUzeZfZhPZ@@X6II@T~sTr&H|Q%nxeLnbal3BkRA&Nw(uK z!{NrJUw2Pzjr^ClC-`M@sHUFFGXAS8|@19RRd+p1aS`(IMR~K&izVpq> g7e3BFYaZnPWXgCeZ#3IQx(Q^hr>mdKI;Vst0C{AkSO5S3 literal 0 HcmV?d00001 diff --git a/front/dist/resources/customisation/character_accessories/character_accessories6.png b/front/dist/resources/customisation/character_accessories/character_accessories6.png new file mode 100644 index 0000000000000000000000000000000000000000..b2c6726a8a27ef7bc7dcc3cddf22ccc8893ec8fc GIT binary patch literal 495 zcmeAS@N?(olHy`uVBq!ia0vp^2|(Py!VDzYJ{5KXDVB6cUq=Rpjs4tz5?O(K#^NA% zCx&(BWL^R}q5(c3u0Yz^Mt}PBnHlkp9rcO-|Np;q=~`NT!$gqkk|4ie28U-i(tzx2 zPZ!6Kh{JDZ9LzeRAkcQz;at~m1~XMl^BlPaioY3B9nX6!RQ`8=vGBqxAFIoXTiPGh zN2%AGvv}}+RZ!^i)EDO&U4J<+@hc|0)7WIYLW!?|gW>bE{x%Vd1-cD&&J1%Fi8HB* zhVompeBn}yxL(8|zSfAbI;s3Q!qi)RF%JBqaE*ylaqW8A6V3K zz~{aEyWN{E@xESL;3oE=WOBg+lLX5HhN{X7Uac2h!hZJe_C_<#?5yMox+_?&$*);x zA-PR~<=2tr5}(eR9BDt}aOPO~&q?`an?J|u&E0o9vY%P+rwupbi_d%btMyvr-fY+0 zRcrf#am_>R)=tB0@f7ADTxyy0SPwL%E9<~F;3cHFH{(t%5uRv`1j&`ko jeQ7giMb6!&wTF3Kx7N!?r6hd^O~H zpZl8Q`PGBU0Z%#3UYav0D%&aEf@%Gl=L^0VzJK@ph^UXs;*U;mg53*tUn-w7OPhh= z&#NV!%4QSQCf_@rqxJIdA(ujo~!b$%gsPc3%qrJ2r95 gHv#$^2p;_Z!C)LC@38rFum*_l>FVdQ&MBb@0PQKGBme*a literal 0 HcmV?d00001 diff --git a/front/dist/resources/customisation/character_accessories/character_accessories8.png b/front/dist/resources/customisation/character_accessories/character_accessories8.png new file mode 100644 index 0000000000000000000000000000000000000000..9d4843d7b2851cca446a93ef08246024d31660fe GIT binary patch literal 516 zcmeAS@N?(olHy`uVBq!ia0vp^2|(Py!VDzYJ{5KXDVB6cUq=Rpjs4tz5?O(Kg=CK) zUj~LMHK4i{28LfC^)DD0N(~qoUL`OvSj}Ky5HFasE6@fgAsyfo;tHgvPoMe!|NrgV zcVD`6&B(|kBqXe?tO6)Lspzu`kYX$e@(X5gcy=QV#7XjYcVXyYmGuB}I14-?iy0WW zg+Q3`(%rg0Kn0ebE{-7)hu==$Sk!F5)ArPH?neGYF_X%c?O}{rZ_J}+?0ji&xo6z| zrOy5F=Waeb3^EIci z8wSr5_^^fRcZo0Cnv`NQ%U zr7-?t4~}J-$^YiECAF;Uzdn1J`11s%?CtZ9c1}F3ej~BEJx5`lLEZKJf96Tu9L?6l>}S)yB3Pb*uc+a4Acc`@@j`AJN~n-pU7q~>uoOuDgU_7bsL&Z`o$4Gvwpxa;q|t5<#qwthIL zeNBFu2Z#J>r#)3G{aVDLnG`cMMgQ2%Tln`NkB^1%;j)!W)!tP2-0j&t-&X(n=eFak zTI7FJ#Vs;EdAT6%`|O1gUBOR&3a~f=(GHOnCq!5IG{-D+)VB+^*qh2#zO(6c?#r+D o&o0Q5`+RQorc)xD^o5@boBVgEE^B$=0t`+DPgg&ebxsLQ0M~5F-T(jq literal 0 HcmV?d00001 diff --git a/front/dist/resources/customisation/character_clothes/character_clothes0.png b/front/dist/resources/customisation/character_clothes/character_clothes0.png new file mode 100644 index 0000000000000000000000000000000000000000..dc58cd212b54af085aac2a71fc59c4b0a1874a94 GIT binary patch literal 454 zcmeAS@N?(olHy`uVBq!ia0vp^2|(Py!VDzYJ{5KXDVB6cUq=Rpjs4tz5?O(Kg=CK) zUj~LMHK4i{28LfC^)DD0N(~qoUL`OvSj}Ky5HFasE6@fgAr#;f;tHgfFJF1{=H1t? z-~RvqAIN=q;ra$3#aI&L7tG-B>_!@hljQC0!qCAg>jC6&7I;J!Gca%qfiUBxyLEqn z3RpZ{977@wznyU~_pkwvtEM`$$0;Vmxr{+KnOQ`?&({p9<~X^ai1|yg2^5?ue6DmIDc#k&1K0uvny$9 z)0sIIe`}7VO$e8ZVPas|BmeMf%Yoau83H?W1CJ-MrmjxcpRvYaORh#xda%-c5BvXr z|IXifP)XG_x@m25doa*4hI!(%Tk6;S{qFiCS)s#)Jy~Fl!i9@mo5YuVYhPd<^t-+z zs$l8)46P+Ka`W=n*E292xc%|;&r8Y+eXCvg^XKu*6DoUTr*}&{M0v$B`yW4pUYoBL md@|2qmVT`&kKRN5oy-p(YeecdSbYIn#o+1c=d#Wzp$P!jv#N3c literal 0 HcmV?d00001 diff --git a/front/dist/resources/customisation/character_clothes/character_clothes1.png b/front/dist/resources/customisation/character_clothes/character_clothes1.png new file mode 100644 index 0000000000000000000000000000000000000000..1520acc5ee6eb8e973c77c03c5d81348b7bbdb9a GIT binary patch literal 454 zcmeAS@N?(olHy`uVBq!ia0vp^2|(Py!VDzYJ{5KXDVB6cUq=Rpjs4tz5?O(Kg=CK) zUj~LMHK4i{28LfC^)DD0N(~qoUL`OvSj}Ky5HFasE6@fgAr#;f;tHgXrZD`U%J6?P z!~csw9)s+B1)xp_#*!evUYh7ML)4%p&@IzGhH0$H@gn%wK|@>~Cf`^=JMB zJ|!O|28JK}Pxko~>N_5tJ!Pp4%VhH(eg=hmGa8K-O!l~WrA@rV`D0UPE=%5-T}fM; z&djm+TXQUJLbzNE69dB@`G;3q4&2Vo5ZIv`csz+Ub#=P_j5Q8hay5d|gO%=k*#H0g zcmCFcN~*5WO>3LmgMpSY%oCs8Qoru+ch@J$3LP%&$pUK>E?nf=B);TZ`vUWz-}N0) z1xwFoXf3Ico0q@7o`K=O?T@E_UQ%A@TkXQ1KaXdgP}w6py<6fT$}5)H|M(g7+I+R( llX(WS^lMdl^d9Q(WPbQqBT~P?>I={+22WQ%mvv4FO#uICq>BIm literal 0 HcmV?d00001 diff --git a/front/dist/resources/customisation/character_clothes/character_clothes10.png b/front/dist/resources/customisation/character_clothes/character_clothes10.png new file mode 100644 index 0000000000000000000000000000000000000000..599f0ebbe8064f7406c01534a762c3ab620f03d4 GIT binary patch literal 1000 zcmV>P)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw0000d 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 literal 0 HcmV?d00001 diff --git a/front/dist/resources/customisation/character_clothes/character_clothes13.png b/front/dist/resources/customisation/character_clothes/character_clothes13.png new file mode 100644 index 0000000000000000000000000000000000000000..7d177cc5eda357c824ce6664eaa54607f8b2ec2e GIT binary patch literal 965 zcmV;$13LVPP)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw0000d zP)t-s0001Xc6g_!smaO9|NsBOz{6w;4we7_IyyRGVPQ~EP4NTH@;_y6`3c{5Cn70T<^S@1*?g#O92RA0elwFA|MLbT!-hv z@-v$ZML-Z(rX&zJLml{wR7nm42=#`lv$?MHS@;39lGJs;Pz{powxGVftM)&EV7I0E z6F~xk5Zo|el%RkG3l_XNfKK|nfL>|Y$|nL!0ln@7YGh@=C>WsOi&DrCcyDVY*dT-Q z9WsmoSkQS3nlTlHLHR+z_D%&^BZKxAaKj30Wh4{6IiYZVeBphvx@TQe%bo$S*Dk|F8wT zs=50J7An<318oNReh>K2{Hy&vH0*C7J(l4N!PxDNS7o_i!Gc!=t)~lnv4As2$U8HS zhsppE1-VgB&BL4Uz(sCd!c4q41SG*>p5(Y1u{qQh2T&CSd0Z6cOKlL?JYNdqq6vpL zSFVyEHNP-la^8EJ=1ZZsN1m&EPbv!dknYf?I(?L^`&6GCb{!YkdA`R`JMckaB3~0| z2!i^s!kpiL@lc)k*-!|^@sWh%p^|?fSha?=_BcNcpzwT2(gx3$STSFc^ce$fI&64$ nzJv_b-(q<5$b9M7pXvG!Q2eOTcQ5_a00000NkvXXu0mjf_?e_` literal 0 HcmV?d00001 diff --git a/front/dist/resources/customisation/character_clothes/character_clothes14.png b/front/dist/resources/customisation/character_clothes/character_clothes14.png new file mode 100644 index 0000000000000000000000000000000000000000..d35c42fb1a5c4c6d920a1b7e74da8077ecc3e13a GIT binary patch literal 910 zcmV;919AL`P)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw0000R 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 literal 0 HcmV?d00001 diff --git a/front/dist/resources/customisation/character_clothes/character_clothes18.png b/front/dist/resources/customisation/character_clothes/character_clothes18.png new file mode 100644 index 0000000000000000000000000000000000000000..7b302d0470b5d38f2a46424212366a8b513da88c GIT binary patch literal 977 zcmV;?11|iDP)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw0000d zP)t-s0000cR8%d4gD{zyG_ta%jSm0TMBlg@IyyRGVPQ~EP+b|F$?H15cqzn}3DWu#Y=qaR#TzZMEMbcw|{-DhVihjUHr~N>Kejx4(8uW8r zNtCop$4Lt05jG@cYum3ub%Mo3 z-p#;c9bm2F9A1I8@EO*sUjt5}73A}N)r|oPB3mF29(h3cRPTJ$K&dOu_klGpml&Kg!Rp*ADu5MxLkV>O%t6dqLkVYe!Ds;PgbtKK7`iCM zHx&)wgbk?fk8TU!Q+9m_@!jU4W}a*hnto%C$iUTaRRa4*6`ouV;z#hgrhK*)SNz21 z<<;#?di-P0=5U#%>IoAjJTLs$+C4qGe`w8RL-h<40NcuAb6<1(uRb83yI*= zL2_Sc#s@t8YyRDv8|c#&J8XpuOn~49x)O8F2jC9;hLGk+%o*SOKwvvJXPdHje+X+z zt|)=^7iU7h+YsL7I=m+XnXPDpT-N6Gj_`Q+XS-Y4u)C&oQ{o-MvE3f7(sIIt2~P-_ zw-5DbfmT6?7jBG)QiGxs^aq73bpcT8qCdI{*Yd?+5Cub?gjr96#ZY^0@X~gIJ}$z1 zsY1b!FJWBNLci&!Y@^_^v&4KU0Omb0Uy|WV$7|cq$#w!=#~J!q#~&s0b*ztuRd)mG zq+b-)nD-33;yOMTv;hVAFror1NIaBBer!ktO?+f%Je2Z#f?4HM0>RviA100000NkvXXu0mjf8uOyg literal 0 HcmV?d00001 diff --git a/front/dist/resources/customisation/character_clothes/character_clothes19.png b/front/dist/resources/customisation/character_clothes/character_clothes19.png new file mode 100644 index 0000000000000000000000000000000000000000..41181b80e875b61f0b0004d2bca93f4906b27ad2 GIT binary patch literal 977 zcmV;?11|iDP)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw0000d zP)t-s0001Xc6g_!smaO9|NsA|jSm0TMBlg@IyyRGVPQ~EPdD0pH0004W zQchC+b|F$?H15cqzn}3DWu#Y=qaR#TzZMEMbcw|{-DhVihjUHr~N>Kejx4(8uW8r zNtCop$4Lt05jG@cYum3ub%Mo3 z-p#;c9bm2F9A1I8@EO*sUjt5}73A}N)r|oPB3mF29(h3cRPTJ$K&dOu_klGpml&Kg!Rp*ADu5MxLkV>O%t6dqLkVYe!Ds;PgbtKK7`iCM zHx&)wgbk?fk8TU!Q+9m_@!jU4W}a*hnto%C$iUTaRRa4*6`ouV;z#hgrhK*)SNz21 z<<;#?di-P0=5U#%>IoAjJTLs$+C4qGe`w8RL-h<40NcuAb6<1(uRb83yI*= zL2_Sc#s@t8YyRDv8|c#&J8XpuOn~49x)O8F2jC9;hLGk+%o*SOKwvvJXPdHje+X+z zt|)=^7iU7h+YsL7I=m+XnXPDpT-N6Gj_`Q+XS-Y4u)C&oQ{o-MvE3f7(sIIt2~P-_ zw-5DbfmT6?7jBG)QiGxs^aq73bpcT8qCdI{*Yd?+5Cub?gjr96#ZY^0@X~gIJ}$z1 zsY1b!FJWBNLci&!Y@^_^v&4KU0Omb0Uy|WV$7|cq$#w!=#~J!q#~&s0b*ztuRd)mG zq+b-)nD-33;yOMTv;hVAFror1NIaBBer!ktO?+f%Je2Z#f?4HM0>RviA100000NkvXXu0mjfKs2Uf literal 0 HcmV?d00001 diff --git a/front/dist/resources/customisation/character_clothes/character_clothes2.png b/front/dist/resources/customisation/character_clothes/character_clothes2.png new file mode 100644 index 0000000000000000000000000000000000000000..debc2960072d1517e14e1c5cf07ac7a7fab90d4b GIT binary patch literal 388 zcmeAS@N?(olHy`uVBq!ia0vp^2|(Py!VDzYJ{5KXDVB6cUq=Rpjs4tz5?O(Kg=CK) zUj~LMHK4i{28LfC^)DD0N(~qoUL`OvSj}Ky5HFasE6@fg!5`og;tHgfFJJlp|Nome z?*iFjn_ce!DaMi@zhDN3XE)M7oFs2|7lsa2Sq~tGv%n*=n1O*?2!t6g-L3lr6g=wb z;usQf`0b29zGejh7xtYDYsC!;7+ZedU;Aq*&s(i{-`SP&YLCyYImSO-N1;Vv|AFHD zJ`Yb7WXOB#yu2W6p1>TC)E0W5M|3{(hb7S##egR4d7Udh4e$P>o!(v(nM4Yp$PYbE?WJwP(z5DM+Y~ zlU`sW^iune)iZIYj{4`%>RuXrs9KSI;eCHiaaH~1_)jH!%K2w}J=bvXmw6@Q+5`b* Tu23t{an^LB{Ts5HmZ#1 literal 0 HcmV?d00001 diff --git a/front/dist/resources/customisation/character_clothes/character_clothes20.png b/front/dist/resources/customisation/character_clothes/character_clothes20.png new file mode 100644 index 0000000000000000000000000000000000000000..b97a1a0a5b0fdde59241c404b4b07635d7be3775 GIT binary patch literal 977 zcmV;?11|iDP)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw0000d zP)t-s0000wIyz8LP+?(VeSLkWjSm0TMBlg@DJdyLL_|0^I9OO%0002{f(Lp40004W zQchC+b|F$?H15cqzn}3DWu#Y=qaR#TzZMEMbcw|{-DhVihjUHr~N>Kejx4(8uW8r zNtCop$4Lt05jG@cYum3ub%Mo3 z-p#;c9bm2F9A1I8@EO*sUjt5}73A}N)r|oPB3mF29(h3cRPTJ$K&dOu_klGpml&Kg!Rp*ADu5MxLkV>O%t6dqLkVYe!Ds;PgbtKK7`iCM zHx&)wgbk?fk8TU!Q+9m_@!jU4W}a*hnto%C$iUTaRRa4*6`ouV;z#hgrhK*)SNz21 z<<;#?di-P0=5U#%>IoAjJTLs$+C4qGe`w8RL-h<40NcuAb6<1(uRb83yI*= zL2_Sc#s@t8YyRDv8|c#&J8XpuOn~49x)O8F2jC9;hLGk+%o*SOKwvvJXPdHje+X+z zt|)=^7iU7h+YsL7I=m+XnXPDpT-N6Gj_`Q+XS-Y4u)C&oQ{o-MvE3f7(sIIt2~P-_ zw-5DbfmT6?7jBG)QiGxs^aq73bpcT8qCdI{*Yd?+5Cub?gjr96#ZY^0@X~gIJ}$z1 zsY1b!FJWBNLci&!Y@^_^v&4KU0Omb0Uy|WV$7|cq$#w!=#~J!q#~&s0b*ztuRd)mG zq+b-)nD-33;yOMTv;hVAFror1NIaBBer!ktO?+f%Je2Z#f?4HM0>RviA100000NkvXXu0mjf=y;&> literal 0 HcmV?d00001 diff --git a/front/dist/resources/customisation/character_clothes/character_clothes21.png b/front/dist/resources/customisation/character_clothes/character_clothes21.png new file mode 100644 index 0000000000000000000000000000000000000000..bd08eca19c8148f9fe0d7b35b171ee6501f1fc68 GIT binary patch literal 2097 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 literal 0 HcmV?d00001 diff --git a/front/dist/resources/customisation/character_clothes/character_clothes23.png b/front/dist/resources/customisation/character_clothes/character_clothes23.png new file mode 100644 index 0000000000000000000000000000000000000000..4d5dc58457efefeccbe2d05ff77571579198371f GIT binary patch literal 2083 zcma)63se(l79O60%A?!0drFsfPD)T)Cdq`!bBO{;s35NeT0pI2n3=#Bl8MPc0+KZg zEd?#oYKt8EfQm(Y;iIy;1fjd9K0sw%=_+W%x-PmRu194NXwdzG#C7+$Jv-;j{P+L= zd%t_{cki8=^whV4=7!CMASfttnJNRU8t~c!{K0q3S=0fRmsxcVo5^Td3vQyIIFiYy z;6y!MKxI%kS-Q4|ih&@X_vow~HYX)nPB3~N?$+U1^+sR~K`~3MMx4-5ESygj&;|wP zuA`d+)1-ovElLrj7?o5Zy{ybcWtOF85oJ0;Msk)efn%(40HCK>9JcC<3}(4i!I{C8 z1KEAd=fE>6tWLps5>!q~I;><&6fEM25ki1sutdf~MPi9e5(Nvvo-dH{g#tt%lZ&F| z0wFy6aDX=xsg-A_5@vmYoq|)yvPLJil0H5nPL+G>Y;tzV+^?aX-95F5RE*|M1!K>MJk3U)>8&HQKjI3 z8y-oMav_0>36vrcEhVK8p%}vuT%3<0gg9R&lwp__6-Rq;o@bvBFBV~_Or*xdD2l2@ zvbcCmg^4AoSd<`+mkK<#i3T%^8wkqdn+CpTZLy!Ul`BmY&N8MfhAHxNL3$y>GUh_Y z2rHE{RfiX4(*}~Um>0Xt^dxH)Wui+cGQq^?;TfLg^mAe$r81n<5(1FFNQwxBme0S?S(@LHr(4TJc>0p4()6t>~V4h51aL!%#zX3tMqC{0(mi5x;7mB+6 z*wCswi^Aixe3K$JD7|ZfYySGf(%887Rmay?`1>yKbA7NXB6ZaVzUS56ae-f5yS?T* z`l_yTL+!=E_AS>-xo`Gx?~iu=Y3lmuVDUC8x8g*m`)>hxK~Mk$#RAD2f0+#^#C{bR5d=Y<#zY`_0Ci8z1uXI^S4*cgT_1+16FQ{GGh)p0g_@6=JNe zF|oWBS$jArEc-F<-qw?+Io)$Y?lL0#u9Hl(t}C*r_DEI0ftX2*trS%?6mc7e9ozMN z7NXeBn@l^lS)%CfvFB_igF`k6FV`P0|Fx}q{krb)ADw#-JLhh1-RD!?apKFdf7E>K z)p4reE2d)SZ`WxK_F0&#JBK^^ons@mp{fzv-v>Gz?__Qq>WX|k;AqOK%o}oi^0~s& zVr`!~>MCCoQa^lfhyR7MdF_3l!Hyysr)_h^l>w^S@Tl}mw_i_7Qb*b=oxg*0v4--uTg$9QY+1PW zMW{!qQ=hEfPk8SL?^==^k0n_blfK9DxVkKTiH502dX<%8kBIKo#$J5;L@cK=PWdX8$ZZWWeT z?(iGfrwNd8?=Sf9Q2#%BZSq)U^Zs?!)7?pF^50BL=_}#pu-?aB|5blu7<6j*0?PCr zZr3ejdIRjCr*BVwrnx=xjm!0D-S-nVTlM+sg>_%5mmknyd2Q2Dy`OI*b-p0lb+JuT zeWljvwPpDqJLVU^m3;r=fX#IcK9d{zA8bOuHWd`-~O?`-RJdszUSxuyg$$9^&Il?+M=~&%@P0r zv}hhwU*#OCd?lLd%5h>KvOzf+irfN4enPG&ff)k=E*v2Xgwy!UFwhrdauTCEKqmlD z&EzoxMS*lr5?jc(V=mIziTP1VZUAtih@+V7y`Tur0>gL$GGer`2?6JE$cO+u9ZipN z1;cqBNim>bk{5%Ww3kifASj#QPGXW$03Q@F;bMNIAeJO1BRi$KSaz{pli$qZ*6e=Mh!7jnxP8bu0!Vrl>6dH@dVv$M;WNe~9#1tb1u@+w? zP{CMs3@=K=6AIvq5}7PvoQRB2TKd@qeiWVlr(i+smp~~)h7vQQP#8NjiqBv4>l1aX z$QS&d8GlP1%Sem@QNCcTFfN9z%m>%vE3-0o|Ey?{P-zXxJBFuB3Nw-_WXJJAfrv&W zBa}CG93F>+WittE49G!pK}QgYCE##KCV_=PvI#6AmWab~F$DXsa{i8=N+qHRSa(-9 z2cioG+rP!JOM|T5W8+MO`pA{f-$^!kmDXB4B99RT<7Ltg@VQ^d`7H`i55nuQ@e~I5`oGMS0enfpWhlFE-Y!-*h zLV|dLBNBrF@kk=u5r-t=2?R8nNMPAJvJfbxiKs>B`~^y1kCgaaT>e=Y%FUmp1qzh) z6r(I0YnM?N0Kj-OstZH>Sh2@Da;3jPTG@#nog>cMYIDqk&a{2B(RB!1u9L$(|J~rB z&h(o)Wj3m91vc8IM;s8wG);ZIlEO^a(t8J!O8A6(;kLY!OSU$5O0zuRy4{XVbu-nkwnp;q-ImrIqo$!Udr}fMa^I`U{tWi={@bdw*)7H^?)0*+9KE+n zQdCF5!q@le4Zg21+cvc%i+|P>FvBjrq6xG)OXG4+Tsrir8^xO5*FY7nT-)TlS+CFsp zBWCPL2qndeaBGxk|U*cb*IisZYmU!V@0xSj587aXOntwk~Qbwq*lxPcAhyqzw@II zt3I>=u<0!pGBYJDRW05Y0Ll5cC}y3l)*XHI)_zJw#J{xhiUH}d#^uu*V`#K@LTO~VgCG;+LK51ClWpQd|#9|?(sc82F$t7TS zG0~zhTS`n+2Qq8uhVxBDH?k>R0|HOTEiaR}{XA5Ld@GDw2OrH6lmBOD%mgj%X z%~s9L3@IcI6>WSNU?Mj=d|j$v`T*+VqGb}zry*B3tBe(`-lv}6K{Mt2CL4M>uTAMJ z%tYNjrnZ&yATdI{YIpt}vdYb%Dm6Ewyd$u?cA47)juzm6_3-va0@*yrrL8CnyQVqu zL2#{80R;BU)9YjW%$f`84Ij$ZsdX4wJ@fnl+5$JUC^^yEq^}trOXvkEEhPXgqtDvQ zJ6T_G!vBN0ocU72cQVCd2K-QV)Oh6Gp^X)n33+RVNgC>{!y&1=*t0QXA>>6OTH!5T2C9RlKBn6BN4FnZMDI;^F}@Q)7X%6<^eFipQD7p$JTN(s$xNz(%V_1pC+;qC_lznxQQWvvhfqxbXa=BH|H zH!ZcC_fEuXCTalEy)DAigiXgVcOfexDAWz}bwL@%{x-!gM^;%k8=xC6${xC$an8M` zElJhmeyB)tl^vrFObHx^p{b6X^T3-`en=JqVUK{*e5* zBwCcf&nrnJHgj=)ZTd^*Q6&{)dDk>#Q7(N%t4nod@`TIX zPS0>(YB6+BB7?~%mkv;^;E}udpvcd zDtpg6?Lh9Qn*Kk1=`XEILW0lK9Ln(P7g{yfYDv(it&C?r%y1^tetLTA)>CziflCn; zUjy}!rzPOk0L=pF>5^}L!cwc}+jVsa3t>G#Ir&t0Akag-FFx_!Y`D?L0nj`K-`qM} zy(DtmIl$R1l2mXt!mQo0NM|=vZ>)v8V~@XfH&xDpR>QQ%|^zS%zvqs`1`_xq|PkC0Ky)mwAZpW`&*Pm%T zGG}(t-@LM8NObPGEGCSQ|QNoo(>4Te#*m@Z^4<{&&-dV3&3Bsn)qe z%PtGwG<7iA+BzMBWNaG6*#i(&iFLazO&DKn11TxQ$5O)GUrj_%cp zWx}^LvL)VKcP?4f%@n`hnCxYANww*I4Sh01TUNEOBLKjS-N-7^qQ@}8G#l3PP`ZNC*HTtwmmk)wr>W+;7kO_0l12khvU%|WIrM#iLn(<%b1D3!5 literal 0 HcmV?d00001 diff --git a/front/dist/resources/customisation/character_clothes/character_clothes25.png b/front/dist/resources/customisation/character_clothes/character_clothes25.png new file mode 100644 index 0000000000000000000000000000000000000000..c9f3f168883b149a8495ace79cbcb244412448ee GIT binary patch literal 4106 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

    Z4W zR_`}=?-?Rv*O}TZ*sna(sI}fuqO?N-+gqgaLZzYExtTzIuaznhK3(5JohTt zI_orFJTHq}GaaAI&r8%m8Bwgz4mHPz37_)M zx8zuhhwGP0fi|vQsWPfDz4e+V7_rlNCTlYm(Lmnv-af2bYKNe2M8Ov2aJ%KM@XbbH z=y2s?RY0X+h1#;*fn=ttkLx#w;uZG>qykGV<4SZS@|B?tmmhSGSY+xK=N4OYId2!Y zO!XxAq%+eC%H|XaH5pn>J@U>nu0vL?j(|ky>6q8jW-;HiyIx$tZybsw@ibjBB$c{q ze1n_v$CGa$8>{0pzM9DNwkWil;#$iNBt@_n%#Wbo?7b_UBnJeD3j5gw?{8f`Iw3J> zB2y}RJ~2$@_?MM2YY7{NUD_nYL&Gd#TJQc{BqMA-`_p_q{ac~T7*9eLh(Dn@a`RH1 R#gCs{n_af}91E}G{{v>6)@}d* literal 0 HcmV?d00001 diff --git a/front/dist/resources/customisation/character_clothes/character_clothes27.png b/front/dist/resources/customisation/character_clothes/character_clothes27.png new file mode 100644 index 0000000000000000000000000000000000000000..74f13d03da0c5b04f15c42a32661f69dcf5325b9 GIT binary patch literal 3888 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 literal 0 HcmV?d00001 diff --git a/front/dist/resources/customisation/character_clothes/character_clothes28.png b/front/dist/resources/customisation/character_clothes/character_clothes28.png new file mode 100644 index 0000000000000000000000000000000000000000..35b6c3d0345016416137dc8a3294bda1c509df01 GIT binary patch literal 4587 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 OtgyFnw0>;q9q}JpPr8Hv literal 0 HcmV?d00001 diff --git a/front/dist/resources/customisation/character_clothes/character_clothes3.png b/front/dist/resources/customisation/character_clothes/character_clothes3.png new file mode 100644 index 0000000000000000000000000000000000000000..e5a4ea0a2437b44bac3cd7dd40d458f37eef2cc6 GIT binary patch literal 388 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 STp;_~kFTwzgGHekDds<4mecV7 literal 0 HcmV?d00001 diff --git a/front/dist/resources/customisation/character_clothes/character_clothes31.png b/front/dist/resources/customisation/character_clothes/character_clothes31.png new file mode 100644 index 0000000000000000000000000000000000000000..3df91de54c501d2a21462da3efdba61ecd60cd9f GIT binary patch literal 3602 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 HbC3ErRoe&v literal 0 HcmV?d00001 diff --git a/front/dist/resources/customisation/character_clothes/character_clothes34.png b/front/dist/resources/customisation/character_clothes/character_clothes34.png new file mode 100644 index 0000000000000000000000000000000000000000..319850e331a8aae187ae3cfcfca1111327653d19 GIT binary patch literal 4560 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 literal 0 HcmV?d00001 diff --git a/front/dist/resources/customisation/character_clothes/character_clothes35.png b/front/dist/resources/customisation/character_clothes/character_clothes35.png new file mode 100644 index 0000000000000000000000000000000000000000..5a19d3a1d8d08f5149b67ae2c695635db39ee250 GIT binary patch literal 3862 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 kJ)0lzyGR|h)#quYu~v41LM!2P5=M^ literal 0 HcmV?d00001 diff --git a/front/dist/resources/customisation/character_clothes/character_clothes36.png b/front/dist/resources/customisation/character_clothes/character_clothes36.png new file mode 100644 index 0000000000000000000000000000000000000000..e07698dd4bdb364d6d81add110dc15f46988cb7d GIT binary patch literal 4174 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 Y`%}>?!$`-+U;glIt(~lH?jywi2Mbst%K!iX literal 0 HcmV?d00001 diff --git a/front/dist/resources/customisation/character_clothes/character_clothes37.png b/front/dist/resources/customisation/character_clothes/character_clothes37.png new file mode 100644 index 0000000000000000000000000000000000000000..e100a8b0c274f19542ba9c98e23489af5bc2c9c3 GIT binary patch literal 3962 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 YT3l=bxcyxN-~NWJ%#N6{j6Kf$9~;E`z5oCK literal 0 HcmV?d00001 diff --git a/front/dist/resources/customisation/character_clothes/character_clothes38.png b/front/dist/resources/customisation/character_clothes/character_clothes38.png new file mode 100644 index 0000000000000000000000000000000000000000..db5145dc66a8666eaaeb55af72df6b68da6bc8bc GIT binary patch literal 4279 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 literal 0 HcmV?d00001 diff --git a/front/dist/resources/customisation/character_clothes/character_clothes39.png b/front/dist/resources/customisation/character_clothes/character_clothes39.png new file mode 100644 index 0000000000000000000000000000000000000000..4e518a4154784cb2cac86f45bf965b4e8c77e724 GIT binary patch literal 3030 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 literal 0 HcmV?d00001 diff --git a/front/dist/resources/customisation/character_clothes/character_clothes4.png b/front/dist/resources/customisation/character_clothes/character_clothes4.png new file mode 100644 index 0000000000000000000000000000000000000000..ec0519e7e159552a037c3135e43c33f47f63ad1f GIT binary patch literal 354 zcmeAS@N?(olHy`uVBq!ia0vp^2|(Py!VDzYJ{5KXDVB6cUq=Rpjs4tz5?O(Kg=CK) zUj~LMHK4i{28LfC^)DD0N(~qoUL`OvSj}Ky5HFasE6@fg!5`og;tHgfFJF1{=H37Q z{{z{fI?GlADaMi@zhDN3XE)M7oFs2|7lsa2Sq~tGv%n*=n1O*?2!t6g-L3lr6kP1- z;usQf`0Wixt|JOOtQRbb8Naeb=?8rIS1w&1T(7WlbeUvX$xmDD;RKlp0Q&SS?}-SGH-+QjP|dYd>p)7KaVi(UBfshV1a^r3DfQM zt}ZU-Idv*u{vW<&AF|;1*Ppw;6(8g+Y(8&w!2aLr*$PTZ-h0+;XR5GW!nWe~VwZwCCN)=l&=xsvqcF22WQ%mvv4FO#r>>c!~f3 literal 0 HcmV?d00001 diff --git a/front/dist/resources/customisation/character_clothes/character_clothes40.png b/front/dist/resources/customisation/character_clothes/character_clothes40.png new file mode 100644 index 0000000000000000000000000000000000000000..4ef018d5a2dd641021de33c9589be51a2eb7d136 GIT binary patch literal 2228 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 literal 0 HcmV?d00001 diff --git a/front/dist/resources/customisation/character_clothes/character_clothes44.png b/front/dist/resources/customisation/character_clothes/character_clothes44.png new file mode 100644 index 0000000000000000000000000000000000000000..4b363afe3442fc8fd1b81ae7002a25a67ed1190b GIT binary patch literal 1085 zcmV-D1j74?P)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw0000m zP)t-s0001Xc6g_!smaO9|Ns9KHIGnGP$5vjVPRo?eSI=+@c|XAIyyQuLa0|@r2qf` zaE^Uu00001bW%=J06^y0W&i*H0b)x>L;#2d9Y_EG010qNS#tmY3labT3lag+-G2N4 z00Uh~L_t(o!|j;APZU8E$7c_!%N9E`aGq4`&WXh8c4shzO5G{2rl6I>kSi#}nYJOzSOkki#}@M?tyiDV@e z;P=y4R9Xoz|1Mdm@6m-Vx5I0_#HW20$4M(Y15SXcWhdPM;R_ue;B=35nZ$8+hG-KJ z;7nvI7~lGW^El1o#l2!Yy^V2k%^qi;S>P56c&3BF3oK7GmRL{-&_Kw57eIyI6Ad7M zsBCC}MN|UT1sWmPl7$;G1b|w=noFg0;X+It6rO!@V1GLX{#UHy_USPi4T0a=wA-%% zFdEt?e~<=f0#P;;h!9Pnw9-nuaRv(A<$%RDJnmi~U;?y#cO`2l=L$qX2o}hTl}9ik zic46%6)*)8I!rw5`Gx?jtsUm~VewVX0gE+FAf(GriiK^ACb}Tu6K73Sys^5a1n@36 zLzN@s!$Sw+0Ydo}s#d_b+k}T!&4hZz9xWy%{1BkZ2mJ=2?_Lv0y@z4#?;=#fEJ!$t z0IdW3_zT(v`f0}P5jxTs> z^<|sQm#FmOILRkk8!7O3C-&=mn5Zq_biQQmhe^EF%J$?X0C}J8&`p4BzBKtZjnC$% zPJw3T$6wAxarKjU?&m;$3u?X;g87nT2%G`T`O=xVx(9aId?_^MOG5Gs=SxER`hN=6 z=S#m1>_cO|( literal 0 HcmV?d00001 diff --git a/front/dist/resources/customisation/character_clothes/character_clothes45.png b/front/dist/resources/customisation/character_clothes/character_clothes45.png new file mode 100644 index 0000000000000000000000000000000000000000..b27e42d879bf25b31b78676c762fdebb3b2d1e9e GIT binary patch literal 1085 zcmV-D1j74?P)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw0000m zP)t-s0000cR8%d4gD{zyG_ta%jSjJ`uiv;E-`(H;|NsBiL^?V;VPRoVP*8n+eEL;#2d9Y_EG010qNS#tmY3labT3lag+-G2N4 z00Uh~L_t(o!|j;APZU8E$7c_!+va8lPC|@fcTOZ$w=;twRO(KFH3hAlhMb`hlZy!* z2SF}W{wTN@6OD!KSs(fjNc;!jKalu0IQ#p}zyT&SB>S4poA-I&of*h`dk>+~N-OPp z%`qNV07wl!&JnNxhXwINc%uYTfTe&V=j$Gxos>Zq_e_DhNCBP-3cAweZS1sg~}5i207-INjrvO5!*>L$rwq zsEuVS7~lGa^El1o#l2!YxruRc&Awn?8TX0>Jl(WVpb>&CIk=%h0O$p5xKt?*F2uxo;kmta_r*T&SFwq^{e3hX0RQONJ^2NI z;lS;ELQuv|3+Lb~*{SlGm9tP2vp2-ZZ!8><^y0Plb^ zR0To-JT#XN5z4nvbvP4V6CPSO6Y3XxbeK}`Lx5@@^c#e}`%R?G9)^v-i_{4-AmK0q zj1KVQ0JIDA(~i4CbZAz5(>**rw#&cH8H{#an=Y-i(r%XhS93s7A>*^H-~s^~aHLq7 zdsZ7QKxAkFl7}m=V1gOf-`*Cmu%*P^mmon=7)R}pn!xiw|AhEl_+;TNjHB_bsCI4^ zzzh;BfC<~knFa|cV8RcoxvO7p{yfmlVQdjzQ$?zf0RW9Fqe<#m1qdMI>jq%lyV)Oz zZb;l4fP0UCJ7B?We*#_-zYSOP?}L+5m~e6g!;!0dh-t&&XwP;_E3LF^G^Z9n@Rb3A zTfXnF7ULmXfF?jzcpOG{lu})qRVEt5aheOHKt4~Bq}T8FyA!$3O##PGfNVBGgdUve zFWYRsM3o=MNj}k9OMxd_u|KtoiQWQE=Sxm6Oyc!cwkJOU$cJ=?UIJwErSW%Zd?r72 z3N$l6{&FsgYmmfqKL_$#(DS7b%$I7Gz!|`vFP(|&dtjH%mqKg4B$c>uz9dy({-004R>004l5008;`004mK004C`008P>0026e000+ooVrmw0000j zP)t-s0001|r>NA_*E%{n=H}>7P*9g1DzUAvVPRo?eSOO?MBm-t|3qN_|Nj600O8kt zb^rhX0d!JMQvg8b*k%9#00Cl4M??UK1szBL000SaNLh0L01FZT01FZU(%pXi0009% zNkl-&|1wQIdNEqk$U^o9lH7-**NIKA?*H85&v{w&h3l3YMCRtCmWEmt1_=H=T*a$U*Q zIWW5;*VB|*uKmMyTG{_yzB7OZ)bcu;wv!p?j>jA~1Iq4muLBH-&N>L78ZS_>LC4Q@ zLe&oQ0l*hjltln!Q4l~FC>S)%pU|J{ z$8&ID(0D`$a6FRan^-qb6u7V>5!9ByyLJ!A)en-49jY$>1CM{l+a@IStWw8zo3KFV z&1BNbHl;RWgaV!C4lGcu9%1mmz}o{l%{^WKx6nfXbpY)TXcuHr)Tv5zeB$F&_gmue z&uf(Yl!|l_MHF$l;+)Na-x!wK&2a`IP%@46FK?lKj19D{69iDtIbQ#yWCeGBBb|_n zi~t^iG5bC%nA@HZ^aTX)kmc*&vK@PbjOg;z4qR~UepV2+j)@znz;>;EHO=_u_0FVmv!D+17;iUuq28%ZU^fizBgT@<@(*g_O{X$)Y3md1S(epJ$3s)1!E_8XlCSSlL)&MJ z?JcDFOr$Ri4QK+G$;qUd+F=j`dk>TO65U#k4bu72Y7C^`?=Byl@Go1vm*kaOk$$f^ z1j;d>r0;k|002ovPDHLkV1ks7*zN!T literal 0 HcmV?d00001 diff --git a/front/dist/resources/customisation/character_clothes/character_clothes47.png b/front/dist/resources/customisation/character_clothes/character_clothes47.png new file mode 100644 index 0000000000000000000000000000000000000000..f0aa12ab4dfb0e754a528987bb1b1837e80f7204 GIT binary patch literal 1107 zcmV-Z1g!gsP)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw0000v zP)t-s0001|r>NA_*LHSz|NsBy=IA;)I#5th6g7{1eSKkJVIfe!r>ChhZt=;<%K;Uv zG(xCXV5I;60ND)+zyJUM0d!JMQvg8b*k%9#00Cl4M??UK1szBL000SaNLh0L01FZT z01FZU(%pXi000AONkl^j-1Inam1DWO(p zJgKx4P1C@@z`(%3uYzj4`UZj0P`v`J{xQEtpfsAF17Ps|KwE&-rY67(ft`)fi*}l> z>2aacv%LtwT7c2^Qo$Qj5uo$)CGM43g2M@2Sd8-iH9UKVRlYHocsf!OMD8XTTmnQ0 z3mWbo&$WR020{8O(1`^RwYrhtB><(h4r`!C1vl~w!4lR)z=dPnwz#cZdWw7nt=F(f z0ulj6+}1?E3P}7UFIC_Orj)p54qgCIc5D#<90h<69|DMj&nE&%1t`qN^N9p8n)orw zCr*loWn=caQ^Y>@rx1U%%BKT+PPNtwaqsElYiIAJ11Xba>`j6ON@-ERaYz<0FfcGM zFfi~SqBB3G101 zTlTzMGudK$)6AUnl6~oFRHF@DZ4}t_2uo zzo;fK_-Y<#zX&Pr3a9{H_KU1X^D5x_^*`&H;C+Jb{W170*3Q4}4>?^6(C_;{b4|dx z4@HY31;E~8TML*w1nhqSH82IjPaGWqT>?1A_hj$kMt+ar*e^nHzo;jmPte{k>gJdI zqV41TqOG}KlnFlAFWSm_lH5Z=d%x(J_lutG{UVwD*bMq~zi5{hoaiSE=fALDM4#vC Zz#p80C*li9LBaq4002ovPDHLkV1l?A?dAXg literal 0 HcmV?d00001 diff --git a/front/dist/resources/customisation/character_clothes/character_clothes48.png b/front/dist/resources/customisation/character_clothes/character_clothes48.png new file mode 100644 index 0000000000000000000000000000000000000000..b83c3d0e33c3fd0f0216c1b23aab7959876f3ccd GIT binary patch literal 1095 zcmV-N1i1T&P)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw0000v zP)t-s0001|r>NA_*Ctd{=H}=vgM+7y4zaDTFqxS&va;W}8{ggE|JFo0Iy(RV|6yTa zP*6~PeSH7`0LB&-X#fBK0d!JMQvg8b*k%9#00Cl4M??UK1szBL000SaNLh0L01FZT z01FZU(%pXi000ACNklz@&b=_-VC@_qk^m+M82roxRRPQ& zLf{HDf`Jp~%uyErl#Lnzz*Ye2;Y|Q>)boh|xB!Lg@w|c|MwvgLyke&qmuhU85=E9V zO+tLs%JYJhQHKE7l_!0zklVGEEdTA9;w5rFqFsEj{kAjFw6YKe+vYeUv&4I`_C$cJwV(XzSIDy z?i{xMhx?aB&xfbv(8nps-u^pZKmY$CpD!(-qkH-6eviJ>Alz>rIyyQ!Iy(LcPO}nl zXTIo6aAlzJ9-56Qpy7a*(`VBXVBC?wUQf`;IRj3iU_z+G?NNZM%oiOATsnIrnlDNe zPX$yUUFM6x)18xmt9e3uBzQeRC%3lQvTW^M&#;3%3b3zT0-gw}n*`fe08pQ*TY6#E?w)vtU&KI==v004R>004l5008;`004mK004C`008P>0026e000+ooVrmw0000R zP)t-s0000wIyz8LP+?(VeSLkxz{Awk*Qckb0000cBW)4@0004WQchCU9(R1-HwYSlbW^(c;SoUrxB`&D_uqbvCQN&LXb8N^fO+@L8h@|R%$f312wd^S#b&@5 z^MLUNMmI+7iw`cvwcXdCGN8{1I0NP8#pC~>Bw)%oMzya2GZLV??yJ^*#y?e}2IJF; z@nc^z;P91FgCc~N6z^I9AqW6K0J0%S0B^g83EBnb1jI-N^b8A3JkClb0(zRz8$ZzmjIV)~%HB*6X{mHP0ST}x-6=raW}2Y*9w7lT z&;bNb><;kC60m`&7dn8oxgS^pu$KBO`={-%nuFL1*F3C0pAfVF8D<#2caI5lh#U|WSn1i@ z@i-o(XATI9_dQL3p2o!(4F_xqv^X1BXk6Sd-ZVj0OQjCt%HmT~Y=r>Y!X!2a$>LYw z0CD5~i06NH2a6r!X@7VXR?~qkexn28LLZgH?xE-h$@YEVXj{cD$P&=yYe=(r?6vM` zr=9kRCcAV|9|mYVGFqz+d8j2Y8Lrw+9inkmIiC2%SMs-6`51~~MkkO|CA zAgxJ&T`od>3564=`VwkCDXyy^WecDbKjX91QuHMmVvg%t%4`9IGQ&ZQ5TNQyx4Fdc zb=3v%vd<9#JsjT$Q;v5PFEXI3BaOb)mH3g+3Q(O7Hf^}{7hf6s4uN# w05|Gged$i&@+0~Z{Q{BDh(~YeOJPaZKVfx(Td^_4@Bjb+07*qoM6N<$f*_}m-~a#s literal 0 HcmV?d00001 diff --git a/front/dist/resources/customisation/character_clothes/character_clothes5.png b/front/dist/resources/customisation/character_clothes/character_clothes5.png new file mode 100644 index 0000000000000000000000000000000000000000..70d28602ae98988d2b175f10add9007be46cf6a3 GIT binary patch literal 356 zcmeAS@N?(olHy`uVBq!ia0vp^2|(Py!VDzYJ{5KXDVB6cUq=Rpjs4tz5?O(Kg=CK) zUj~LMHK4i{28LfC^)DD0N(~qoUL`OvSj}Ky5HFasE6@fg!5`og;tHf0($W~3n;8}^ z1Tw$-lwJf~bp9zYIffk$L90|U1Z2s2)~TlWVjxYX0d zF(l&f+ZzXY4=eDn23*!ln4!?Zs&u1%dr|g}X>STvY5gsC;QD9uh>1(d#pS<4{$k-D zUb#JibEj~g>3n6@aA3}fN7oD!TuPOcx|ZBMV6#SlyJMC?pkB^}>yP&(v@=)FlVaJn z-POf~KPOJ;+yBIs%P+I+T6aHxhXP-WfOy4P-bau3w{a>deR`2wBXZ!m;^hN-Ed!C&KlF({evc|IxYS_gD6gQu&X%Q~loCIEMEd_DjG literal 0 HcmV?d00001 diff --git a/front/dist/resources/customisation/character_clothes/character_clothes50.png b/front/dist/resources/customisation/character_clothes/character_clothes50.png new file mode 100644 index 0000000000000000000000000000000000000000..d36c2f476881a86fe4f2365fc52481dfad8f645c GIT binary patch literal 955 zcmV;s14R6ZP)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw0000U zP)t-s0001Xc6g_!smaO9|Ns9`P*8n+ePLl?IyyQ4007!y8K(dM00DGTPE!Ct=GbNc z0004EOGiWihy@);00009a7bBm000XT000XT0n*)m`~Uy~?MXyIR9M69Sg~%~Fc2ke zH_#}ODw@%v)IAajbd5#+Knk?U547oCpzi3UjX%35k&^BR+ev{e0dz1d9N)VqO2ZxX z7+YeAC0;i;xx9cNb9^}=kPvv)3>Q-E+*boG_4o`T5QE?`1y zvgOJE11;q6YRl_6&sYXOl!HLeVwiF~pltt;-Ty}L@sKe>-#?JNuf_sBg$OLM#1d~V zaNl~CaP@hor)h9XASHaTbvKTalLA0+4lT&m?|egX(kg*a;DSP#1{VO{S==fM)p&=x zH?L>`2*6a@VglQ=xIoZ%1OlLd7l7Q5JNR2t00Tta;05T-MM(-gJ_z)=!wP@omf=13 zBMEPcTkrH17u*S{uZaX65A5%tfEKbNd!ikmrcaL#Y5Rwo!}&Bz*-I?3#M_Gh8V;;) zTy5EXy&#YhxNUv?DL*eDt)m3H^Bq2WR}_b%bV~_#XH0<$e1UORJ4Fe70dCI9?=a3b zfG0zc^inP@TNAuVnk{1ThUc>pH+(E;{xHunfnSOu3w*>qOEoAH+ z%2+0~5MS^Ld>`CD;)44>=^NG&_A)i(f ze<_dnT#y=2sa=%fy002ovPDHLkV1n+8ml6N~ literal 0 HcmV?d00001 diff --git a/front/dist/resources/customisation/character_clothes/character_clothes51.png b/front/dist/resources/customisation/character_clothes/character_clothes51.png new file mode 100644 index 0000000000000000000000000000000000000000..661fe61988378130a9ce6891b51af060ffc9cfc6 GIT binary patch literal 972 zcmV;-12g=IP)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw0000d 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 literal 0 HcmV?d00001 diff --git a/front/dist/resources/customisation/character_clothes/character_clothes57.png b/front/dist/resources/customisation/character_clothes/character_clothes57.png new file mode 100644 index 0000000000000000000000000000000000000000..6d59d65ce2f9a5535a62f299fd8f01bbce32fb37 GIT binary patch literal 465 zcmeAS@N?(olHy`uVBq!ia0vp^2|(Py!VDzYJ{5KXDVB6cUq=Rpjs4tz5?O(Kg=CK) zUj~LMHK4i{28LfC^)DD0N(~qoUL`OvSj}Ky5HFasE6@fg!5`og;tHgfFJF1{=H37Q z{{z{fI?GlADaMi@zhDN3XE)M7oFs2|7lsa2Sq~tGv%n*=n1O*?2!t6g-L3lrR3PN( z;usQf`0b2nzGejhSN0nWyO`vpGZOw+Yy0MKmrq%l>2o>7kEiq8$EG@-Kqc3}e|(>% z>_mJroaeAC*bt@^{wJ|k_}Ax4ecyS-n9LT=HauDuP<~kA0L%T}>aXj*%-I|0ymUY90Nt3CVh&0__5W1*MZU6=Gx2#*?XUKoo+BKsah9& za7h=_ZL!2=jv0-@5fvkBWQSnOjd;LG@e8PRgy8J(?Jgfgt vPjgy#Se>1pp)n_>?RrP4nnKXu<#!leOq9ZV-hB893^E2!S3j3^P6yi>Sh9XiYUNR4B}yQ#D9Eq3|)KYqp3MUP~e z`Px^k+ETn>%bDASi#)Prmbxfi+&}qWtQhi|+aIvN5?Sc-(mVR#C&4ql4kUqF0!k9n(ks zsUKXGCcd~?m2Jj&{d_^lc@~8O>A!s#tYxm$?pe=P(eQqSb(X>c7Kg;c)>mwVq(e-v zoUz}v?zy^O{o&BioxhK*rq{uJ zPuPQKmUA~IY>v7;`SAh9{-ZK{96RJz@R$X(u`fAZKU)Q)zfkh_?Oca>>P!{^EU$AM z4(_hMw}#hFSAgTy@BOyI2?h*}v-MZ**ZC#*!FBJ_hnrrwJCrT!yR%82@n4C?VQH5q h$^x2C|F7J~n8faR-*r)v12Fg*JYD@<);T3K0RY`R(vkoG literal 0 HcmV?d00001 diff --git a/front/dist/resources/customisation/character_clothes/character_clothes59.png b/front/dist/resources/customisation/character_clothes/character_clothes59.png new file mode 100644 index 0000000000000000000000000000000000000000..8a24fbdcf1d78217a76b3455003bcde05eb14979 GIT binary patch literal 550 zcmeAS@N?(olHy`uVBq!ia0vp^2|(Py!VDzYJ{5KXDVB6cUq=Rpjs4tz5?O(Kg=CK) zUj~LMHK4i{28LfC^)DD0N(~qoUL`OvSj}Ky5HFasE6@fgArasc;tHgfFJIYq?c2?p zcmMzYzxw63s&gNKg705{lm$|ZB|(0{3=Yq3q=7g|-tI089jvk*Kn`btM`SSr1Gf+e zGhVt|_XnsT&eO#)B;xSf83*&44Fp_recmZtu@0SOeWb=Q;@#BQ_ZGYS{U5(#>Y_)o z%zW)DR&6QXu;t9{!bKk0GD}^QF7BWFFIJAF7^@aGl`jP=eM*Zy#5=+58AR@3X? zz9;NKG|Rag6E;WPp8WU#WB*YZK8_u7D|pNT+Sr#Iub-^~(qAZf`*yCwJas0E0G8J| z4hMJF-&@0Lrz^nm>i2$I;RFMQ#@YHS_v`!;{NTEG>BCJg+#Sl6_1)Pd&-kxIeVScPi-?=JON`p!Z7mdD@7qwkfwJ~GU%skr8+$#*!evUYh7ML)4GPUtQNw+K zRWac=?Onco;a_&RQ095cnl1xvhf)qHBehkN8Xans<$kl3GMKSQg>-v5Y5nls>C_an z?Y~CC0k#LLZJKm8B+DEx+^6LGaYmv<4}*!qw7My~s_Ig9oaJBln=vCJJn2!8&&v!2 oKTi|BSEm}TJA3_q`Fp9lQ{Kn1c`koK zRnCYD-&x}3NA6TT1ay0C`X_jQ)@PWnflsVJ1%6r8Q4a+1LnO~G&*y;0{X;H&{ zfmJc#H|<@%ec@krxKQSK%9<_%ZHH10DI>L2lNudrl;wW2l`@#INQHEJI%)mz-Raa6 zv+ch|!U47it8JQeHYCd&FWjf(`*B91L=S_B!nC?6yQ=C^cAVv3_nR>zBRuI*kk88u p1wT&{zE`Ijt~-1EfBAcJ_W!hZdv&A^~y@O1TaS?83{1OTjQs7?R? literal 0 HcmV?d00001 diff --git a/front/dist/resources/customisation/character_clothes/character_clothes62.png b/front/dist/resources/customisation/character_clothes/character_clothes62.png new file mode 100644 index 0000000000000000000000000000000000000000..70c6494cd1351f433ea1a8ac411d20638d10488d GIT binary patch literal 4868 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 My85}Sb4q9e04H(8Pyhe` literal 0 HcmV?d00001 diff --git a/front/dist/resources/customisation/character_clothes/character_clothes64.png b/front/dist/resources/customisation/character_clothes/character_clothes64.png new file mode 100644 index 0000000000000000000000000000000000000000..9038cad7bd9d0d89eb67c730dc0e1b64d4221f5f GIT binary patch literal 529 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�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 AS^xk5 literal 0 HcmV?d00001 diff --git a/front/dist/resources/customisation/character_clothes/character_clothes8.png b/front/dist/resources/customisation/character_clothes/character_clothes8.png new file mode 100644 index 0000000000000000000000000000000000000000..7d6258a03075640b19d8d7424f84f27521e9c176 GIT binary patch literal 336 zcmeAS@N?(olHy`uVBq!ia0vp^2|(Py!VDzYJ{5KXDVB6cUq=Rpjs4tz5?O(Kg=CK) zUj~LMHK4i{28LfC^)DD0N(~qoUL`OvSj}Ky5HFasE6@fgAr#;f;tHg-(;2*`Fev&l zm^T1<3~#6GxB{dYOM?7@862M7NCR<_yxm;OkH}&M25un`X1sK_?hjC~ z&(p;*B;xSfs|R@xEAX@?N?AFyZes9bchHqi`9HVl+0H|cE;wKPzuU6TY>tx`!w2au z+i6TU-^|dv;IQs1h^(5Qd+WM`m+p(~1D(GZKIB)$@|0wMX1%*a@1ld`>l&~4^-CIm zJeOl*V35BvFIV@&q+7ZL%)cY@-yQk=!*PB??sZ1h+V5>Gi-3XiV;Q%o1n*sQi+)|8 P%NRUe{an^LB{Ts5R)uhi literal 0 HcmV?d00001 diff --git a/front/dist/resources/customisation/character_clothes/character_clothes9.png b/front/dist/resources/customisation/character_clothes/character_clothes9.png new file mode 100644 index 0000000000000000000000000000000000000000..7c8149c41dd79e6e20e092e4413b08913b40e002 GIT binary patch literal 1046 zcmV+x1nK*UP)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw0000p zP)t-s0001|r>NA_*TTTV^Yis&3J#V40DT1qIyyQgR8&w|x<0004WQchCmUpxkTwt?`TxH?#-?q$MbJ%qX7<6F-CoAF?4&Oeu`vpT zLZMLnDNLPj-yoQ*JA89?`epryV6yZ4NO1G~n$RC$a@KYTn4dCccX9Hem2lv(* zjs&k0T1y<(U9J~L?~}E!S9l!2Ir9_liJfZAk0z!y)0f_R}0^%Yzqms11NPS}`$hG_mq#uI_B zukCowJiyi-z<9ZN-g^*FX{82hN+_XJmP_aobReza05u5@pin3j3WegEn5Gl<<}CvD z5VocL-yC2>uuRU82>|N;jR7jbj1n%a%pGiStM3yS1LGq7@x8eZfD#Hpy^HPmlD3p^ z0~x^LABem`{nTbz*dSnjvIaCj!Wm(S@&Tx8u^_mCIFv2o23ce`nE;s4tqPG0MSa>iHjwuv?$1U2 zh+3ggC=?3Cckut5K@E@O`DlOxCb?)4>oU7;4_a1>|aZYFK7f8^nH*5_$1Ppmd z02>fTw|=r60tU(Rw15V3XS(&Q@97~zC!+}5cKGHh=otbm7lEHcuR+B2p^_|EJd1}2 zSikqQH$7V5cc`vSIi4>aA~qoS?B1|J;G_%$I177z(6S?ijvtSh+ar`f&w{$=|8zXR z!vs3I$7lDq=qCo@ym?S46bgmnkKjqzo{`xD0$T66ZTQe`PiwzuFhHq!5X`OpA`!0j zy^(OJe-+r1W95wq>VDB3&HbW7y#xD22ZEnhDEmc1(AX~`&HGf3_KWTWtsm((ad(2i z*E@jLdq(v`0$vYFSl{FQqMUmRPKW)X4;u9Li-OprkN1o40@J>yFYFhk{b-Q>0n5!PhCu!s Qx&QzG07*qoM6N<$f&r@1VE_OC literal 0 HcmV?d00001 diff --git a/front/dist/resources/customisation/character_color/_‚È‚µ.png b/front/dist/resources/customisation/character_color/_‚È‚µ.png new file mode 100644 index 0000000000000000000000000000000000000000..fc15513be4e28ac08e83ac276674d48daa82a9f7 GIT binary patch literal 293 zcmeAS@N?(olHy`uVBq!ia0vp^2|(Py!3HG1+{xJmq$EpRBT9nv(@M${i&7aJQ}UBi z6+Ckj(^G>|6H_V+Po~-c6&?3BLf4+VS@wvpDQx=g*aXI^eXRV1qv}R zFfu4GFt9K*Ffa%(FfcJVP$oz%a}dsuk78tFNJwM;Tf*93!vF-Hu6{1-oD!M004R>004l5008;`004mK004C`008P>0026e000+ooVrmw0000R zP)t-s0000Q8W|lO9WXF3Jv}{3OG{c>S~WE_0002Nr^Dp{0004WQchC52Mc{;z(FO;?%9vaj+JQp*1V z2vv8Ld}6=>)mb~WdD?&hqPFmx%CrFkgt5*own-XrK$+P&XAeuRM}P($h$&C#5um;9 z+>|olfY`?}VZZ^sk9D3fV8E+!?5M(cOx!U7vVEM=IRNXvu1b^ABOpBG@r;ok0jjM1 zn^5Hmode=B!P_kLT&4_W3W&w@i*?3anZdB{0|V5g-+#;>cfCF3VQ}BZbxVO_gz?Xh zyRtbkP+gdUsAK?&B@Z)bRR8U7*UCNs#S(O>wmHiz0B08hT&eBs>?AK?j%OG2T%h;c z1Ly4yORg4U%`GoNK;eRZ;4sS-*q;IJ=&I^++a1-k8K3|UjN;gtlWC-BkA0P=c{O+h zoLnQ{+Q(RQ4g4Y9l(N5N_(CJ<5(UhIIJRkB`BE5U2*53q=#Iicz!d>9Ke+)1IDEeq zAO`EKui4l7{R#D9epMeRpw?`S>%+|I0|P>8MD>B`5m2x(*CU`K!JwN`QjRqD#1XL z3zsu0+x}l{8644FSI%hCqCTUty>8W&JoMW#l|2qndZKCMawp4pURtG*gDRyY%a-Yh z?9&Woy~I0NNkf(mDrZA(Fy@NxG?YpbK%eOh55&?x#N_Fr;PhAc{R#EKr|VbW4~~C7 zEa)6d^#};Zf5*Nb9(n|9W1BLF0TT*B${+?hNyki&fo3^BGl&4y+~#Kn5ulpUJKj?U z5g@9yZjLE~2*^}z$oB--IRHdQ-W{$-K<3lCe4=w;JzEb?bPkAqaUVEa`?rZ4LuU$z z{x*GlLjh1ni9z82z`52oZ|0v20~#Cnk01iTIl6Z^HEKIxUAv(s0Gy-k9S1frY<6qs;$jz=!h-rs%wPw$mqjf7TF8(7QqK&84Zwa@ zR#V|XUiQ|DcALST>JDH#ZbN@*{pi{HOQOG116Z{U2%!fS%0Z3<%|sAzkCoC`EFzVrM46(2mHVNrC(Ll V5Y@i5fQkSB002ovPDHLkV1gCoWK;kE literal 0 HcmV?d00001 diff --git a/front/dist/resources/customisation/character_color/character_color1.png b/front/dist/resources/customisation/character_color/character_color1.png new file mode 100644 index 0000000000000000000000000000000000000000..cea139ec66b66950e89c5cc9c2325d9a9631d3ae GIT binary patch literal 1370 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 literal 0 HcmV?d00001 diff --git a/front/dist/resources/customisation/character_color/character_color13.png b/front/dist/resources/customisation/character_color/character_color13.png new file mode 100644 index 0000000000000000000000000000000000000000..006d174f0aa2cf6a2f05e8059294f6bc8ed0d51e GIT binary patch literal 1329 zcmV-11004R>004l5008;`004mK004C`008P>0026e000+ooVrmw0000O zP)t-s0000P85uJ(GfGNIXlQ7FfPignZ2$lOM|MUs00001bW%=J06^y0W&i*H0b)x> zL;#2d9Y_EG010qNS#tmY3labT3lag+-G2N400e1CL_t(o!`+x&lA}5dh4HKa3v%CW zlKalz0tk2kA=du4G6F+lS>tp~)xA~INeBUtSe`71|tX5dd1bEw~xf&oD=wA2Zj@v!H%x8)pYbveGQjTjp0CTD);PZ&exI| z=q5}-*)jkS9Mr8u6AbG30yNc9xhpJx3*7l5)j$B{AB zCE&U%mU(>xZaxM^yssY&HeiZ@g5Iz?F&Nn*fJbwBC+%h826|+xys$_}@7TmcBUt0u zBrm>Y1Drt?e4E*f&uHhMnt2@3PZnFX@1Tktz-WDsfdcMqBi*cR^k@`d^)RwU)NG0u zZ(k`iIOrl-HDA+(7LcH*9A~5$)|Oq3!qw@ zUlzCI3?wit6uP|68AzZHN0OX@0HE)-{xfGF0IT1)-+^d0zj854r$k{O7s=s@bidGK>Hy5V1Iw>H>h(vDjK8*VU~{fU4(7@WFI- zX*r-A*ksC@Wm%jof9Ks}=2_DryC>K-3{d0a#uLoI2B;ojc*Jw2kN=VlsOI>%KwD1- zD|Q!bk}f9A7C{Fs;E8#NvoI}TXo1}}T~cOc19)0?SgJI3@~uxo>lcysk8FQpe%L;> zKjsGps8H=`vj!;uAq?^J1J4f}2;n_CKP0*UzUu!M1NJ$88jt|PmNlaTNTLe>u06HE z<_rV?O=qor2cA?HfU@)rsNbLGsV)F|)S!zVw^SDZIf8}giiw^AszKk(SA3eBK>{d0 zV%LrMDj%f=Y6!sisxMX8%(v&OzJ!Ots~~j`034swwSnHWO?T9nRCVfSG=%;D+@8Ak z`Vy>g)|V=rf?l1EtFn3ricl}w>PsH(_4BAN)fDx1{rxem15noc)3Vi<+@rdWD^N*pXxSD1zxvWo!%))%`YMt200000NkvXXu0mjfB)m(< literal 0 HcmV?d00001 diff --git a/front/dist/resources/customisation/character_color/character_color14.png b/front/dist/resources/customisation/character_color/character_color14.png new file mode 100644 index 0000000000000000000000000000000000000000..61022543fd09d49add1503eef57f10cb3aa97c41 GIT binary patch literal 1329 zcmV-11004R>004l5008;`004mK004C`008P>0026e000+ooVrmw0000O zP)t-s0000w04jPTSD#3U$#BKwiSx>B*8l(jF=;qQ00001bW%=J06^y0W&i*H0b)x> zL;#2d9Y_EG010qNS#tmY3labT3lag+-G2N400e1CL_t(o!`+x&lA}5dh4HKa3v%CW zlKalz0tk2kA=du4G6F+lS>tp~)xA~INeBUtSe`71|tX5dd1bEw~xf&oD=wA2Zj@v!H%x8)pYbveGQjTjp0CTD);PZ&exI| z=q5}-*)jkS9Mr8u6AbG30yNc9xhpJx3*7l5)j$B{AB zCE&U%mU(>xZaxM^yssY&HeiZ@g5Iz?F&Nn*fJbwBC+%h826|+xys$_}@7TmcBUt0u zBrm>Y1Drt?e4E*f&uHhMnt2@3PZnFX@1Tktz-WDsfdcMqBi*cR^k@`d^)RwU)NG0u zZ(k`iIOrl-HDA+(7LcH*9A~5$)|Oq3!qw@ zUlzCI3?wit6uP|68AzZHN0OX@0HE)-{xfGF0IT1)-+^d0zj854r$k{O7s=s@bidGK>Hy5V1Iw>H>h(vDjK8*VU~{fU4(7@WFI- zX*r-A*ksC@Wm%jof9Ks}=2_DryC>K-3{d0a#uLoI2B;ojc*Jw2kN=VlsOI>%KwD1- zD|Q!bk}f9A7C{Fs;E8#NvoI}TXo1}}T~cOc19)0?SgJI3@~uxo>lcysk8FQpe%L;> zKjsGps8H=`vj!;uAq?^J1J4f}2;n_CKP0*UzUu!M1NJ$88jt|PmNlaTNTLe>u06HE z<_rV?O=qor2cA?HfU@)rsNbLGsV)F|)S!zVw^SDZIf8}giiw^AszKk(SA3eBK>{d0 zV%LrMDj%f=Y6!sisxMX8%(v&OzJ!Ots~~j`034swwSnHWO?T9nRCVfSG=%;D+@8Ak z`Vy>g)|V=rf?l1EtFn3ricl}w>PsH(_4BAN)fDx1{rxem15noc)3Vi<+@rdWD^N*pXxSD1zxvWo!%))%`YMt200000NkvXXu0mjf{zOk6 literal 0 HcmV?d00001 diff --git a/front/dist/resources/customisation/character_color/character_color15.png b/front/dist/resources/customisation/character_color/character_color15.png new file mode 100644 index 0000000000000000000000000000000000000000..d0569ce4aeb41273d1248447038e407d47ba2ddc GIT binary patch literal 1329 zcmV-11004R>004l5008;`004mK004C`008P>0026e000+ooVrmw0000O zP)t-s0000D6#z|E0CIZ(oTEIqylS1GP5=M^!6`?q00001bW%=J06^y0W&i*H0b)x> zL;#2d9Y_EG010qNS#tmY3labT3lag+-G2N400e1CL_t(o!`+x&lA}5dh4HKa3v%CW zlKalz0tk2kA=du4G6F+lS>tp~)xA~INeBUtSe`71|tX5dd1bEw~xf&oD=wA2Zj@v!H%x8)pYbveGQjTjp0CTD);PZ&exI| z=q5}-*)jkS9Mr8u6AbG30yNc9xhpJx3*7l5)j$B{AB zCE&U%mU(>xZaxM^yssY&HeiZ@g5Iz?F&Nn*fJbwBC+%h826|+xys$_}@7TmcBUt0u zBrm>Y1Drt?e4E*f&uHhMnt2@3PZnFX@1Tktz-WDsfdcMqBi*cR^k@`d^)RwU)NG0u zZ(k`iIOrl-HDA+(7LcH*9A~5$)|Oq3!qw@ zUlzCI3?wit6uP|68AzZHN0OX@0HE)-{xfGF0IT1)-+^d0zj854r$k{O7s=s@bidGK>Hy5V1Iw>H>h(vDjK8*VU~{fU4(7@WFI- zX*r-A*ksC@Wm%jof9Ks}=2_DryC>K-3{d0a#uLoI2B;ojc*Jw2kN=VlsOI>%KwD1- zD|Q!bk}f9A7C{Fs;E8#NvoI}TXo1}}T~cOc19)0?SgJI3@~uxo>lcysk8FQpe%L;> zKjsGps8H=`vj!;uAq?^J1J4f}2;n_CKP0*UzUu!M1NJ$88jt|PmNlaTNTLe>u06HE z<_rV?O=qor2cA?HfU@)rsNbLGsV)F|)S!zVw^SDZIf8}giiw^AszKk(SA3eBK>{d0 zV%LrMDj%f=Y6!sisxMX8%(v&OzJ!Ots~~j`034swwSnHWO?T9nRCVfSG=%;D+@8Ak z`Vy>g)|V=rf?l1EtFn3ricl}w>PsH(_4BAN)fDx1{rxem15noc)3Vi<+@rdWD^N*pXxSD1zxvWo!%))%`YMt200000NkvXXu0mjfCSOfM literal 0 HcmV?d00001 diff --git a/front/dist/resources/customisation/character_color/character_color16.png b/front/dist/resources/customisation/character_color/character_color16.png new file mode 100644 index 0000000000000000000000000000000000000000..7de9ded02928d8c261ef6887deb555184a9cea18 GIT binary patch literal 1329 zcmV-11004R>004l5008;`004mK004C`008P>0026e000+ooVrmw0000O zP)t-s0000^J^+q?0JEeg-OOY7<&oaWbpQYW;XyBf00001bW%=J06^y0W&i*H0b)x> zL;#2d9Y_EG010qNS#tmY3labT3lag+-G2N400e1CL_t(o!`+x&lA}5dh4HKa3v%CW zlKalz0tk2kA=du4G6F+lS>tp~)xA~INeBUtSe`71|tX5dd1bEw~xf&oD=wA2Zj@v!H%x8)pYbveGQjTjp0CTD);PZ&exI| z=q5}-*)jkS9Mr8u6AbG30yNc9xhpJx3*7l5)j$B{AB zCE&U%mU(>xZaxM^yssY&HeiZ@g5Iz?F&Nn*fJbwBC+%h826|+xys$_}@7TmcBUt0u zBrm>Y1Drt?e4E*f&uHhMnt2@3PZnFX@1Tktz-WDsfdcMqBi*cR^k@`d^)RwU)NG0u zZ(k`iIOrl-HDA+(7LcH*9A~5$)|Oq3!qw@ zUlzCI3?wit6uP|68AzZHN0OX@0HE)-{xfGF0IT1)-+^d0zj854r$k{O7s=s@bidGK>Hy5V1Iw>H>h(vDjK8*VU~{fU4(7@WFI- zX*r-A*ksC@Wm%jof9Ks}=2_DryC>K-3{d0a#uLoI2B;ojc*Jw2kN=VlsOI>%KwD1- zD|Q!bk}f9A7C{Fs;E8#NvoI}TXo1}}T~cOc19)0?SgJI3@~uxo>lcysk8FQpe%L;> zKjsGps8H=`vj!;uAq?^J1J4f}2;n_CKP0*UzUu!M1NJ$88jt|PmNlaTNTLe>u06HE z<_rV?O=qor2cA?HfU@)rsNbLGsV)F|)S!zVw^SDZIf8}giiw^AszKk(SA3eBK>{d0 zV%LrMDj%f=Y6!sisxMX8%(v&OzJ!Ots~~j`034swwSnHWO?T9nRCVfSG=%;D+@8Ak z`Vy>g)|V=rf?l1EtFn3ricl}w>PsH(_4BAN)fDx1{rxem15noc)3Vi<+@rdWD^N*pXxSD1zxvWo!%))%`YMt200000NkvXXu0mjfrm#>@ literal 0 HcmV?d00001 diff --git a/front/dist/resources/customisation/character_color/character_color17.png b/front/dist/resources/customisation/character_color/character_color17.png new file mode 100644 index 0000000000000000000000000000000000000000..0a7a2e578144c67b2032bfbae46ecb613f5bd480 GIT binary patch literal 801 zcmV++1K#|JP)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw0000L zP)t-s0001&mzl}Q%j@gy|NsBl+1&sD0GeV)1ONa40d!JMQvg8b*k%9#00Cl4M??UK z1szBL000SaNLh0L01FZT01FZU(%pXi00079Nklv{?NFrORTZ2WU? zZlJ(=`Lg!Qc5_`Xf#Gtu_HH{>*9(C4-4$oki-t}CCg;u=1B(Dr)e{gdIpSz;3bd-~ z2?(=ZabC1m`z5HJ0O38Pemrp0g6MHa091G`+AT$O9dBCe9050^d-ke~7CQhC5zL`9 zL<633fB?nv`ZMJBt+OA_et6dn{a~l3{Xl`fvllndb-e&&cegWsSVq5_5)P)1O$iJ4}1DjJptkS9pYX4OA!4~AlzRv#6Q*JO^5uK!V@~n`>4l1 zJLG?8j7C2|Y?P4yF-q$Fz@%sZ#qv65=Su7BhqE8vc7uEUpX@Y>#s&(kPQFb3?VRc* zFrel9eV=6Apa59ES$6juH1r(cAmo<4*KVom?(2I5Bu1!@_o~je7(4(RB*v(VcU9Ao z-~@0{y~VpX1fokxfIX@YZ9;UZbAXX{kc#No38X&q@W*Fa=ug{$v!C1Jm#(uP&VG2? z4X>Xs`MG_*M1WzpjQ<`Gy#QFh&*AmI&*Ng4s|AxZ@)hW00000NkvXXu0mjfV6|j^ literal 0 HcmV?d00001 diff --git a/front/dist/resources/customisation/character_color/character_color18.png b/front/dist/resources/customisation/character_color/character_color18.png new file mode 100644 index 0000000000000000000000000000000000000000..97488b5e43b9021f7c6af983fb04abbf59f7f29e GIT binary patch literal 801 zcmV++1K#|JP)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw0000L zP)t-s0000>OH5>BWp#CSe}8{$Y;FJm01BuXqyPW_0d!JMQvg8b*k%9#00Cl4M??UK z1szBL000SaNLh0L01FZT01FZU(%pXi00079Nklv{?NFrORTZ2WU? zZlJ(=`Lg!Qc5_`Xf#Gtu_HH{>*9(C4-4$oki-t}CCg;u=1B(Dr)e{gdIpSz;3bd-~ z2?(=ZabC1m`z5HJ0O38Pemrp0g6MHa091G`+AT$O9dBCe9050^d-ke~7CQhC5zL`9 zL<633fB?nv`ZMJBt+OA_et6dn{a~l3{Xl`fvllndb-e&&cegWsSVq5_5)P)1O$iJ4}1DjJptkS9pYX4OA!4~AlzRv#6Q*JO^5uK!V@~n`>4l1 zJLG?8j7C2|Y?P4yF-q$Fz@%sZ#qv65=Su7BhqE8vc7uEUpX@Y>#s&(kPQFb3?VRc* zFrel9eV=6Apa59ES$6juH1r(cAmo<4*KVom?(2I5Bu1!@_o~je7(4(RB*v(VcU9Ao z-~@0{y~VpX1fokxfIX@YZ9;UZbAXX{kc#No38X&q@W*Fa=ug{$v!C1Jm#(uP&VG2? z4X>Xs`MG_*M1WzpjQ<`Gy#QFh&*AmI&*Ng4s|AxZ@)hW00000NkvXXu0mjf@E=}f literal 0 HcmV?d00001 diff --git a/front/dist/resources/customisation/character_color/character_color19.png b/front/dist/resources/customisation/character_color/character_color19.png new file mode 100644 index 0000000000000000000000000000000000000000..22450d5a78f3866dbb9de6473c1b0d5c0530de46 GIT binary patch literal 801 zcmV++1K#|JP)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw0000L zP)t-s0000?fstjbz;?;tfZFkGy3qgt0Ps|>_5c6?0d!JMQvg8b*k%9#00Cl4M??UK z1szBL000SaNLh0L01FZT01FZU(%pXi00079Nklv{?NFrORTZ2WU? zZlJ(=`Lg!Qc5_`Xf#Gtu_HH{>*9(C4-4$oki-t}CCg;u=1B(Dr)e{gdIpSz;3bd-~ z2?(=ZabC1m`z5HJ0O38Pemrp0g6MHa091G`+AT$O9dBCe9050^d-ke~7CQhC5zL`9 zL<633fB?nv`ZMJBt+OA_et6dn{a~l3{Xl`fvllndb-e&&cegWsSVq5_5)P)1O$iJ4}1DjJptkS9pYX4OA!4~AlzRv#6Q*JO^5uK!V@~n`>4l1 zJLG?8j7C2|Y?P4yF-q$Fz@%sZ#qv65=Su7BhqE8vc7uEUpX@Y>#s&(kPQFb3?VRc* zFrel9eV=6Apa59ES$6juH1r(cAmo<4*KVom?(2I5Bu1!@_o~je7(4(RB*v(VcU9Ao z-~@0{y~VpX1fokxfIX@YZ9;UZbAXX{kc#No38X&q@W*Fa=ug{$v!C1Jm#(uP&VG2? z4X>Xs`MG_*M1WzpjQ<`Gy#QFh&*AmI&*Ng4s|AxZ@)hW00000NkvXXu0mjf?!jX} literal 0 HcmV?d00001 diff --git a/front/dist/resources/customisation/character_color/character_color2.png b/front/dist/resources/customisation/character_color/character_color2.png new file mode 100644 index 0000000000000000000000000000000000000000..da1355b56c902cd1584911e614eb5d0db98766f3 GIT binary patch literal 1363 zcmV-Z1+4msP)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw0000R zP)t-s0000}M52Mc{;z(FO;?%9vaj+JQp*1V z2vv8Ld}6=>)mb~WdD?&hqPFmx%CrFkgt5*own-XrK$+P&XAeuRM}P($h$&C#5um;9 z+>|olfY`?}VZZ^sk9D3fV8E+!?5M(cOx!U7vVEM=IRNXvu1b^ABOpBG@r;ok0jjM1 zn^5Hmode=B!P_kLT&4_W3W&w@i*?3anZdB{0|V5g-+#;>cfCF3VQ}BZbxVO_gz?Xh zyRtbkP+gdUsAK?&B@Z)bRR8U7*UCNs#S(O>wmHiz0B08hT&eBs>?AK?j%OG2T%h;c z1Ly4yORg4U%`GoNK;eRZ;4sS-*q;IJ=&I^++a1-k8K3|UjN;gtlWC-BkA0P=c{O+h zoLnQ{+Q(RQ4g4Y9l(N5N_(CJ<5(UhIIJRkB`BE5U2*53q=#Iicz!d>9Ke+)1IDEeq zAO`EKui4l7{R#D9epMeRpw?`S>%+|I0|P>8MD>B`5m2x(*CU`K!JwN`QjRqD#1XL z3zsu0+x}l{8644FSI%hCqCTUty>8W&JoMW#l|2qndZKCMawp4pURtG*gDRyY%a-Yh z?9&Woy~I0NNkf(mDrZA(Fy@NxG?YpbK%eOh55&?x#N_Fr;PhAc{R#EKr|VbW4~~C7 zEa)6d^#};Zf5*Nb9(n|9W1BLF0TT*B${+?hNyki&fo3^BGl&4y+~#Kn5ulpUJKj?U z5g@9yZjLE~2*^}z$oB--IRHdQ-W{$-K<3lCe4=w;JzEb?bPkAqaUVEa`?rZ4LuU$z z{x*GlLjh1ni9z82z`52oZ|0v20~#Cnk01iTIl6Z^HEKIxUAv(s0Gy-k9S1frY<6qs;$jz=!h-rs%wPw$mqjf7TF8(7QqK&84Zwa@ zR#V|XUiQ|DcALST>JDH#ZbN@*{pi{HOQOG116Z{U2%!fS%0Z3<%|sAzkCoC`EFzVrM46(2mHVNrC(Ll V5Y@i5fQkSB002ovPDHLkV1fo;Z6W{w literal 0 HcmV?d00001 diff --git a/front/dist/resources/customisation/character_color/character_color20.png b/front/dist/resources/customisation/character_color/character_color20.png new file mode 100644 index 0000000000000000000000000000000000000000..69818425158c541be896547b539031789a915e54 GIT binary patch literal 801 zcmV++1K#|JP)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw0000L zP)t-s0001pOp&!^z|(f%<$&?SZP5S#08ksgx&QzG0d!JMQvg8b*k%9#00Cl4M??UK z1szBL000SaNLh0L01FZT01FZU(%pXi00079Nklv{?NFrORTZ2WU? zZlJ(=`Lg!Qc5_`Xf#Gtu_HH{>*9(C4-4$oki-t}CCg;u=1B(Dr)e{gdIpSz;3bd-~ z2?(=ZabC1m`z5HJ0O38Pemrp0g6MHa091G`+AT$O9dBCe9050^d-ke~7CQhC5zL`9 zL<633fB?nv`ZMJBt+OA_et6dn{a~l3{Xl`fvllndb-e&&cegWsSVq5_5)P)1O$iJ4}1DjJptkS9pYX4OA!4~AlzRv#6Q*JO^5uK!V@~n`>4l1 zJLG?8j7C2|Y?P4yF-q$Fz@%sZ#qv65=Su7BhqE8vc7uEUpX@Y>#s&(kPQFb3?VRc* zFrel9eV=6Apa59ES$6juH1r(cAmo<4*KVom?(2I5Bu1!@_o~je7(4(RB*v(VcU9Ao z-~@0{y~VpX1fokxfIX@YZ9;UZbAXX{kc#No38X&q@W*Fa=ug{$v!C1Jm#(uP&VG2? z4X>Xs`MG_*M1WzpjQ<`Gy#QFh&*AmI&*Ng4s|AxZ@)hW00000NkvXXu0mjfvvFc( literal 0 HcmV?d00001 diff --git a/front/dist/resources/customisation/character_color/character_color21.png b/front/dist/resources/customisation/character_color/character_color21.png new file mode 100644 index 0000000000000000000000000000000000000000..62598f5d81df8a04f932a1bdf4e9ecef8f88c6f8 GIT binary patch literal 1339 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 literal 0 HcmV?d00001 diff --git a/front/dist/resources/customisation/character_color/character_color25.png b/front/dist/resources/customisation/character_color/character_color25.png new file mode 100644 index 0000000000000000000000000000000000000000..f3184772c329ff31b96eaeb18b838b94963b77a9 GIT binary patch literal 1334 zcmV-61004R>004l5008;`004mK004C`008P>0026e000+ooVrmw0000L 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 M07*qoM6N<$f+RIkFaQ7m literal 0 HcmV?d00001 diff --git a/front/dist/resources/customisation/character_color/character_color28.png b/front/dist/resources/customisation/character_color/character_color28.png new file mode 100644 index 0000000000000000000000000000000000000000..6779582f2e67a90497b78ded116c138d4b6dcec3 GIT binary patch literal 1349 zcmV-L1-kl)P)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw0000L zP)t-s0000}M z*nNYynaf?340a4KGh3srnV-a9J@$bBVr#73t&#C5PlIv#YfQ->K0Vw%k~@+AO`2|5>X&b$ghYeRrl?&X13=N{(R+Mw6$dR;xx#ygl=m|4%S zx(NY|4f=`0EIn{M1KiPe-TieqiY*!>0SS&e z`3r-A;>)W_FAS_#Nx;6cbDR9iD>f&F0K6)m+>u!bcqRa^Z+1-sYN(&N-71R)Ip9)h^DG+VfX~&> zv1E_|(v4s1STe`}Uk^5+N_qykdSIrmsAmAYJ9-Wp7Y%fC{==iL>KODQnuY+%&Zpac2avX zY1X$%+4fuYM9=WcY-&jZgxqi%xxdjewq_JEaS)1gv}~2!&_3-@)>XQb9iP#%LFF9K z4IZ_?I}N201>k3D;ekl{hnTuNWR(61zrV3QOz!-zzkWX;Ku+QOUl;TYkW)DSmkd4t z+9&vu!3Ti*4~CLK4h*JshwYL<28iLcqX433fEXSw!M{re8NfP!oPU%IGN2OujJ_wR zP63zcAitOO45(as=U;RRxU)4%8&szNTZ~0%N6grO?HFJStYZqeI+_|Z76VKVJ*sJq zZE=CwI0E1tz1TEB>NVA+U3&z;Ia-E>_OdlK|^#q0?KiIjxy)*$0sZK=OymiUKSSur;H(6K_39t-r~% z|I6QhP#-kghDm#f=oDagZD0x}=`Rt31BfpRGmGzuo&BYS7%&}xo5HS?GW-7R6nei00000NkvXX Hu0mjfy=YFb literal 0 HcmV?d00001 diff --git a/front/dist/resources/customisation/character_color/character_color29.png b/front/dist/resources/customisation/character_color/character_color29.png new file mode 100644 index 0000000000000000000000000000000000000000..25ce556096361f7625a4c85ee07e5d5461d110cc GIT binary patch literal 1349 zcmV-L1-kl)P)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw0000L zP)t-s0001bXhX`LbKSk1?%K2c@WlWC0LVNgumAu60d!JMQvg8b*k%9#00Cl4M??UK z1szBL000SaNLh0L01FZT01FZU(%pXi000DlNkl z*nNYynaf?340a4KGh3srnV-a9J@$bBVr#73t&#C5PlIv#YfQ->K0Vw%k~@+AO`2|5>X&b$ghYeRrl?&X13=N{(R+Mw6$dR;xx#ygl=m|4%S zx(NY|4f=`0EIn{M1KiPe-TieqiY*!>0SS&e z`3r-A;>)W_FAS_#Nx;6cbDR9iD>f&F0K6)m+>u!bcqRa^Z+1-sYN(&N-71R)Ip9)h^DG+VfX~&> zv1E_|(v4s1STe`}Uk^5+N_qykdSIrmsAmAYJ9-Wp7Y%fC{==iL>KODQnuY+%&Zpac2avX zY1X$%+4fuYM9=WcY-&jZgxqi%xxdjewq_JEaS)1gv}~2!&_3-@)>XQb9iP#%LFF9K z4IZ_?I}N201>k3D;ekl{hnTuNWR(61zrV3QOz!-zzkWX;Ku+QOUl;TYkW)DSmkd4t z+9&vu!3Ti*4~CLK4h*JshwYL<28iLcqX433fEXSw!M{re8NfP!oPU%IGN2OujJ_wR zP63zcAitOO45(as=U;RRxU)4%8&szNTZ~0%N6grO?HFJStYZqeI+_|Z76VKVJ*sJq zZE=CwI0E1tz1TEB>NVA+U3&z;Ia-E>_OdlK|^#q0?KiIjxy)*$0sZK=OymiUKSSur;H(6K_39t-r~% z|I6QhP#-kghDm#f=oDagZD0x}=`Rt31BfpRGmGzuo&BYS7%&}xo5HS?GW-7R6nei00000NkvXX Hu0mjf`~6VQ literal 0 HcmV?d00001 diff --git a/front/dist/resources/customisation/character_color/character_color3.png b/front/dist/resources/customisation/character_color/character_color3.png new file mode 100644 index 0000000000000000000000000000000000000000..a3356f4dd8102083a0af66c0b62acf3f434d0480 GIT binary patch literal 1363 zcmV-Z1+4msP)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw0000R zP)t-s0001bXhX`LbKSk1?%K2c@Wuc9>Ey|#0002-3+XNZ0004WQchC52Mc{;z(FO;?%9vaj+JQp*1V z2vv8Ld}6=>)mb~WdD?&hqPFmx%CrFkgt5*own-XrK$+P&XAeuRM}P($h$&C#5um;9 z+>|olfY`?}VZZ^sk9D3fV8E+!?5M(cOx!U7vVEM=IRNXvu1b^ABOpBG@r;ok0jjM1 zn^5Hmode=B!P_kLT&4_W3W&w@i*?3anZdB{0|V5g-+#;>cfCF3VQ}BZbxVO_gz?Xh zyRtbkP+gdUsAK?&B@Z)bRR8U7*UCNs#S(O>wmHiz0B08hT&eBs>?AK?j%OG2T%h;c z1Ly4yORg4U%`GoNK;eRZ;4sS-*q;IJ=&I^++a1-k8K3|UjN;gtlWC-BkA0P=c{O+h zoLnQ{+Q(RQ4g4Y9l(N5N_(CJ<5(UhIIJRkB`BE5U2*53q=#Iicz!d>9Ke+)1IDEeq zAO`EKui4l7{R#D9epMeRpw?`S>%+|I0|P>8MD>B`5m2x(*CU`K!JwN`QjRqD#1XL z3zsu0+x}l{8644FSI%hCqCTUty>8W&JoMW#l|2qndZKCMawp4pURtG*gDRyY%a-Yh z?9&Woy~I0NNkf(mDrZA(Fy@NxG?YpbK%eOh55&?x#N_Fr;PhAc{R#EKr|VbW4~~C7 zEa)6d^#};Zf5*Nb9(n|9W1BLF0TT*B${+?hNyki&fo3^BGl&4y+~#Kn5ulpUJKj?U z5g@9yZjLE~2*^}z$oB--IRHdQ-W{$-K<3lCe4=w;JzEb?bPkAqaUVEa`?rZ4LuU$z z{x*GlLjh1ni9z82z`52oZ|0v20~#Cnk01iTIl6Z^HEKIxUAv(s0Gy-k9S1frY<6qs;$jz=!h-rs%wPw$mqjf7TF8(7QqK&84Zwa@ zR#V|XUiQ|DcALST>JDH#ZbN@*{pi{HOQOG116Z{U2%!fS%0Z3<%|sAzkCoC`EFzVrM46(2mHVNrC(Ll V5Y@i5fQkSB002ovPDHLkV1k++Zg>Cy literal 0 HcmV?d00001 diff --git a/front/dist/resources/customisation/character_color/character_color30.png b/front/dist/resources/customisation/character_color/character_color30.png new file mode 100644 index 0000000000000000000000000000000000000000..b16eb499cdab62e7aaffbe284c0957e5fc1ccc18 GIT binary patch literal 1349 zcmV-L1-kl)P)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw0000L zP)t-s0000*G97GBEuwBlwwPwavw#2q0Iikv7ytkO0d!JMQvg8b*k%9#00Cl4M??UK z1szBL000SaNLh0L01FZT01FZU(%pXi000DlNkl z*nNYynaf?340a4KGh3srnV-a9J@$bBVr#73t&#C5PlIv#YfQ->K0Vw%k~@+AO`2|5>X&b$ghYeRrl?&X13=N{(R+Mw6$dR;xx#ygl=m|4%S zx(NY|4f=`0EIn{M1KiPe-TieqiY*!>0SS&e z`3r-A;>)W_FAS_#Nx;6cbDR9iD>f&F0K6)m+>u!bcqRa^Z+1-sYN(&N-71R)Ip9)h^DG+VfX~&> zv1E_|(v4s1STe`}Uk^5+N_qykdSIrmsAmAYJ9-Wp7Y%fC{==iL>KODQnuY+%&Zpac2avX zY1X$%+4fuYM9=WcY-&jZgxqi%xxdjewq_JEaS)1gv}~2!&_3-@)>XQb9iP#%LFF9K z4IZ_?I}N201>k3D;ekl{hnTuNWR(61zrV3QOz!-zzkWX;Ku+QOUl;TYkW)DSmkd4t z+9&vu!3Ti*4~CLK4h*JshwYL<28iLcqX433fEXSw!M{re8NfP!oPU%IGN2OujJ_wR zP63zcAitOO45(as=U;RRxU)4%8&szNTZ~0%N6grO?HFJStYZqeI+_|Z76VKVJ*sJq zZE=CwI0E1tz1TEB>NVA+U3&z;Ia-E>_OdlK|^#q0?KiIjxy)*$0sZK=OymiUKSSur;H(6K_39t-r~% z|I6QhP#-kghDm#f=oDagZD0x}=`Rt31BfpRGmGzuo&BYS7%&}xo5HS?GW-7R6nei00000NkvXX Hu0mjfQRYov literal 0 HcmV?d00001 diff --git a/front/dist/resources/customisation/character_color/character_color31.png b/front/dist/resources/customisation/character_color/character_color31.png new file mode 100644 index 0000000000000000000000000000000000000000..70de6c875f21555593d9c13ba3628f7d233ba4b0 GIT binary patch literal 1349 zcmV-L1-kl)P)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw0000L zP)t-s0000zEha`UCTT)Cd|pqAbYTDh02%|1s{jB10d!JMQvg8b*k%9#00Cl4M??UK z1szBL000SaNLh0L01FZT01FZU(%pXi000DlNkl z*nNYynaf?340a4KGh3srnV-a9J@$bBVr#73t&#C5PlIv#YfQ->K0Vw%k~@+AO`2|5>X&b$ghYeRrl?&X13=N{(R+Mw6$dR;xx#ygl=m|4%S zx(NY|4f=`0EIn{M1KiPe-TieqiY*!>0SS&e z`3r-A;>)W_FAS_#Nx;6cbDR9iD>f&F0K6)m+>u!bcqRa^Z+1-sYN(&N-71R)Ip9)h^DG+VfX~&> zv1E_|(v4s1STe`}Uk^5+N_qykdSIrmsAmAYJ9-Wp7Y%fC{==iL>KODQnuY+%&Zpac2avX zY1X$%+4fuYM9=WcY-&jZgxqi%xxdjewq_JEaS)1gv}~2!&_3-@)>XQb9iP#%LFF9K z4IZ_?I}N201>k3D;ekl{hnTuNWR(61zrV3QOz!-zzkWX;Ku+QOUl;TYkW)DSmkd4t z+9&vu!3Ti*4~CLK4h*JshwYL<28iLcqX433fEXSw!M{re8NfP!oPU%IGN2OujJ_wR zP63zcAitOO45(as=U;RRxU)4%8&szNTZ~0%N6grO?HFJStYZqeI+_|Z76VKVJ*sJq zZE=CwI0E1tz1TEB>NVA+U3&z;Ia-E>_OdlK|^#q0?KiIjxy)*$0sZK=OymiUKSSur;H(6K_39t-r~% z|I6QhP#-kghDm#f=oDagZD0x}=`Rt31BfpRGmGzuo&BYS7%&}xo5HS?GW-7R6nei00000NkvXX Hu0mjfhC)h# literal 0 HcmV?d00001 diff --git a/front/dist/resources/customisation/character_color/character_color32.png b/front/dist/resources/customisation/character_color/character_color32.png new file mode 100644 index 0000000000000000000000000000000000000000..7b83badc582d9085555c6ee6882997e896c3068a GIT binary patch literal 1349 zcmV-L1-kl)P)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw0000L zP)t-s0000Q8W|lO9WXF3Jv}{3OG^L%0Pqr?*8l(j0d!JMQvg8b*k%9#00Cl4M??UK z1szBL000SaNLh0L01FZT01FZU(%pXi000DlNkl z*nNYynaf?340a4KGh3srnV-a9J@$bBVr#73t&#C5PlIv#YfQ->K0Vw%k~@+AO`2|5>X&b$ghYeRrl?&X13=N{(R+Mw6$dR;xx#ygl=m|4%S zx(NY|4f=`0EIn{M1KiPe-TieqiY*!>0SS&e z`3r-A;>)W_FAS_#Nx;6cbDR9iD>f&F0K6)m+>u!bcqRa^Z+1-sYN(&N-71R)Ip9)h^DG+VfX~&> zv1E_|(v4s1STe`}Uk^5+N_qykdSIrmsAmAYJ9-Wp7Y%fC{==iL>KODQnuY+%&Zpac2avX zY1X$%+4fuYM9=WcY-&jZgxqi%xxdjewq_JEaS)1gv}~2!&_3-@)>XQb9iP#%LFF9K z4IZ_?I}N201>k3D;ekl{hnTuNWR(61zrV3QOz!-zzkWX;Ku+QOUl;TYkW)DSmkd4t z+9&vu!3Ti*4~CLK4h*JshwYL<28iLcqX433fEXSw!M{re8NfP!oPU%IGN2OujJ_wR zP63zcAitOO45(as=U;RRxU)4%8&szNTZ~0%N6grO?HFJStYZqeI+_|Z76VKVJ*sJq zZE=CwI0E1tz1TEB>NVA+U3&z;Ia-E>_OdlK|^#q0?KiIjxy)*$0sZK=OymiUKSSur;H(6K_39t-r~% z|I6QhP#-kghDm#f=oDagZD0x}=`Rt31BfpRGmGzuo&BYS7%&}xo5HS?GW-7R6nei00000NkvXX Hu0mjfKQ>9$ literal 0 HcmV?d00001 diff --git a/front/dist/resources/customisation/character_color/character_color4.png b/front/dist/resources/customisation/character_color/character_color4.png new file mode 100644 index 0000000000000000000000000000000000000000..0bcec7cf13d24659b2ee50ab2b9d7685054be436 GIT binary patch literal 1363 zcmV-Z1+4msP)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw0000R zP)t-s0000*G97GBEuwBlwwPwavw+^vpsRpW00003TkrP(0004WQchC52Mc{;z(FO;?%9vaj+JQp*1V z2vv8Ld}6=>)mb~WdD?&hqPFmx%CrFkgt5*own-XrK$+P&XAeuRM}P($h$&C#5um;9 z+>|olfY`?}VZZ^sk9D3fV8E+!?5M(cOx!U7vVEM=IRNXvu1b^ABOpBG@r;ok0jjM1 zn^5Hmode=B!P_kLT&4_W3W&w@i*?3anZdB{0|V5g-+#;>cfCF3VQ}BZbxVO_gz?Xh zyRtbkP+gdUsAK?&B@Z)bRR8U7*UCNs#S(O>wmHiz0B08hT&eBs>?AK?j%OG2T%h;c z1Ly4yORg4U%`GoNK;eRZ;4sS-*q;IJ=&I^++a1-k8K3|UjN;gtlWC-BkA0P=c{O+h zoLnQ{+Q(RQ4g4Y9l(N5N_(CJ<5(UhIIJRkB`BE5U2*53q=#Iicz!d>9Ke+)1IDEeq zAO`EKui4l7{R#D9epMeRpw?`S>%+|I0|P>8MD>B`5m2x(*CU`K!JwN`QjRqD#1XL z3zsu0+x}l{8644FSI%hCqCTUty>8W&JoMW#l|2qndZKCMawp4pURtG*gDRyY%a-Yh z?9&Woy~I0NNkf(mDrZA(Fy@NxG?YpbK%eOh55&?x#N_Fr;PhAc{R#EKr|VbW4~~C7 zEa)6d^#};Zf5*Nb9(n|9W1BLF0TT*B${+?hNyki&fo3^BGl&4y+~#Kn5ulpUJKj?U z5g@9yZjLE~2*^}z$oB--IRHdQ-W{$-K<3lCe4=w;JzEb?bPkAqaUVEa`?rZ4LuU$z z{x*GlLjh1ni9z82z`52oZ|0v20~#Cnk01iTIl6Z^HEKIxUAv(s0Gy-k9S1frY<6qs;$jz=!h-rs%wPw$mqjf7TF8(7QqK&84Zwa@ zR#V|XUiQ|DcALST>JDH#ZbN@*{pi{HOQOG116Z{U2%!fS%0Z3<%|sAzkCoC`EFzVrM46(2mHVNrC(Ll V5Y@i5fQkSB002ovPDHLkV1kWdX;%OM literal 0 HcmV?d00001 diff --git a/front/dist/resources/customisation/character_color/character_color5.png b/front/dist/resources/customisation/character_color/character_color5.png new file mode 100644 index 0000000000000000000000000000000000000000..f2300a13feeb528bfb68ff6a4689fa89990d172f GIT binary patch literal 1363 zcmV-Z1+4msP)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw0000R zP)t-s0000zEha`UCTT)Cd|pqAbYY%_Z*fgS0000&1zcnR0004WQchC52Mc{;z(FO;?%9vaj+JQp*1V z2vv8Ld}6=>)mb~WdD?&hqPFmx%CrFkgt5*own-XrK$+P&XAeuRM}P($h$&C#5um;9 z+>|olfY`?}VZZ^sk9D3fV8E+!?5M(cOx!U7vVEM=IRNXvu1b^ABOpBG@r;ok0jjM1 zn^5Hmode=B!P_kLT&4_W3W&w@i*?3anZdB{0|V5g-+#;>cfCF3VQ}BZbxVO_gz?Xh zyRtbkP+gdUsAK?&B@Z)bRR8U7*UCNs#S(O>wmHiz0B08hT&eBs>?AK?j%OG2T%h;c z1Ly4yORg4U%`GoNK;eRZ;4sS-*q;IJ=&I^++a1-k8K3|UjN;gtlWC-BkA0P=c{O+h zoLnQ{+Q(RQ4g4Y9l(N5N_(CJ<5(UhIIJRkB`BE5U2*53q=#Iicz!d>9Ke+)1IDEeq zAO`EKui4l7{R#D9epMeRpw?`S>%+|I0|P>8MD>B`5m2x(*CU`K!JwN`QjRqD#1XL z3zsu0+x}l{8644FSI%hCqCTUty>8W&JoMW#l|2qndZKCMawp4pURtG*gDRyY%a-Yh z?9&Woy~I0NNkf(mDrZA(Fy@NxG?YpbK%eOh55&?x#N_Fr;PhAc{R#EKr|VbW4~~C7 zEa)6d^#};Zf5*Nb9(n|9W1BLF0TT*B${+?hNyki&fo3^BGl&4y+~#Kn5ulpUJKj?U z5g@9yZjLE~2*^}z$oB--IRHdQ-W{$-K<3lCe4=w;JzEb?bPkAqaUVEa`?rZ4LuU$z z{x*GlLjh1ni9z82z`52oZ|0v20~#Cnk01iTIl6Z^HEKIxUAv(s0Gy-k9S1frY<6qs;$jz=!h-rs%wPw$mqjf7TF8(7QqK&84Zwa@ zR#V|XUiQ|DcALST>JDH#ZbN@*{pi{HOQOG116Z{U2%!fS%0Z3<%|sAzkCoC`EFzVrM46(2mHVNrC(Ll V5Y@i5fQkSB002ovPDHLkV1jHBWc>gD literal 0 HcmV?d00001 diff --git a/front/dist/resources/customisation/character_color/character_color6.png b/front/dist/resources/customisation/character_color/character_color6.png new file mode 100644 index 0000000000000000000000000000000000000000..21360820d0b55f0f0c146a546454dce47dc91a6a GIT binary patch literal 1384 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 jOZrQL1d;>(-Tu literal 0 HcmV?d00001 diff --git a/front/dist/resources/customisation/character_color/character_color8.png b/front/dist/resources/customisation/character_color/character_color8.png new file mode 100644 index 0000000000000000000000000000000000000000..062b4c7e2f6d86a4f75edb33450e881362a98f19 GIT binary patch literal 1392 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 jOZrQL1d;>(-Tug-Ev{^m_NNbp5#QdaOlJ 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 Th-pOg{h(&EDc!g~DR0f+yp>c5 literal 0 HcmV?d00001 diff --git a/front/dist/resources/customisation/character_eyes/character_eyes12.png b/front/dist/resources/customisation/character_eyes/character_eyes12.png new file mode 100644 index 0000000000000000000000000000000000000000..8690475a8ab7dc096e9472b57cf269958e488bbc GIT binary patch literal 1706 zcmb7De@qis9DfA_rtt?;r=p3s)0vTZ?cKG#_D;&L7PLkfK_(b=a`axy3GLPEA+;(r z=-h}V_|McRWICtLMZ009P8~?Ln5aX+IVDpRG)@!{$u=-!O7{v>{ll2-C3o-p-ur$( z-_Q3~Rd&|G@nhr10szKa7g=)9UVuJ-Y&81+-Bxl2Z8Mbgd}XO*SIT%9f>c2&gqYRI zJ75mvh4pJM!bAWfw}`pdVTt`HF3|Bl|W7HQqneZY-adR3?Sy`F7Oske;hlXNVRzuPnnkJA2;aTrecrW4d%n2h{pvNYQ zZbg(_SO}3Xlu8v7j+l;w;B;qZz5sT4MiYfnrt$J_4W%YEPG=~tVQr6+17Fg3t+pq3 zy&GzBphqf|ZKxjhIbmazyEi)uDIzx9hq8!@!k1ViTd5Pe6syIAqZhRx3LI_Y85;!! z!VZm)pc$Qx;F&^-urY-!&FXY^iqVE~UT1HiNG8Kf)9G54rKog$nl{bIW*Brjz1hg< zEU95ztIMPCE*lK{7Lo5!Tk4IroLPpvBFVXuR1)rj>>^2#JVlZlGnWT~Um87RDlk0!0?i|Sbcd)Mbi)w4b;g7E*eY3N!zgiV5Hpco-4T_}$ zJMGUavdV|<1cJI-KDK*5=rmQesbp1JJQ>l^`kATE1hA4AWAoBxZdp}({oG}{2iv%U zxzd7@`n2|_jyt}sgs*} zHxg@&7fmtS0~I~bYb_pdpzFy_LVll&I!`{RGxz~?(H3StEK0Y?#k|o zN0RT&a*NZ;rzA%8a}%Z|z2#_~&5nz2^Cvj)$xW5VyJkmWe?%ars{lv=U=jdP0I2?- d=zH)jhy+=yw;mZ2b0{8R0c(1eC6HE7`5&{-Sup?r literal 0 HcmV?d00001 diff --git a/front/dist/resources/customisation/character_eyes/character_eyes13.png b/front/dist/resources/customisation/character_eyes/character_eyes13.png new file mode 100644 index 0000000000000000000000000000000000000000..d546acdbc4f1f9ab336679f135210ee0a736ba28 GIT binary patch literal 1701 zcmb7F4Qvx-82(COzfMRH5F+(Bf&zNIYkSxB4!Ye~ha0d_$HEpFuNtqeW9JCjrClnWh-nY+}?nm2LEj?eGr+Bn-L4_byQrr;B z^a@2V2MSWfTZiCu0QB$5x%pat)*Mb$yhb6SV+?xz$Qpp@DM7y=mOu@2!y?(|zmQcpj5QW%<)!v7AwI-l|2j1_OLvrMr z#Ib%At;B&3fXdHuVQGpAF~(>mM9M^CHr8ljtTxv6DrQD!lCqO#ilA7Iv2c_b8(cVw zrb-?z$2oH_7CJfbVomdNBw1cwZY;ML6}5;ou`EkcX3}gXkOmQ`@M%Jj@C7DDJvd=N zRAs*=D?TjZQE)3|ngd5j2U76*v$7sJ_5}tDg-S*S1wUyrQl!@#$*W&Gpyj}SVLVYg zkXzx0WDX1{WvYn!;h7jUMzwo-pok(u!_8G?)D)rAsfcA>=+iQt4jg?kO0vY6MZqeX zphS3}9TH|MO%sCEZ6ZXgn>DjE?J-#`Q9n&;*|dqp@Wad(f78sx6nMLP1m1Ttz93vcOfWXiA`1@ndOe{awc<=gB@v zDGyAEv}qt~CsgGnP@1VKUaY^)octsVR!W4lU_p#Q`BP>Z5_XH-LWqpbVv$jZG|lDA)whV5+)O52)hkAXKjMbO$ik1_Ly)IK_ny8d5lWY zE5y%;_-HWD;n8S8ADSl>4bHqS%>clVJ(n3qP$n%Re{F#h>GIe%Q^wnUR>8 zc>nCITWd$}BwYGkd{Sxr!F8)wyl}4FqLgBtvx>h2hK^}sRn1IkS#oXO&Vtiuf=2)_ z6aXFI0l3$h-c@!BoN237H=q79Ij?$AeOukN+T^d=8Y(x3J5Ju;c->yN?G3f-xGqlS zV_JK!AK!iFBk_;DSHG<&=yZ+m?9B}=nTx;7PvtZ8X0Y6Iq;(Gn?TD{Q7;!Rm$x=Ay zi(}|?;+Us&!m2BE&EI^w@OZ-qM+0qJ8p>0zjH$0a?6}m`Dz{fWIF%H)Klb(_aZ{JS zCosN|y<@0ZSbbya~`N#3|niKpf)W{}Wdqc~KVw XO4`?Lcxbp4VI9a!&vu4q6t4IOY7$RG literal 0 HcmV?d00001 diff --git a/front/dist/resources/customisation/character_eyes/character_eyes14.png b/front/dist/resources/customisation/character_eyes/character_eyes14.png new file mode 100644 index 0000000000000000000000000000000000000000..ec7fb215f8a6ea08a6daac525422b7f389f229ca GIT binary patch literal 1591 zcma)5eQeZZ81L1BSx553zA{%_2YW&wQxJ&?zUaz#vCV17;e4xy{&9*Z@rGY zjgOs(F+eo<5ezOwV^ECD4@A)nBIqB?@rN5=Cf}PGq68+3Y#C!8_};cdB81qaeV_N~ z^Zb6#=a%B4f~i?EvJeEB>M!(`z_S9ri76TI+kdX61s;!^zEX3U9yVj50gy$q9s;Oe z6)Qmr5as&XHn0Fetecf!saYCWB1pPw6O%T!xEg`p2(rK(kBCw=FwqdGR5TZM?ciYy zRb&^o!Vw??5f7+R3L6Zttf431Jmt1``qKoGH5%oelTbfc1>c%COnnxJVMTHw)o%@pIf7M-0!@PephC=pZ9 zH8hDRhV(kqg~3QCQcxp-z-?eHI$0=KG9oTU2+Bqhs+!De+&XHOfPcfdr*$+~9|1%O zi0XBQ1p5)5opOe?yFXFV5Jn>`H5AwsvBs-Qbt=$Izt@GqKQ>vB1zHkWi2^bn22Oy} zEW_X;8=`QD4e>P3Fky&dtKXa=fzhU8Mdel2Q> zngmkZ3gn*jx8qka=}3N# zfCl%;fQwT;^usj-N%Q-?i-PepSI_TzuBSLBvoClqr_AKDUTf-}Q+M!icgE_nc7OV< zIfE@NH{9RNdNu;7W}OElDj3sjptvwH9DYmf9OAXaX53|jA=*RGiQZ|TQg7JdcX0j;Xk@gUMJec z3uC8x_Iz@cY2CG9hTU}=SQP+3wv)? zZ+PI{{mmy5dyYMr^LtaP(YQ6^ouR?r^)2{OrT2QnfwA>h_Z<5^f8b!&8mA>|b2Duz z?|Qm?)?ayDFLVgt#aFH{UGtB)LuoL{)d;c>L8c){I)YgKBW_Q>+`FrG!%FM+^bhuC z>@Kr*_(snLGJf8=uKTQZWRoN9GcGSYde&9Fu+-WY-vQe6m-W44Emy27S6RROxNH9L zE3xSp>Fk7UqK0>r^DZ&o6luCqr8@_=T$*X=sIxAw|9YgQD3Ob-=FkB>b9b}*%p)Ix z_Rgidrf*z@*1y;JWbgcn)B6XwrvgcmXQuoglJQR7MGdt#-+auHfwZ=78Yz7>y8>1P N@%xIrpD(W1^bg(NCVKz? literal 0 HcmV?d00001 diff --git a/front/dist/resources/customisation/character_eyes/character_eyes15.png b/front/dist/resources/customisation/character_eyes/character_eyes15.png new file mode 100644 index 0000000000000000000000000000000000000000..bb2cf595a8fe88ef2fbd22ae6fee4101d6895cd0 GIT binary patch literal 1791 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 Kt>+339QqeyC;+?w literal 0 HcmV?d00001 diff --git a/front/dist/resources/customisation/character_eyes/character_eyes19.png b/front/dist/resources/customisation/character_eyes/character_eyes19.png new file mode 100644 index 0000000000000000000000000000000000000000..c1e140dc5aa92d35b42b22a337e5c27a2ae49f17 GIT binary patch literal 1672 zcmaJ=4Nw$i7~VTbk)$EDA5mjnH7VKK-TT?QU0hGRJM@wR=A^{@fxX@D;6`@$+FQ5- zN4Y67l`@+#Go8|GFd;`rO*8_d8g(pxP{;A#8N9MAiBi&3e%b@h9LDjR+5Nun{obGF zectz7nU^y&DKRAxf}kYlEW2CXi_|ZiFhu=#UMg)=x6z8DK$#nKxuXy7Km-6Wlo3n>K(%^m>x%QiZ&T&Tn`T{M2#l% zUfONX8i=Ld7^Fl|{4|CIgF#);pp)ccjG!nA!}XY6kE$AIph8sG5Gn>H#5~wRfRlZG z#V3hy)FbPW$`l4sk@lw`_+73Cj>W(LQ7UCvi1lNH4#xx`npdB8KyicrVLVbhkYC{k zm>UG7GMQ8B;hhjOR=In8ps1pXhR&6JYEjryyTp|VKvbM|22o#hypN~#97}Qp;88EI z08~#JjVMcc2$Ul|l%6sgy##59`FWH*NsQ4j3iK8ZB?w?bEoRn$QfAid!C9R0cnJhkA!55-)xoiLKDQKtv>TlE%>2-W8<#W1)6++V+s@r&>SxRgJh5g~ zBlpABtKk(%W6BdIHpZ_^`a}C_u4jGPTbJU;o*lh}K7MDmcxtu#esk50U7uH!pJ`}M zyt}P73~8rB8aNCkPlpm<=+?=#yFZ(oI&Jw!?bwd`zar-k*0dft{cKN9Yu)l?qs=dB zR_@!&ER`GR3Z=2rJdbi`9 zhT4>!-;0--ue#2+e;L}|;hTL$<33c?3O7B&7tSBiFm&(nqKg;FGjJ2uBNZOlv8ee# z_RH`Tc5}_)i|2mwXzyK+iJ#NArD>ZQ_|3OVYuUYXGA(Q5zgt|xMfIDDz<6U&cey{n)OUiWwv(Rf;c?b zb?`k+hqbEFpt9nrF_NoYQinEN05Rr8v7zPPmO7!&-b>SpqvQ^rZD){_fQAATX_*D=+BN$_^b;A*i6$iGpah$Q{H8}6aI0+v4tz1ek?_Uu?;44cw`?G2Yph!LKrF7=0WOmI&$ng IW)!{oA37*b&Hw-a literal 0 HcmV?d00001 diff --git a/front/dist/resources/customisation/character_eyes/character_eyes2.png b/front/dist/resources/customisation/character_eyes/character_eyes2.png new file mode 100644 index 0000000000000000000000000000000000000000..4f452c2ee519efa991c30bf1c7b6842e83a84e17 GIT binary patch literal 1516 zcmaJ=eQXnD7=Oz^=J?D6WyI*^_`?sl-p8(Yy@LXEZO6h6`kaFBD$y5 zB#up)m~{?(nv~yLiWO)&#B5fMkSUtQc)?2BI9}k_VGNQ<%1$yAK?$NQU!)jp=D|@k zT?vXlmuDsxk{o!gX+}kojKyNsSiV)$Ye-rU1d?J%h9QszVKl0y6em<;O$NaQ4OtIG z&5)*IX+$ZY)te3+F`Z5!67_m#fmLIsP^e^NT#Aykl_DdNbY4@|hUtS3Xv}GCls85p z>4Sz=ugj<(!8I9YRJ%t9N*f|J;#NI`nj(c=np_`&s#)Z6;OLK42`M5YOPowYg$P1B zBp8lm35g5Pgv&E;os=JI!Xc$O-#Gj7(#(X`tpP#(_XW?Y<;b2{ywS>Gbn zFeO!nnb;u|d&ZZ3q_0?@L&?a}7@C8FAhCkY9^eTkpXLc$fVB~J35iOO<{6phcs5|eXZ)3i>Nh>7 zNQ3f-X6T4YkmaDj1_{X6WrC(5LgS@;Lf|DnKuMGk2+}x-D3a;Xd1#a}Dm0(z>+E76 zVRp5kiuOrIi*w`gA1(o4`KQR`ERX+s>+<@Nc}|cV-u|sneB@JhY`N=J@xk@AGW^}L z?wytU_x8Ase^r{dw^&6O+MpZ)ZH766+8$VRXL z17JSr;Ti_oQyT{ljZkFQuC!~}< zjy;1{h7LbLT^@?xzukBAi+f9N_Kugnb>--)MBCY8ZIz$Dr)?Ulx~8@sZ@o+g&vzc2 zoG?FprF-O$-=1qF?R$!l-FF}aY}+?BzLU$59Xd7|mn1(xWO04xV! z-hU}3A1JRMur%mPHy0Mw8UoG3(d$KXZ+al@?FJ_nWSwY0@M zn96CE5M|S`?1Kr5;yx@>69_ZTsUJq-r>SvHoim^V7c-V@hGd&C2Lqo1$5=wvqGhhk{mi{9*-LiD}$NAhd5JZ*;??Ol4pPD>^Pm5LsR zSVWVWVGK%2N84Fg20+1nwZ74AjP4L+U2{tg#+}g&WDP)BMaGciR%l~!*sP}f_~bWd za7XI1kvjeDF$15a1_l{ z5@IY=y%Yt?;KCv#m;+oIdL)uJ0%Ft|{4Y-@v>QuMS{>Xd0wbqJd3 zYfz~+bq!m{v#74Zf#oO}vXTdN4AM_AEF^p$pNEjWyoXkhc#h)mC3|H>{ucWb-5?!C zj*h4#SPlwof`E)qCTJRZ2_KJ~3%ta~DTxx|2^uF6Mbc@V6|I!JLjCD%mj?qKmPZSw z&^(!FaI#HRy8*~M9|={~XGX67ITZai@MQL{-*13qpmOIk@#jO~ZIQ?7j_v5p3&bA} z;<3xdZ{L4@Ztl&}3#D7rAGH;qeU^V?OlO;l(C9t{vH&~^Kt2e7x#Yfm={v*SgYO?# zk^^7J8^_DeA09gK%JfW~-0KSbJv%zGar~~vznUCy1$K|-msOM>+|+k1uXc7b^{;SS z8a-NJ+%&Jw`?-sg{g>ynGkxcNxz>C#EcZUO{>?b-3iy8m$RkQ z>x=ttO#OFc!u3N(-g_5Lb@exmEaj? zaro`^gS-t2JZ=xUxM%EO;N(_#vwwEQmKjd@v-Z4yuvGtls3@ads`lT)swN$w$)*dK zI9*qjUU$s#EHY+mbC`LTk%9ZsJDyiL4y@@O+wzHQM p{5PIaF1sb`{_z7qVTK>A+!0xv-?xOGI1h9LgQu&X%Q~loCIHedU{L@7 literal 0 HcmV?d00001 diff --git a/front/dist/resources/customisation/character_eyes/character_eyes22.png b/front/dist/resources/customisation/character_eyes/character_eyes22.png new file mode 100644 index 0000000000000000000000000000000000000000..3ce8d422d2bc6b0b6c947d585bdde90cf5dffc11 GIT binary patch literal 289 zcmeAS@N?(olHy`uVBq!ia0vp^2|(Py#0(@mH??R2DVB6cUq=Rpjs4tz5?O(Kg=CK) zUj~LMHK4i{28LfC^)DD0N(~qoUL`OvSj}Ky5HFasE6@fg!4u#U;tHgL-4%fd$nbgG zx(G-yl?3?(GZ>$AUZV%(F(!GtyD)UH%6b4foCO|{#S9GGLLkg|>2BR0pkRupi(`n# z@wZbq3La44Vb1NEbNqxx&w&idCdbPQeq3;z+~sut#;;&~_!@hljQC0!qCAg>jC6&7I;J!Gca%qfiUBxyLEqng1(+Ejv*e$ z-=5sa%b>u+eDFX@&jF8~Ln}fwH*_ckF8z_Mb35&a;q40kSwA=a-o-CJr)j%YG4wbnq&1rRCRNMK*N*FXAFlc`k__!@hljQC0!qCAg>jC6&7I;J!Gca%qfiUBxyLEqng8rT^jv*e$ z-<~{N61c_4dxMJi!Vv!n7Lj??7oP0rJ~JVqE&i<8KJK|YE8?Fkb}f*sxVDCC x?#>-@F?Jbj_pZ7HzBsc~-_j+~m92q0Xa61EnFr@TTLCnh!PC{xWt~$(698!wPCNhr literal 0 HcmV?d00001 diff --git a/front/dist/resources/customisation/character_eyes/character_eyes25.png b/front/dist/resources/customisation/character_eyes/character_eyes25.png new file mode 100644 index 0000000000000000000000000000000000000000..5798be3ca4741f415a76d633aa93f3bdd41d3d64 GIT binary patch literal 348 zcmeAS@N?(olHy`uVBq!ia0vp^2|(Py!VDzYJ{5KXDVB6cUq=Rpjs4tz5?O(Kg=CK) zUj~LMHK4i{28LfC^)DD0N(~qoUL`OvSj}Ky5HFasE6@fgArasc;tHfE-T(Ff|9`L5 z_p2Bf_AoF^1PU=Qv|W8538Yv`g8YIRjE#-&v09b_`HV^4?k)@+tg;?J4rhT!WHAE+ zw-5+3Ub+!K?=BAMCGwF#4L*X`^hN1sYp8K6O(AizrXz7-u!O(4h*Fo at+E%|#O7OtJ(mJHj=|H_&t;ucLK6W0Cw9sJ literal 0 HcmV?d00001 diff --git a/front/dist/resources/customisation/character_eyes/character_eyes27.png b/front/dist/resources/customisation/character_eyes/character_eyes27.png new file mode 100644 index 0000000000000000000000000000000000000000..3044c2e31aacec7736ff176933d6fe93ee013827 GIT binary patch literal 381 zcmeAS@N?(olHy`uVBq!ia0vp^2|(Py!VDzYJ{5KXDVB6cUq=Rpjs4tz5?O(Kg=CK) zUj~LMHK4i{28LfC^)DD0N(~qoUL`OvSj}Ky5HFasE6@fgAsyfo;tHfE-T(Ff|9`L5 z_ZiaC7#1#MICF-fxfv+V6?Q-rNU@Xz`2{l=8ynwawJZhl8I!!-T^Kr8Wj%l#&H|6f zVg?3oArNM~bhqvgP;kAci(^Q{;kOqIxeqz;v_0gxc1}~|xmbz)l4`c2Tdyu!&9OJK z{nGyTkET2>Dl3>!cmCJjmh4W3IuE0Ib^8f5(lWb}o@c*PEpuRB-M2mYXl)KZ)2-|^0I!O}8@2G*$GWnl$1AxkSA*q0ldPcC&}|MKYAol*fC$M+}ueg3g9 zG^FnORq1%_tHL!#(I<S=%+BytqlJTO5fOMT&&dnmK((N MboFyt=akR{0Jc4bmH+?% literal 0 HcmV?d00001 diff --git a/front/dist/resources/customisation/character_eyes/character_eyes28.png b/front/dist/resources/customisation/character_eyes/character_eyes28.png new file mode 100644 index 0000000000000000000000000000000000000000..c19166a67c1a3968099a4cb9dbe4f6347bff5f76 GIT binary patch literal 378 zcmeAS@N?(olHy`uVBq!ia0vp^2|(Py!VDzYJ{5KXDVB6cUq=Rpjs4tz5?O(Kg=CK) zUj~LMHK4i{28LfC^)DD0N(~qoUL`OvSj}Ky5HFasE6@fgAsyfo;tHf0($W|fE@U`! z=EaK_|NsAIXl}l8Z>Y*? zEX&MVyS4RU?c3kRkqS&d6sLde+@bhAcf-ot*58A6-e8nnleLp~ZpcPkju$W1@7#0x z#X9C+Hj2C08>ii3WDv_Z`*h6$i*oVL4Sd_GCF8F#%3cU|E57ddfn~3{z0pr$28L;w z$3Hju{5lrN9x{P{pRL7X2Z@Txh~0dL)L+^DoOp6R(5(y~_|=?V=*r9b@$Lh0Jzf1= J);T3K0RS}Wg!lje literal 0 HcmV?d00001 diff --git a/front/dist/resources/customisation/character_eyes/character_eyes29.png b/front/dist/resources/customisation/character_eyes/character_eyes29.png new file mode 100644 index 0000000000000000000000000000000000000000..ac2e4c839bff204f8ea3891003ebc3497e5d60a6 GIT binary patch literal 873 zcmeAS@N?(olHy`uVBq!ia0vp^2|(Py!3HG1+{xL+z`$(a>EaktG3V`F!@S1^0<8~^ zA2rjuE7W)D1J^#sb91DBaCxm{$O+x_L@b-DOZjw@X6mH7|5r1)nOWA9Jz-FeWCEJR zz;NLIp}W=!&;N+N-mxicsXrtUn;t*Fsr zQ2l4^NB1|e|L-y^*)LtNw`2V+2G4i9IxfGQqFO7(t@z~Sou^mhcQ@F+{=fH;#Pw~t z?|#?mJlVu}X~_+O2HUQ(O))j`U3~cAg6Y%6_wL)Lb!>(+hy1aqqZ+OJt! z_HOU1{ksn=U%vd)<2!6Gs@`nkSUTm{^Ywp!N5|FrUe;JTW$$;XHb+fWQ{TtWj;Un_ zoRv~r|EK+ReSQ7@pMO^S9oj0r;V9>Z+}j&(NF+~FdB0b>EwOCPnf+JqTzdRfpLN48 znShG-u|0vBs+I5WuHCrv__Y_m<1|%e``s(w$IjgR+G_6k=Y?-7Y_yhcx%q7R&hE9Z z|9_KrUhnJQcKxXC-*cBP9lszie!xHEYdym^SB7I82P7CJlo^s)5_%YV1RD&Q4BUto z+_ud2Z}g09_2seZo?MDgJlVIr3^nMFx;v{PpLyBe&(T1!o!|03FTZ=Tsm*qp!pe33 zR^7Ys{Q2`x=?&o@6i&@t&>TzrQd4 zSD(2%n?dYN)c;k*4NuvoY~Q_Y=baad)z|#1e~B-!{VPqT%aQzO|Lj*o_Vn8#=`Zsq z=UgxKlX`!5K7V`jx#ycB?O#TPGEUJCGq}SL{w_n#Nn&<{w{_*qm-^YaZ;5@qzK_|* ze8G%3{Ru&*CN2B^{eJPg(68AGIjbfYA6V+4esbv)6Q0967`-Q7fAPC+&(gnBzTaCq zMI`x8iT2OESFXh0ofo$+V&RP6My;Ox|LxO#|K{iCr@dwdCu%IjKgoKAi!*{0ZtV3v P1CsW1^>bP0l+XkKMp2hq literal 0 HcmV?d00001 diff --git a/front/dist/resources/customisation/character_eyes/character_eyes3.png b/front/dist/resources/customisation/character_eyes/character_eyes3.png new file mode 100644 index 0000000000000000000000000000000000000000..d1bb67e6a6ec7a45d01276a78722b254873489b6 GIT binary patch literal 1575 zcmaJ=ZA=qq9Dh(}giJ>k$IuXVp4p4U>-CP_UGJn+X<;%}Mrs)~gqQ2xQ@ND(%Jr}n zUD_<}?Tap9*_KR)A7V-y6<5Q01J02F1PM>yevqn-yp_y3=w}2Sp$$`jRZx>2X)K?wR2=rfLvl3@jlTDHF!=28v-ho?DC2NG6SDk~R`XUSP5XBaO{197WS) zui&&7%*8^I1+UTdpg@x0aM%#eHmKSblHz%uG}0tZ6G(#yZ42mPgb0LICp_3;NYa#` zuBZVl?osrp^|}Q|NM|YdgAT`i$AQpXqEO1nh!`X(gOT+6;>>op10!@D|RjB@wrKygKcMtDV2P*KEMyDHWDVL&gmTX6JZkQG^=C6SdVC=*_2 zh6K%;OoYgKC_-XAJk6U-UW(05_<5N9hCCy~aI`7k#IO{V&*a${s(_E1@+@nk%n94V zKu8w@5=_KaQ0zI|>_^%PHVulps<~9PHqiwoHL9+LYSbWRv&~c;d!bAT$Z9yWCSIml z)^?~VTcKQ_seWuG&w}z047_OK8MB8Y=xmB37>|h|%pwwHFU8Rk#d0POgU{K^^YS;_ zr|1Up2qxeNve(2y-sB}9ZI%d%g2)>uW)nOoavq~-9s1c7a|?Zbs(L$q$R0FZ^)t)2WH7nsPEX+O=cl zS+?Tu!SQrY-E?Ey=()S!UHCe(4Y8P`^S=oHso=k{bQ^Dx-C%UEfLwl#y#>%J M%rCYd%&UI=A8@}XL;wH) literal 0 HcmV?d00001 diff --git a/front/dist/resources/customisation/character_eyes/character_eyes30.png b/front/dist/resources/customisation/character_eyes/character_eyes30.png new file mode 100644 index 0000000000000000000000000000000000000000..15d5c42366c41c29cc1f0a81ae7e530e941a9ef2 GIT binary patch literal 716 zcmeAS@N?(olHy`uVBq!ia0vp^2|(Py!3HG1+{xL+z`!)w)5S5QV$R#U8}lAHh_pU@ zeAO)YQq&<{8>aUMjDwdy6--lIt@g2$K-KWX?>@4INm#^?8h4Ls6x7=Z>c zFg)14Vwv29@3j{>O?-_lSyj(`zWFitcG?>&-_TzF|L?CnSeCg-`ogx{a}_Ut3T*mc z9T)h2@5jlEOWvd;#jNuRl6QKMzIo=g*IQLGx8Kg(eOK$)3W27u)l;XPUaFG0`R0n( zR!1e;Kkn?hI$!93waJ1@D`(uzQ}?{}{(G0P`2D6;$ zwI5gBT6$giAHcAk@6U^G{@-8y`v1g-?I*{99)>ey6K@`R3-eZaaw%qPjOdAFs@oUz z>+%wo2YClJ+@C$Y;lIPU-+%Xml}*WZWTb5F=%`CZ=xZmOq{sk1fAepDzazEwGW(?+^a;kI{VZqJL}n wlfGZO=D)Z8fV%hE|M&hfgVPN*;(_rW=IH3ArUQm+pMvB)UHx3vIVCg!0N1lknE(I) literal 0 HcmV?d00001 diff --git a/front/dist/resources/customisation/character_eyes/character_eyes31.png b/front/dist/resources/customisation/character_eyes/character_eyes31.png new file mode 100644 index 0000000000000000000000000000000000000000..1d6b3d5a5372d138e55ce660033f93a7ac8b0688 GIT binary patch literal 789 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 literal 0 HcmV?d00001 diff --git a/front/dist/resources/customisation/character_eyes/character_eyes4.png b/front/dist/resources/customisation/character_eyes/character_eyes4.png new file mode 100644 index 0000000000000000000000000000000000000000..92016ee54499a65c0bc85b9918f7fa9420969b53 GIT binary patch literal 1526 zcmaJ>eM}o=7=OFDflJ89#3lF#yWIX^i`VNNcWv)NfkHv5D`TZVqfWVxx3spsE7xN! zEKbzLs2N#|adF0v8H}2+k%}K%R6xa{h#MNm7#jnlW~iuj4h6r4Z-FwRxJ&Nd_j&Jm ze$VgudLOHR#6lUQ)wGA*ExCha<=ufWqQWXoOGmM_zwpsSikRYU16sP?P68uhCYtgLLI>R5h#K#|p0bX%%Si%~nE z7T5#j3QY}T3wh=Pt8m~1hGVUwg`f*43&DyEOIQUY%09|MOO)Bdh%CNjFR#eoVxOWD z6h|aYhnIbf8FGw|fV5R2C<-Dpi%>vt7QrH#1QRFvD4awT$yDpCXr=TK>d(}6c`%T$ zJX%me^Q57{>Dm2o5P&tAPKVtSKmWr;>h`sEQ1bbWFJ;Boyq{UO>DbA-#2cSgZTyle z+@Fy+^MSi^+K>~S#taALft`B2M_prKAM41C=*J~@#!+Ao|t|2`&)Swm*=2$1i_uyL9ib zIXT07e6Q9YY_iAb&BX&RztEMlWo)QpEcooCv3K8?*ELc!uZ+~3ov4`G6{3Ip{e)-g z)9#b56F(1LN^bwSHXC&Qi!d+%41gQ1MKPayqYR8!&sb&dZy<7#y%j~>obuo>H?LgSjP>WW9la8}`J3&TZM9%A8~*`MrD);s z%9}02B?Rb9fWE)qdhe57gLeP%eUEg^9AD?&GIYA{bWQblvFWM&{$$1(6wq_8yxyHW zJG`rZZ^of#`Z}?CJ2<*#Ip_cHWo2B;u7CV?cbfrRkV_t)$k!Qk5d&v=m7}Y);h}#3 DL4gJ% literal 0 HcmV?d00001 diff --git a/front/dist/resources/customisation/character_eyes/character_eyes5.png b/front/dist/resources/customisation/character_eyes/character_eyes5.png new file mode 100644 index 0000000000000000000000000000000000000000..ed7a7eb95ef39b20b4d97dbcbdf3993d68c1e7b2 GIT binary patch literal 1605 zcmaJ>e{2(V6#tI#WBiK#p+kYdabUudU9Wd-uf5yKy0x1$q1)08w`34@z58}Mx4Y}^ z4%@LP6$lEbgCK$k!C(v~1Ox}kHlq9rD#57)DTEd>fhmbV@xp|QgFVsN;3&0vlapJcQ z9Kc<)kLqs9U$Os=IDU+F$JgloGDh4z+fh;xMZ=Y75-JK`?@@)tGE@w&$BCmaCQ%YOTHqOhf+7)w z4oJ|9)k^S8fFcAYz|ySM8l)IY3g>C|Y>~yC?_k(MtBs+kLK|Dac-&M$Q9eW4JSpTh6UP-cYr2Rjp5TL20dOsCum$!rbnGs$;V&Bt=xidRDSb zgIRl^CcOd0B2AUC0iHSOX)*9t*5(M<3ED#030uHwBOE*u#UN#;1&Xm-12%lfUVMzd z!9GPdD34Go98L^c8OU0L1f(4TK~WH)*?9}W+If4x%$wOjkitn6BAINR$66_Mh59pj z93BiL438F6&^&2qaBRw6F90Jdyq^5>$hjN8`jk^H5Ixy&dDITq_IKyjuXUssd|23$ z_9vL~QMLn&xi}fVy?NAzsE&<4Iqg`)Usa&Y@LIa2-<@;(^$o2(KjiN0-Cn%9efRQj zccNL20`NRS2QC0IKs2lO_PsCizMtQ+D{t$fyYU?9n=KC$l`SPyQ#32vHTCE_&E1zy zpX$DJ_~`v}bzz||@ma=>MF&^J)#mlna?bQkIxykWrgg2LVcE_6Yg0xyW^QYK038or zJMlZc;Qg-7E0?b}?|n0O--BJ7saM$0j|uY19w1-8(!2UhGkGK)j=TGBtU2~w*PWYZ zW2=@{i61X*>mRWoRx!S`AEq7IfB5qo9o_A%9s1Sc=)OB-_gBEawI?e+z3!38y>R7- zJ?Nj80YDnS02ujXUW1oK@&|D+Yt&16nsy=Ge6DZiq1~NpYU0;go$XEK74!Ee-rBaU zWbgdbUv~5e9X%zRZHUYe;G%T({oa@^I`$ z`WHAGAU>a<^S`lF`)}Tl-R>t2y^vYmSu=iKVr1o1F1qkS)zavrMC>-3V?0{ZM!Gs< zKV@#ZHg@f0)fHZUWPQ%YPbN*dzv%3NuIApR{ literal 0 HcmV?d00001 diff --git a/front/dist/resources/customisation/character_eyes/character_eyes6.png b/front/dist/resources/customisation/character_eyes/character_eyes6.png new file mode 100644 index 0000000000000000000000000000000000000000..4cbbc1df651d8d987e11ade4ab5d741cf760c5da GIT binary patch literal 1587 zcmaJ=eN5D57=Mv%IyYrACQK8tsr$ghw%5{+Yv;+w9q8$fF(i|)DD>L*q~WgZ+TQLU zip(q;=L}|Zm~4I}i@SdmmSxio#xOCHFyrRb#0(^CU_`};`0bQ!?*XU$L2S~#@ALHe zJ~*mh2_p_Bjm(n3xa&r2tv#s zk=MggD66&acfq9qq<^H9l{@8uwW&;IbbC?CgAdw@rJ0Uq z=vdOD95kYi2S-fDQ;3*>z+=a{Jy9rBGAb^c6ivFQNFSc!Y4GQw6@D?O-PkO z+lX2U>PKi%3XE#^^gu~N#727C(oj?6u+LDU5vV(Up9e>ONL5oMMv-}ihAI()Zb&dZ z%MvmlqzQ!&ij2szA)3!g`I!nY3Po-=&3X%2j;HBD&W%7K?alFtY=MiTy(z3;w;fqm zU@EqTVozWTo{E*c7L*;sDl?35Y6?oK4acyn4HNTv$GVPXuhDeXh}nyiZ5q$o2QBRb zs1{j91RJZfq)o*^W<|~&6bL4V76>lLa)et(q8g$FMxl9u4RZJdUY%6G@i|2rl!uw3 zBdH;lhawvyAmdgDnuf@mAm=J_^8mACNDmglnMk%F2^O?LpUJN8WUM;Aj zeX`Kvd|%t;24GsD-#R-X1uznqmXy!yrA%*$ueox-bW zt+&Afxhj2eqUyytqK~}s>!KeD@PKm9^QPWW`R&gB?7O!z!x^<**ojxptxZSkJOh9< zfC2CfXaM1B$FGdE>}_vdJNs&L-^n@0nomCHdgoBn>qGyA{4GD0FX_K{YGj~q>yDQF zS(Po7b9=U47#Kd4wxZ=|#o_)=f4qYCBr10ATN8Zv+KJplxB8f@#^V>wd1S~q-q?0N z(R};( zyARjdYnvj2S(`rFZtk95MUh{Mox}XONH$oWHi?&^aI;RGKMyPz9;>gRR;&bcbyFsLh|{PCb@;P;I$^RWY$?)PqKo%QTr*&x-br*oLx)G^D`jrB8Kz`Kb#we6R^`%v3~ Mzp&WXTu`<7f0a)vvj6}9 literal 0 HcmV?d00001 diff --git a/front/dist/resources/customisation/character_eyes/character_eyes7.png b/front/dist/resources/customisation/character_eyes/character_eyes7.png new file mode 100644 index 0000000000000000000000000000000000000000..cb3f132689fd41ffe86be61b9718961a4e6cdb33 GIT binary patch literal 1514 zcmaJ=eM}o=7=JPonQXzqOu6$8);7UawVxdX(27C=-%EnnphyNjX=8{n@8ojC$hQf!sG+5hJLjfeH^H@x3l_Oltj;G>s=$=%Q zIF>TeTkQBMsCustb1E9d%mxb~7%2v`vIfd*v9i`;j7BnPw2`!tFtVK4#2IO9?ZHtt zO$>51u8Or>NV4N0T~|4hj7Fn|sL7yc%_POLENP@knkJA15$Tk5K1RrqJ?RK87!kCv zs)rRBOGe}aO1o~y5z^HXB-QI(4=hL4h(eT+FYl&Sw5BP0_Xrr_s%rEfnQ8mzhi^C&kh(cLimtu+eE> zj~vl?S%B%>VU&B-x4h!9zMNBoysl_|MQKe>fiI-!N+hJHnA4f+I<~(qEQ?Asav<5J z)v8@k3wJ=VLQ^Cx#WNS)3k&Mu7na zKvt6w{nm3AHZ}}xm8SMRl^@AG+FfcNI$T=)%?8@&U+v1lOAK#TOQK#RtIG`v&Ht z;H+ciY<2d%``Zq_4|Ds5mG-5r(xuTvTSsquZO>?kDSYWOY9-UzH#Ba>N=vyhN6+Au znZBm{#i#!rNX%#DcV-55=u5J5`pryZ?gkDv1JLn}e`aUFUn5yd%QKk=PJof_PvXC~ zEsRgRb9?TN{mQNAu7_&T-lq1^51MBmEWhfniXWQ-^LctfuP=Uid;W#0M0Dq$mS^HG lKT7vzsWvA7d$(sx0k}Ne*g%!_kD#srkGslsy1ePN{{Wk*`;q_v literal 0 HcmV?d00001 diff --git a/front/dist/resources/customisation/character_eyes/character_eyes8.png b/front/dist/resources/customisation/character_eyes/character_eyes8.png new file mode 100644 index 0000000000000000000000000000000000000000..8326729cee8ea9a5014ddd8495b3fa4c37587f9e GIT binary patch literal 1495 zcma)54@?_X7=OSpFhaJtWDKKl-jdCkUGGoZYwx6kt}RlxvRcq#l)3BOJ9)9GuWj3tEllDqfb z_rCA<{l0&%_^Tf;T=~FC06?L)${j%aZuE8J-G}~vTxl9WTe0D(Gio&1hzU9bPDu+w z%o`ROU;qkIV$YYb41k4}I;MCyf~)~3E00G6u@M?r5H={P1D`&1 z2FDc1f$y~XC||?{LrPVv4r^MgYsJ<^k(2Q9Em&EcM*v}H2v|Jaq(=F;15e}f=$sOh zIF?p18Xfo?sXCt@b7?xntR|KaDcXYBI1_DUZJcd0#-KY%*-3^XD2}(9d5Xd27mmE? zlFSF(mGi#P&4GsuBf^tpEEY4x%qC55AZd={NQxmDhCmubG@%+ooKU0dGYD=N6?G+I zD4L3;5QU)DY&dYlbS{K&#OGT8R-^NYLMbETLWHDE6d4Yu;!0~rjR3q$V@d63Z6X56 z0E}wQx`^r_ug@5x+%4}YrHI(@J9GsVMQCzsVsjX(hS%-D(Thn^B%TokR-~as$j}Z6 zhP7A-feq4x$Obuvvsh%BHD_>^vUhvjtjEPTJ&eaq(;lmn;hc7x)#<4;o42xNHe>5m zqlTc0FymW6zUOVZWo>zv4h2KgYc;JY(*^#JW@yon7QtMubk(s(b}Fi*#iE;1WtxlH z4RxgjN|m}6#?pD_l_fX`Hd>IacA4Nf#!gU-MIwSh)X^mt+S|=G9uKUspG<6 zpv%H&K^4uDjs~ZDV#7%QvaWgE&f547lcUZj&Q*Yl%NxeQuEBk|wvw}LgU1RSoi7fL zWnGEqczJ9uI)7sB`^JYrmJ+iv7an`eyZqdcBu95 z#G`Bc^-rF^{hCEvVucyys1Ls0|l9-;s&5+3QUN_N&fm(%;v*zEomN7kp`fj-Bbv1k30R&f2*zt-L|4Rsx7 z?}~p;y|-V_DJ#rf1~r|N7kb|(bG*%?6_*d>-?}}Ty{R4~-d@xD`{y%a|I`N)KYjsD z7VrJ(K>qjRr*d0nvO|-}Yu^?&+5R6mO87l-WU2r_=;hNZ)`7!&@(=Y5o!tn~@_MS> JJzID0`wwTw@dE$= literal 0 HcmV?d00001 diff --git a/front/dist/resources/customisation/character_eyes/character_eyes9.png b/front/dist/resources/customisation/character_eyes/character_eyes9.png new file mode 100644 index 0000000000000000000000000000000000000000..dbbe6ce1e4e27a160a23f8fb4f42e95adac33bbb GIT binary patch literal 1447 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 literal 0 HcmV?d00001 diff --git a/front/dist/resources/customisation/character_hairs/character_hairs10.png b/front/dist/resources/customisation/character_hairs/character_hairs10.png new file mode 100644 index 0000000000000000000000000000000000000000..d26a4c852d49990ebdceeccb5f1eaa6947b9eb0c GIT binary patch literal 2973 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 E2Br%2@&Et; literal 0 HcmV?d00001 diff --git a/front/dist/resources/customisation/character_hairs/character_hairs11.png b/front/dist/resources/customisation/character_hairs/character_hairs11.png new file mode 100644 index 0000000000000000000000000000000000000000..da5d38f71040b65b87fb0c6b4c6594eb34ca010f GIT binary patch literal 3073 zcmaJ@XH*mE8cwnS69mD?T7ZQyfGqbCQb-r1g=VCPs2D}l1_+R15>1d6P;o7QU}0TU z5DTIxSP+#3f@?<JQa%U-iFq+#ILH$wuD=7i z!(iWS5k*8QBZHSP1yZpqZ_>t9EtWxO7|h*ME#nE|K_$QkV?+`UtggBa3y6ds*p-xE zLa@vij1>iLl7q`Og+vH8#S0ihtmh)YUCo3D#GsM~sKp5q1yk*T{mjdR-Y1XoSm3jX zGTsCGMO0*P7~m_Fg8;>qiW3lsWPrwSB~qv~2F(Q^L3=!bjwcat1O}7h#w3t{uNM~b zCKpCC!&&}ceL*`9Y^+i#W8(2DmC9A+<|>uP;E4Hg4AdW;OlW{yMpNJDs`3w?+OpYc}-KKc{3GYXtQdnd%-H+zY zAQJs3bdop8k3jS%`}hzjB%1dWHb|mS@+1Oq%C`ve{S{05S1i+44)T;zd4yD&Fx3TN zu~MZ}5i6AezP_KU4*a-MBoRtg3g^i(eTkX{%0(MNp}$-z20rJRDf$Nu1UiGkCqVI& ziF5&uE+Er!3_8&b2a-TOpFkx+S)pLR;)UPj?@OOTCr})+DLG6s4;1i)(R>_8q0(_g zB1pk81avZvL7`F!1O}DwM(1PkkVO1s>wMEnQ%6vLPQLy<7|`bL(E=sVJjtQK;rgz8 z2ZNzz1+ly%)NO-NHQCkyrcY+{8#T|p{my&Gs~M;An6GQnd*7UTBnt1cKDJmiX4Y}y z(trDybJCNh1?~xG?FcN+E~bBaHh32c?+x*+em0uxR?SH{c&IZ)Nb zdjIyVbj&U2wV`)NghGX`yPP(mc$lf{PNCcPB({rKO+DlNBis7o+fz(0M3{auOq`~F z)TJ5h3pKWgYp>dZP>Zs^uPgs>VKm@6ur;lCS(pR~gFCkXFoVxyo}RnTGp)WQH_iq( zR_*U)2G_50M#yfYsD@km>&or^cu+r1tFlv_3(Pjg8T{;v_G-BLRFwbI%UZM19{XrI zHEZrBy}}+S&^V%dl9yE+T*ukhOuYEC{BQ;zso7%#=PfMV>}D$c$>?z3=s?oB>+fc3 z98&96AYjQSi*Q5iPq)rBjjGx`btP4(i~4E|g8RZI(#mwgWkJzwasnG=?hw)|9ZXvS zR5;}i(a@9rzkog23j;W;#Ra0hZ1aq%+1{xmM{S>uxeSY>Fh8g7oG7@pm z1->8V#@0A$?_uQq7oG&$wl>~8ATNh2OL*Nja#T7+TEy5F;%mI7NnFX3q!nuVR*#pUF!-?sf*2#*qH3uBE7;ZGW0{QbQ#MuWcI_+fW4<9+x z*?_zI>;>E)g#6842i*@D!1AXhaUbN7R=HzGCtv649I5vRdeqT>PdOg0> z;j3BZu&lc^;2tNxDaX0kaVRFh>ptVmE=xGB;rIOAIVpkoBc4`iBV;8Re&x!coAr0D zUpfA4bxK^{E%eU=>5fhfPZj{iwzpUTrlX$sIw>CLqbAyt%oipj(`;Zk#I63>t;u*(+I)7X8T^*ZoEH6%skb5AH3UzBjH_uKD)CPq{xCq#P zeiVfR##xtIGjf6K?&q29v53n{3B}b5`hBfEL%b}X-5$XX=Cq9Y+LYqg=A~8+h2Hac z{$kgqA4c69mCosoC$=s%5u*)n{^&_%Tj5j~1t zSw-Wb4XLk@8eRLkuEE2%nBdxrw4@tv)>ax;kd4g@sf|c(Ptl#6O6U3W#`+tjxArNk zj}NttMVY~6^PLxK*TR!cEo&CMIUU;Sbe5Gcez$#`y`lWArN%h5+ZSfML)tyx+p8=J zbt^AE8?Zl`^q*#}ZWCHPPlDGBbhIusk>4d}?Mo6 a(Ev%P}|>?z-0BFNa>Vu{9_ z&+Rz%qBL&L%jrEM>FfJ8%gcC2-xtX4oY$2OR$;U_>or&L{`{^o^WfeG!4$`_C>;Da zGm#X>LZ0Wx$nve{3E%m)RWGS91`H3oMT96&9_+&1>t3aGn>i{c#tqzS06# zBDmu0m8WUju|E&Te<+VD+?&&kkl{2AoG`~c3;XEO%W>w~N}PINaQ7;2RPF= zmgw_so$Bf9U1MT`lbd`SvQTRCa*QkY*4&fQmvb8b2(GoWExeCx&^T>7z>q9a*PXHN zDKnW_|L|q|?NcX0pADRgV-?OE{lOaT_>8?~$ImmWy4f?>mM1g$n|xrQ{?F5qjf*ln zaThcRu0!V{Z)C%_9Xjle)dbvroKt(G&6u3KWP5Iioplz{awbua6mptMP-|87tX($Z vIQ1EC0ncsKj&J7Q1s=U$^XkGUqq(qvpl!X?W!kpMpYkBT5Y|~AZpQxrwcHDs literal 0 HcmV?d00001 diff --git a/front/dist/resources/customisation/character_hairs/character_hairs12.png b/front/dist/resources/customisation/character_hairs/character_hairs12.png new file mode 100644 index 0000000000000000000000000000000000000000..87fa1143839d20546bb7d2aa94b2b83f5b8a6957 GIT binary patch literal 2774 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 literal 0 HcmV?d00001 diff --git a/front/dist/resources/customisation/character_hairs/character_hairs15.png b/front/dist/resources/customisation/character_hairs/character_hairs15.png new file mode 100644 index 0000000000000000000000000000000000000000..a6ea3f4873b33f74243f4aaf36d75a9936583ca3 GIT binary patch literal 3273 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 ALjV8( literal 0 HcmV?d00001 diff --git a/front/dist/resources/customisation/character_hairs/character_hairs16.png b/front/dist/resources/customisation/character_hairs/character_hairs16.png new file mode 100644 index 0000000000000000000000000000000000000000..cee3757c167821b2f24ca99cd1ba71afcc01c7f5 GIT binary patch literal 3404 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 T4{-GT4~~!L7LQW*@O}RS&Tq{| literal 0 HcmV?d00001 diff --git a/front/dist/resources/customisation/character_hairs/character_hairs17.png b/front/dist/resources/customisation/character_hairs/character_hairs17.png new file mode 100644 index 0000000000000000000000000000000000000000..ee5e72a5adb129f9cda063fdfae16dae34d1df6a GIT binary patch literal 3391 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 Ja?U9z@jvYR%PIf> literal 0 HcmV?d00001 diff --git a/front/dist/resources/customisation/character_hairs/character_hairs18.png b/front/dist/resources/customisation/character_hairs/character_hairs18.png new file mode 100644 index 0000000000000000000000000000000000000000..0e8a4e3f49550aaae3a6cb19dc113219ed3164a5 GIT binary patch literal 2601 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 BxsU(= literal 0 HcmV?d00001 diff --git a/front/dist/resources/customisation/character_hairs/character_hairs21.png b/front/dist/resources/customisation/character_hairs/character_hairs21.png new file mode 100644 index 0000000000000000000000000000000000000000..1010291c1f7132eb95d8cfd162275b138868bca2 GIT binary patch literal 2020 zcmZuydoJQjnM3l7a9V05Cik$Gu)>3Z@FnB0pN;*-mK*$(D$o`ZA2bX0x}i ze)h|K@diO$w>ZHE-%;h*%u`d8R9+o)*m_#Yci0~>@JW@Kx>KyW+0}4g^wqXRYEjb_ zyMiP~*BvKJKyr@b;^p1#fqXemrs&L2ZJO>jjgu;+3%vel{lh*HE6av1lhLqv{nU9<__3O8g>Q-Iol0FVtQgkO9vK>Te)7z5Zus++b|gl*-MKQK{>9l>c& zVi~YsWRt7I_RGCB?0qD@T{j;G7s?HX&YpOh20t)9_C$>Ug5#C&}LRloHjR?!n9UvNDB)rWIcx9wKKTZ>5m>M7!9Y)2XAY- zHR3epFqod2GS`?*O8*CJNpfVbUjUxnVBaMV)O=WEP&hT0=k;h4R%2Q(7HjlrxsH*M zOa?Yr5*3Q{Vnm$j^d^=}L#G5wZEg>SNp6I)rH3mJ9U1CwkWmkhcB!u=cOowDH7YKiR_`NKqaG8G5sQ+j`Qjm9I@Z{VnGnm20OMVSW+R28(H_u)kTon9kjpUd?SjYi+lQrGp}^?ot6I01G}<{OOeYTgF4-ZvP|V;gVp| zRoDnY*Pz$h8s+NpyJOWO09gBheg>^BN-E(Iw|Q8Y)mIDR?)s{5eJPWIgm*dfKa%@e z-^oLxYPXe1GM!~k6bRy?UC}M1z*^g<;glE~`2512@t<{NY{(pMt=KVdhl5~Ab8gF* zx^{vh%X3YCZK0ljpkoP`-oBh~?!(EfsMF4h)Oo#%v(cwcQ?k(G<=Jf4Uz*C(ar9B) zf_`685|UbQF*tWAxnpXFUwyNDY4;)b1`Rk5J0*OLwJ<=?_ahrGqW;HZiSJ%p1z-aQ z7A@W&G(QaT){*m6Csz`Q4*37NP^-zi1ApL6nP$_R9Je8XQTx&)I5&h49@NatchT+T z5jF0O%KeNTcHZn3XQ{n$^2=}#@r+n{7{_3kUdQ8%<<`P=~LK-C~h}Uil4#hjo6*3(ZJa$_vkJC!UuG=XGWm;saE{ z+{Yg+_=A?I7MXVcfu(^fF z*qDBM8Gt*IOO&QrVOZtWquvVZsr%Zp7ISiOpt3G8CQG_WVSU;`)Z6RM8K0BJSRfa8 zT0P|GTv4CBy(sE>wn7lYeDG);b&mrL*L#btG2`ZCu9N;DDGW#7KxMgme>tZb5-RAD zAA2p(lvZ6oe=>IadTJGOH>;4@>49J#Az9Yv!9{=CDU9`Q3Ha)0U%;wG6lt5K1u&WQ4fYFVI-b~ z0x5T~{%ci}h#Dkz`SehQgv{k+JB@UUX7PUq?f{Y~883}nmc(#*6Pb9a?I7lw0zTca zUw_yx;X&Wc?k)ey@FIVg43WV(Jm`mF5usr#X-{im4?D;WxG$D${q^lrEVpH7*Urbv zH>5u3#{CdvNK1|Xo%SR?KmqoP2l+rfCMf!ljk>tv2wW(<_>lmqm{p{(8#Y9LFOKE% z`BEPYoroO2{*h3(xU?`-iFt(WpuZBRn?h6XrHgqux*DW&Y-hhYTR$s;AM_2q7mxbK c(Imri{Ths%Ur!W-$hJ3d+2`T-z@DD+7pXO_5dZ)H literal 0 HcmV?d00001 diff --git a/front/dist/resources/customisation/character_hairs/character_hairs22.png b/front/dist/resources/customisation/character_hairs/character_hairs22.png new file mode 100644 index 0000000000000000000000000000000000000000..89bc159223cb399fd228955dc53507cd4a06c5a5 GIT binary patch literal 2910 zcmaJ@dpJ~S7(c^gD0eEXmT!X3I6Vme@mS_m6${JkL4b`M&de@4xqbPHKR^r_NHdr2qiv zczZFJ(7Fe@6`C5*bL{ts8fY<M?gAK>~TbrBgN4UiHG(WEE$8xqOlYz(SeG^BR^dz$eNfJ zN@X%UKG}kH&Zsb{R7AyKVq#+KV;t;-;=LFgg+jq#@fbWF4I$8yIDwQMixx<%7Bw(H z30KS)N%=wna$X~wBaD_hqaaT|h7c+8^ZTq=Ao-LiC}o&fwg`i>$6_KQ=i^#HOQcNj zA26%5b}n)Ma+ka!j51FxzUlJK9Pa+V|Y!U~D=8`xRJcU3A#gQBq_57DSnL&4BI69Es-CgN8 zoIBCg4e#bkV34p5bT@`a;!_YlHX#o-jtTZoW((qh^3&{(g|>Ar?j=7xGNy|A!A0ES}55@ww-zXX`bi8m&g0Sa z?Erufc{5yDvCrP_yqRI{u3sqlWmy)o+uR`Q6y~5wqrm}5Z%cNkqDAP!NV%t#l9duA zB})|d(iyj`v_qQOm?0s~A2#lEu3gU;PWGKIRh93P)x=*s*KyVEcxvH;XUnH%pI?6% zXww{3eE4R+x0$eY4RU3OnwA@8(2sb63d3yLyJ)M~; z!26a`R&Qfrd0R-uN&E5-_SvmV38QAn1+Uk()h z;OV^MrP9;Z#lfi-F-z}5H1r;7*7I5o@XBWt!3nc3-owx%)7e_TE!ESr3G;e!@{8t2 zMu}VHK(kl2X3e_uC>oHYQC~Yfo*co+P6|}spwdp;%*OH5tUHFk;G$OxjJUYXHxl58 z;bM4;{@WwCJV)8#ED-{Ck)WNhL09G8G0`vt@kFLWIGfqlb3Z<|LKN=#`aox<4^UE1 zK>*Q0qT?H!zt1I;$FPKOHGlfRKDD#0)?3nmFW)T}jWY#Id8F!(XA)%Wvp$^n2f6=jjybJt(}NTa8Y$eB$l zF=+W-r@Rpp)(?agoNc`JyUEEGW8pHjrKu_z-=l0K#P3ThdE>jIq4aoz0F>xty`RDK zaB26^{Mv$R%yxH`$!=bGsjR#`##~1x?TtPpxU&oN2O^9i%X=)850GRE%z&Y8^7# zza$U#09X?WI4Dw&kwa*8HAU__Tl0s9e~bUKO$WR0V8gENk!ol@r*@92pBM>|EAa9r zy?{Hy_ptj@Xqt=Z9D7uqL%lYvf2;lvM3{b7DgB%0c8#lEr*=LutQb!W3rWu~9_8P= zrhj4Mk5a{snb{P0l46-b+sclTrZ30u40*0Wp1#{k{<`KTpbs(3^=TYBK#O0Zlai>1 zE^EnBd>1RvN4mO}^}9Ka7ppcm>U9hIftP-HwIZ|nvTVSN^NV3$z5!5_FnsRkU=}et zDaTv(DBAapj(iXxP8~WPweEQ6Mnmk@q3R(g`qM|Sgr%_faTLdTSTlUZM2Gvt9ZU0+ z?9#gICQ*0lKJ>Yhf%)*@665KI`je_3?Kd}-B9Ev@X`%0yBBKU!1H#Rj$(nUpBQ3VM z@G&>T!OJ<4x^o3Pf6k}IX_%xaei#`Jy_37->4v-wM`$tI*0o-p@C^>KTYpP?&%e6K zXvq~DU+TSfGyMJ~3w^frME9=U%g=Pi5hY&W)$r|fFsHtDrAe9p1z6=H1;o38k$~sSkZ6t z7K6XMtot;!k2lbA4YPXO&9bA>XA$y5xFMlANSXG?TA`{}v4-d#@*Tn%IYaGr$lh?T zuISV3$uneyWjcTldg=D+cFwZwi9>^zW60s%oi%DK%{^BNGvYH(zzuxT){f5<>?%#g@h*DM^6xDSo*#jq9?jQWW@e$=N#L2QqFObabO&vVn=NJCN{J@0C0Hx? zHR-CJR&bVLuD2`&UUW-0y3Wzw90okyXKK&%&sKkX0OG2LWy;BasJ*~>4Xk?J!qGtQ bZkPrzSeYjgrUg{Z|M7ae`!mYi_8j~hW&^n! literal 0 HcmV?d00001 diff --git a/front/dist/resources/customisation/character_hairs/character_hairs23.png b/front/dist/resources/customisation/character_hairs/character_hairs23.png new file mode 100644 index 0000000000000000000000000000000000000000..b4d49149b0056f5f6ac241fc7d7c2c6669313734 GIT binary patch literal 3307 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 P00000NkvXXu0mjft3Fcu literal 0 HcmV?d00001 diff --git a/front/dist/resources/customisation/character_hairs/character_hairs26.png b/front/dist/resources/customisation/character_hairs/character_hairs26.png new file mode 100644 index 0000000000000000000000000000000000000000..d266a1157b01f1feb859dda4b7f378d8cab87ab8 GIT binary patch literal 785 zcmV+s1Md8ZP)Px#4^T{0MF0Q*=Gbh^tw)%9G57MO=HlP*00001bW%=J z06^y0W&i*JlSxEDR9M69nCorpFbstWYk`u@02Z}?BTo>(`_FVq>k&$p(-!EDi_{8= zmgaYkQp4ei4e(2AU6-E#Ze8XN(S@|q{)p}_!1HTZdG0FJQ* zxC-3JKn1cVK?RCn>gwFre<}$w08^{gDQFE0&bfM$3Kv|9w+ z3gon=qD*W7parxeKb%i{^sNA*{vnkwmxf+6(>#?4?{wB11K5Me0M;j6+rz#AjL(by z0e~O&uXU{}AKoY*5b1S3SYWTItC8A#XaSw=~B&?H^cfI%*!=HB2TW zPyp*2(k&OgrwCyBdfO5#VEV_&zVF4neEaivMZ>kOeE6^OAwN$#&xaPcm*+_}AKHEo z=&Vh7;KR_M2lU}iS`>x`2jGkP7X-oQI-Cf4Aoz5^hoJ$)1CX9TAs-CVbd7Nb5IF^i z2=tD}6Boy*T`|aj3TOv%;;gI|($0Y)fZ|o)qF9O~@LFy#VtR#g?FFxR1w@cuHIcHQ z)*T>kI;y-Tire=HH5FXYHxWYx*0jI*Os#Hprd*Q4a@HSxguf)N^=9iIrJ2*`pDnGf P00000NkvXXu0mjfR*F{K literal 0 HcmV?d00001 diff --git a/front/dist/resources/customisation/character_hairs/character_hairs27.png b/front/dist/resources/customisation/character_hairs/character_hairs27.png new file mode 100644 index 0000000000000000000000000000000000000000..3920e8b9415cf8a3d9ddfd85ed42d4cd4607c8d1 GIT binary patch literal 781 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 literal 0 HcmV?d00001 diff --git a/front/dist/resources/customisation/character_hairs/character_hairs30.png b/front/dist/resources/customisation/character_hairs/character_hairs30.png new file mode 100644 index 0000000000000000000000000000000000000000..5644f00ff11b9fa8b9e31c40249dd442f72b44e2 GIT binary patch literal 3340 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 literal 0 HcmV?d00001 diff --git a/front/dist/resources/customisation/character_hairs/character_hairs32.png b/front/dist/resources/customisation/character_hairs/character_hairs32.png new file mode 100644 index 0000000000000000000000000000000000000000..a1691f9d69d3c94726dd116193cb32bf66e22990 GIT binary patch literal 3373 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 literal 0 HcmV?d00001 diff --git a/front/dist/resources/customisation/character_hairs/character_hairs33.png b/front/dist/resources/customisation/character_hairs/character_hairs33.png new file mode 100644 index 0000000000000000000000000000000000000000..d916dff9df44954edc0949c5d528317afd74a15b GIT binary patch literal 2671 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 H=7w%FRS1LvH3v#9I7dS<(Jh({b!j*xm?Mh}U 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 Ef}cAvF8}}l literal 0 HcmV?d00001 diff --git a/front/dist/resources/customisation/character_hairs/character_hairs35.png b/front/dist/resources/customisation/character_hairs/character_hairs35.png new file mode 100644 index 0000000000000000000000000000000000000000..362776b08b2e32c1cddd99f60f6240da3ae39b0a GIT binary patch literal 3186 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 YzpLg(AqVVD`v3p{07*qoM6N<$g5^666#xJL literal 0 HcmV?d00001 diff --git a/front/dist/resources/customisation/character_hairs/character_hairs36.png b/front/dist/resources/customisation/character_hairs/character_hairs36.png new file mode 100644 index 0000000000000000000000000000000000000000..0ccad45fc5f74385c2b1a86def4bb9f2bf773e19 GIT binary patch literal 3274 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 IM6N<$f)oEV-2eap literal 0 HcmV?d00001 diff --git a/front/dist/resources/customisation/character_hairs/character_hairs37.png b/front/dist/resources/customisation/character_hairs/character_hairs37.png new file mode 100644 index 0000000000000000000000000000000000000000..f7265773a20ea404ddd09226d1648aff0621ae6a GIT binary patch literal 3590 zcmZ9PX*d+z`^RT2GYmsAJ$5rxc4K)^VeCSY84=A`MhIE6MA;_09)q%zWs=E~rL0Me zrL0++>}zU@GTGXzRvTRBW7m;)#Cg*BL(Nhi|53 zSoJ%ecK`O4qPmM*q(EVJ1ynSb;fdJoZ?gLCRUEZb1f98WfUctYTm zshXVNR73FYfjUks=Cm|%?M!2_NAuoty-p;JUo_51kzy8(3`XgEy9beeVo{(q=+9`E z+q7uab$di^90)#LMEY`El_mSc8t5iZNo4xYwl=rMWaK_rpSfW5Aq!cDT&3^6xjjmo z;5=j=wyZpiH`35XhR^}oz%#+G>CQPQbKsD#RcG{3J>>EZDI6IV7Ga!jJsN`2QIYY! z^vqLs=dd$C!B6^0%hdjZmW4akQw`fU@@q0*&xy%8$;Y_xZM}U5`+EeEH%h*^Vp8&_ zYFJPo2-p&&9oQXjW`2Xx1TniVY%%&Moyvdf2euKj{b82Ov$pI?8}O>HCyjxQx#?^i z3bRUx507Gak$t+pjP~V?(ExTvwHt2Swegm7vPfN}h zOGMxdd~SIi5bhMMHPAUcNj#V^3^(U&MJq_p`0XpX@8;LRAL!A}=_Tg_Vy^`|9Su*p zsUaz$vIf-$L~phLZcg5#j%4M|-3tZ?*A>fDyOec&i^uw$WmgxZifh#jmRU7Qt%duL1^M3m*G*+$)Q>iyiWSA+*N57A7Wv-cU_`Lg}`M%;2Wz`ti zK{c$6(>vJC@UIE95)z0S8r>3QHvle%M?~@45PH>dvW2>Jx>dh7hm7y(Quy#qkNO;wBS%5PqpgJ;>Jw8<`vW^J$ zF)%;{40F^n*)+G|Lt7)v zsIVxCd-jADWWe~jBOZjyl2@IiDcZkEn;a{wY;WMq>OJY=G2%&$PkzKW?mCasdEtL{ zF9H23a`&bmkgRO#2kNPLvXfE8?CX!hM61D+~`bn!Z zN)ytt^4!q zN1d(&Hyg?sD>bC-JxM}h2d$-XBKbJcniUS<@?y9}6k4bXjtLr>gQxK*jM zHKw8oR+8`F%Y>H{3lf{Bu;^qq4bYq%MUay^xq4DF+r^n@rN=&6nh^x(CE*@rvmr!h zEOc!wF)vui1qZ!K>2{uyy2Xbunn|gUKVCT^$;8Yl4^%A~(}uvge5cT*xjs97&O(A@ zf6tbMh=C#@t_-r`UQ)AEnbzKmMivci_ zSYED&EiT9&Y^BzgToE~MmHO&%jpq)*ScnrRLP+q8tsuCKawl`XdbN0MLrvWuZ}Ly7 z*f!^^t1s}sIR2s23-oh$yAQGb?{QeFG9GXHX-#Gm6>@K26G4-`c_jIBBPj-?E>NBW zr>v@LIm^hMkg$#>e6jl|G3fF+`h9*iSk02>V0Swyv-C2scKWAQ`i5}%4+y_3C-F`ayP1@7r_MfJp~9gwgchCzN=S{;&P>* zj)lKb_N_|~5JaZcjikPD4z2jz^$jdu$d-}zmr>d$>5f&K=oBy9BSZ+@>A(**mUD-B z%KL0M0h?RhsfzQAv-P+Ic zSM?h+nRrPJ*|8_>`O&=0H=s{_&ph3Xu=d^-Co8zTIr^vQy#nqOB7-AcvK47gtjpbdcUsQ3yv$N|qFR=hs|N zn*X(Xpyrjy_5K^ZPwNVr&Ydm{a&s8`|IGTI2>YKlZ3U1d^|z1Fk_4=94dcMU)Pt$ao`i`~J~aQM6;UawFzMKDT%RVNo=|3J28G(W2sFrv0tF4EL8p{IwU z%8bT&onBI-<)WeWtudum#b$N{*a(<>!cY*-&}L8;x?Wsh*@0v7uh$Nct(C_GnZT#S z;(gWtqJE9|VoX?sAWUj1iCu#?5T#S6nV$z)K8V6Y_`^(Hy*h_-R!ece7Ms{B8W6ts zPLjAGCaz4NUgdKVNj2}xCmq4>m!h8m(+q(HTO@9wm%55w*~1GhzbAjQ(r0r#AUK+^ zCxaD&V`tEdzp|FJp%RyXqLzzZRXP^~{o#y=x9zkLy zqbD6Z`BBAuL9m8(-h#0M84-`qoKvd<6ZYkKk0eEHoNPd-X0qXR&#BLaOnrd~_%VE`_l+f|g#l~^erkf%5r zIeDBV?TgKwH~j-3zN8o80N_izcgIFMFBmD8%s#nYFF92|=v)=gcXw1FLZ0QEvxxpB zT8toyt}|8h#y@qCU1S*z@rmll7?R?R_H>?L``RGy$7sLD5pcScIR2sMjjkBZN>1ZI zD4v4}eox=tXOa_7MiB003iFSqFT!Q1I-LPDLF6U?y=d{b*o9a;O!s`{-TpAV2k zdi#Lr5{Dy2Ow=wvzk82gtA6M4HQw1Aw^zp|T^QAp@_CjkWA&9b4bRrR%$*IhJt3Ca z2X~ougeyWl#`$h#w*TwPhilM~)X&l^j(>4NQB1@WG^40ehZJ=lq$TUsD6bp#PbTsa z_@qu%9-8&smQ)$>_YHX%MvVEA?$OcSRuPrk_DJmfBXFo%?c*xVE6JIbmpr_>FHaxX zQUkD=7kl!&^54axB^|HeZ#hMd&aLZM2Z?%gWMzx;t4y|=6pP8H%z+H)G}9qpCyCNw zkFkteZL5&2Xx`KtlJ3jG419H_6fWT=hgHmcw$+D5?1KujX~9-|;u9;WCPU24hd#73 zgLI?Mh@sG1)>S`?P|zie^3Z$Ft8K+aLd^i+fX<+YLf>-G%k`dLcW2X8HfxPG0+o}w zhdelKc`;E%;LWa=&+$~n_PivfZ^2e0Y(0YykiSM$HX(v*bItkTz1iqJM z_M^aeH`adxOO9L<$d+=z1f|1jGhxnxk6j!UmTHu;T%x{C%?CgCNQv(iJvmvX6g)L( z{Xs*%40S8P{apMN#F9kS1vVYvJB<821(Ws4w$5YV@6+d~FGg=7S^qnLh3OTOS|fby F{{bbexr_h+ literal 0 HcmV?d00001 diff --git a/front/dist/resources/customisation/character_hairs/character_hairs38.png b/front/dist/resources/customisation/character_hairs/character_hairs38.png new file mode 100644 index 0000000000000000000000000000000000000000..e08b80c96c0f72777cac4b4e660320408444fc0f GIT binary patch literal 3690 zcmZ8kX*kqv`~J-s46-I;AA6)wkE|K%WXrDA{**NuM1yAdMUf%9$ewLHC3}`3#x5;( z8kBtxBU>8FJJ0|4e|g^z_jMoFaeuk4`#R6_IIn0+b3=AkK~?|&*o}=0tm(Hi{eW;L zdfb`xCIJA)MPmb9+n}s<2Sv=B2^TVVgH1Skm|8;q%tD$rK|^M&ocr++ZMca1Hk)8w ztD;%nA~y)pHHzt?!1eKsAsfe^r(GU* zoEK>T%;R zH@|q2u+TUMI0&(C_~|?EBg9=nDW>lCDHc=$?z5HOmp*A-OT$oi66UM#!RCUX+Fjac z3II4!m^-ld`MZ$`B60sdX8H)?nAV#Lh(of2{GUNU;27CCe(nTfHt3?ti zKx+kS#TS&;^&V#MS8~L0n6L$}$ll6FQ4$QN?gojq@QJOF!zfV?4l!E^=tfibNrk!ni<%C0)QwW;~Qt2(tCf{`5O=Ye)q5!O&nmQbizMbCgfoC!Q6N= zUv_|$9X3X3p%kYccgFbU!oFE@al1xI3f>OwUN;*kIvN+cDDwRE!YxG0+@2-jFXt)l z#OueLt~}o*sP(@aC2EekXh06g%^l=(1voXjO(ML*B@5DUl8C)} z69P;Jv5Udf=HzKq3Gi;USph!eoaCF|0VCo>n$_G|Uj4`I4|$rD@<4zG5c?YIWfe4L z0)EOm6$llun|R*iNh8g#LCNkYw*AX1&RWp=Ee%FOWzg|{U%42JE5(2}x2w6T-O7`b z{pww7fOl_!lvfDxAc>>DUDX{xX)XMv_Slb!%QfopP=itk{>K6xc;$VX>Cy#V`U8J! zh-D~DIg@JYS{fMB75WMrYp^;nVA|{E#rR?>Q>0jhDCAj1PwMARFHwk&El#CNEr&mi zr!lVk`jDMZ)lY#+M>9!GWDD7RxSws*7B%aIaUL5Uv{pA7wJQRgt` ze$hDi6@lDgb4V;KRXk9EDh=X|r13WwEml8k&m3KI+Dqf0N{hoF#YMUfcBUa}Ko&94 zVSQ`hiA2iL*D(MAwUk3b?Oh8dJH5&rmK_nVK7CUu6!oEO&Vwix9ZK0QgiczQN@x*E zEQJG@S+C>JmxIX604bnpC@xuDG8zY*>`*N=YFt{j;7Z(La;+>GkRU_x>*+*z{uA3s zn6y??B!_KU?fTd}WA=b5_UXi z%+Wp*le_)#CZs+^%;^H@UesxG~k;V z#O8AnaKLAlcAaAWP!|O=VjUGHbF25hoQGz8T+%%F3X;Y-fpMUJ_j`bGl@xeS((V~^ zuUv0+yOlulHadk47NgKN#>~KOGZ+fBU2kc?+x{$Xl)9a>FMDv&^CB=qoT#rv>mK$PhHO8EnNVVMWgIeK!t(|3+kz8(j(4Sep-^Z z+$Jp*Ejin{`~PBM-id96Xx;VI>4PtVEn%U%mqbtM?y5mUA}?!_R;WC=x&-X!-xirG%5tJ|=4co`98^-(get z&564ZjTw(yX)tGG)27NA1DDUZg1M)E~n&n3VFz*o`6-`5C}E;h)ti{($X#f6R466iAG$1qrdf`lEa$I==Kj;?WafPh?$jNW_AgqH*WJVONVQ= z&V7fzC!c=s4{i~LIrv&2W*aVKAw1+UI$+2wRuD6`ile>%mt$zQL z`khhqU9PSwe()$jmU43j0KHIJKk-oHpF#CZ`A-d z0kPBo<7nuZ^1mj;QNZ5;rqcNzm#xbm->fSew$64)R~ zTg{A!Caomrw+rjzp?C2BdT42ROzw12j=}vQeXq5*kJI*qqF&><#dHxbNX`0EOOISy zw!J-&u=GEhUSS4ydv+rImm$S|8u79dM9hiIt3a0tr^iU=)lxI)wcXoh(;*gv?~exY zI_0qC{vC;BLfQHWhvnDn^TpVz8Z#ZM$;eIjt&J(PCtv< z23RWnAu%B!f7n#ESH?ORawk-FW9W43oN?UTy>X}S9w~3`@V!;1=U<7DmMVbv)@ttkNX#F`UT|)pKBT#*h*QHGR<37SQ(@`#eB64MiGV|PGBPqY- zJwQhJIRFdtV?aQ-=R!{*{b%aew--=L>wIs6<(&4@L6S~;%vh?S{a9ZbEvqH5-7R_T z5v=lEz_BX0{rRkPwji>XW<*}wE;~;rRugLT*X>Kt6^Z992SoFn9UZ{-d?uuJqTyk@I?Wh_|8N3%HCgrMDtmfE^o8>apeP=rP76K3Cpp{of zQaQ-Wnu;p|F;&^M;sIl)n>ka<8L-dG6qDy>8{Y@^pEq2 zQ^Pk$)~{sP#JMeAX_9+8$ue}+NJSbr(@_$;Ihrcl`3OK@GWo9k9=OT?GQoJFkBoAM z{cd%e8mh`P*kX;t-XOZXX1ZJYEJ#ylI{1CLj4Sl zt7lEI7pNnxe6XFm;jx>0Pa?8RGBIf4cpAdgs%=W>OmBFILeleXr9@;|62DG-_n_Fmmq=Mi3t zRo{pKM3b<)g#+%k+mB*KgmXlbCR4=7fy75E_LTtSI3LTXRvTL&eI4QEF!e-U0gPNjTv@CJAvDH>A?B59vRBIr8P2}+7vC~a z&&PS!dKTLDBDk$IpwYAU3-4+A&Plg#wH6&xdSefNX`&WIA6{THATK6(XtycX4Tipq z&6k+a_w2CHSBC$t)-Tc_i{%B|LM_xaLwbj%w4=*SbUMyzO3`;nz!+_AP^RY`{vSO5 B`#Asr literal 0 HcmV?d00001 diff --git a/front/dist/resources/customisation/character_hairs/character_hairs39.png b/front/dist/resources/customisation/character_hairs/character_hairs39.png new file mode 100644 index 0000000000000000000000000000000000000000..72427258b16ba0c62eb9984483fb69fc96f152c7 GIT binary patch literal 2408 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 literal 0 HcmV?d00001 diff --git a/front/dist/resources/customisation/character_hairs/character_hairs40.png b/front/dist/resources/customisation/character_hairs/character_hairs40.png new file mode 100644 index 0000000000000000000000000000000000000000..e503818d4b04e1ef4f5cce45d58c546bab014a31 GIT binary patch literal 2452 zcmaJ=2~<;88h!~;g4F@TK!wrr2#9bbD@jN~VgdU^H6bmdOW@7ynF9|-~avp_iu$s ziP7`sc+UXh@sw`0%O(E^^h2n zD)Kg7g*X7znMiIkh0OUw-+YW3?$6c&p`B2!6JDgn_T81ghmsfnO5 z_{~@lLI$~Br8BCu8gSa8RHn@_a`6b$w;`x?2?_5FYYguag`|vRlIlnlBAKLCPsjB} z+h7z!|EKXmZ9{UN4kC#mgEmJmN9v*Un*k%a`*TOriU=F_a=i*EiZolOmFK7-jWJfp z#Up=+3YCIQl}j0N3Zx(?AtpqiGH5h{lp&)KFRd4O$&25WJ~67?`5cD73kTpy@KbjamrlRey&RQF^T!e3NIk>H{1YbQ(<& z!ekPtWSWeiq#&D&5h5e7$TSK~$)eIjlo0+MUh%v9z3o%v1&Kp9Lx)Y1LUNfxDI-91 z29rRcKy(62&ZH4obOwV=W-(+TOc|bpP$W&a&hJ`j<_YP~>FfK!K!o?B1!<6Z(j$XI zT6jGS0A?MH6^1999z4$o)Bly?cIWt0v_Iy0VO86%zQ6RqN!HA9nY8=69l4aa``&w#|tFlh7bo8??hP*yzF{f&?Q{h^)|!dAl;3cww>2eYxaZK$ zhwGmahSz2Ep4)lI^5vC%+h21|rNd%$M|nFYcno9t#`)Q%(@*SAY)5*>Uiub!Q<^$> z8!O4(P7HT`@jB}1R7}xSdG_^C?j!tX=~JU;gp+{f?A?u+OMDi(qo1nr@;M`Q)y2Jf zyxq}%{iK&5C|`A>yyc(Ed5=$ksc51^|25gRmKwy_f2MfNf=T9!bpb<(uy|^JyY$)v zrzR}6?}V1!FwVK;^XQ{P+p7ErxAuyKoET(B3`$_t}X~mOyLX zvsJ#5?!e*02`9^}ru3`L{CW(Q^Aua1$p0Y?+cwr52MlE$AI@1>U)II#ymD}~*&V!m ztR)Wi$lBW*R$dnlU;&iG4M1B#00U1;+W|LVHVOphqWM6ob7l10HFc!S5#H(-m@d3T zlxM21d%o88Y(BOtxLCW_$Bw#YyXlieL5XdPUO9F7B-Qe&o4y|<+fg`Fx>s%xs)@rn z82yWLiR}1IpDy(4qYfaB|D2W+9Lbl?PH8yzs1&HRWoQauPm~Ls?PBwGp+D9X_NMuR z#G<{T-&)O6&8_uIteH7Yo~WjXiq5!zux{Lcdram4ICW8dB!399Lt~YhM6Y(7MD3d7 zXWcdt0}FbKiem2@=smZl!m;JMdP^^3bQO!J0-W{bP>KDr%^r@et~h#jyk_M5EzjDU z*j@Ha+tU%zI_1;5TLViho40UO+E$9=C*FM;h^o727`YMc2RaIy=i?;H0#TYW3_qi5 zAL-H`(iSk!j`EuWJAiTLY93%m4Z2FU{MbL}$}h0`6)zT*R5;+%#sj<6Y2N!oN&Ae=4YJ9>v zEJCkv?5&kFbi)KCrF$STP&hKuWkAK zh^M2QjY{A5Rq`Rr1xwY#GrZ~m$8!fvz+g^hRFYnvbrW1`IeEvYF^Zplu|4%y2XMl_ z3U`x=3~l0|>qy(cq(7YB<22Gd+a)e33iavNn3%#o09&;|T2dBA{@=W{uP%0bXNkBUW_dQLDak&gY?Bdc?OgtJ*e&e~HfluDTcOfv)KtT8>I{O4k#TmZH$bEc9`A>w)ukmV7KYHSB52Q11NP z8x`Mo_2tSNwWHoHeK?PtN^NA>np*Sq!wYCzj>*1j_wXe~AHbS$|6UV3aG~yETHmCT z8((hn{Ai-PD>r8<-wi#;j+6guS*1<0wV?BplJvik5(oQ5r}0xpSII2c>m2U0KThfb d471GcApsUQ;iIC`=Zyf!ij7PZo{Erc`yaQa**E|I literal 0 HcmV?d00001 diff --git a/front/dist/resources/customisation/character_hairs/character_hairs41.png b/front/dist/resources/customisation/character_hairs/character_hairs41.png new file mode 100644 index 0000000000000000000000000000000000000000..9e970d562f32ebeb77ba12708c950937d9b9b532 GIT binary patch literal 2610 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 literal 0 HcmV?d00001 diff --git a/front/dist/resources/customisation/character_hairs/character_hairs47.png b/front/dist/resources/customisation/character_hairs/character_hairs47.png new file mode 100644 index 0000000000000000000000000000000000000000..8e6471c90b72b1e917891e7c733a8c2bdec3e295 GIT binary patch literal 3719 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 BPl*5k literal 0 HcmV?d00001 diff --git a/front/dist/resources/customisation/character_hairs/character_hairs48.png b/front/dist/resources/customisation/character_hairs/character_hairs48.png new file mode 100644 index 0000000000000000000000000000000000000000..f08147bc351b49a50457366b3687ad2ebdacf246 GIT binary patch literal 3511 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 literal 0 HcmV?d00001 diff --git a/front/dist/resources/customisation/character_hairs/character_hairs5.png b/front/dist/resources/customisation/character_hairs/character_hairs5.png new file mode 100644 index 0000000000000000000000000000000000000000..23538b24c654fec047a4ebc563754a634bdb6e5b GIT binary patch literal 2630 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 JkyB{${{d?4OL+hQ literal 0 HcmV?d00001 diff --git a/front/dist/resources/customisation/character_hairs/character_hairs50.png b/front/dist/resources/customisation/character_hairs/character_hairs50.png new file mode 100644 index 0000000000000000000000000000000000000000..8617d48cd757fb0c77956d26520596c32da8d921 GIT binary patch literal 2946 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 literal 0 HcmV?d00001 diff --git a/front/dist/resources/customisation/character_hairs/character_hairs51.png b/front/dist/resources/customisation/character_hairs/character_hairs51.png new file mode 100644 index 0000000000000000000000000000000000000000..0b46dc79cac9f6300e65970768c5d7ffd75eec47 GIT binary patch literal 3066 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 E7sh5)kN^Mx literal 0 HcmV?d00001 diff --git a/front/dist/resources/customisation/character_hairs/character_hairs53.png b/front/dist/resources/customisation/character_hairs/character_hairs53.png new file mode 100644 index 0000000000000000000000000000000000000000..44acb342f04542034e23051da15490532a196bdb GIT binary patch literal 2659 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 literal 0 HcmV?d00001 diff --git a/front/dist/resources/customisation/character_hairs/character_hairs56.png b/front/dist/resources/customisation/character_hairs/character_hairs56.png new file mode 100644 index 0000000000000000000000000000000000000000..b294a6a61586cd635d2805f04c1a5192a053591b GIT binary patch literal 2771 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 NzNf1X^O7?w{r`lBI6D9U literal 0 HcmV?d00001 diff --git a/front/dist/resources/customisation/character_hairs/character_hairs58.png b/front/dist/resources/customisation/character_hairs/character_hairs58.png new file mode 100644 index 0000000000000000000000000000000000000000..830b6786b1b0701ef661a7d64a2177afd645f07c GIT binary patch literal 3155 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 literal 0 HcmV?d00001 diff --git a/front/dist/resources/customisation/character_hairs/character_hairs59.png b/front/dist/resources/customisation/character_hairs/character_hairs59.png new file mode 100644 index 0000000000000000000000000000000000000000..97b594775b6f2a2f5b6b2a8d0328932af6a930b1 GIT binary patch literal 2272 zcmZ9O3pmr?AIHBl*D)g`88(+n{jx|G#SF=iOXdHMfB2ygO(Z{;7z-sF{Ft z!EVPC)g)+^|EltE*W|0dxptdV7)hSlBrD-PxYh{XAiFeAe1}omYywH)`!=u|ok6$WMTQ zTlDeutWTHDyo0G0#U}x&CoGpWfnqI#ydNcmz;nyF!y_}C)1}P&l5_-r8ornoWP)$vMsnkBd=vG?xq;ViYKS?f9RU0%ga? zIhT*R8Ovi0>0~*Fsp!lCF>0OsLDh|?3y#?>H+m3GGrP~NhEaD7Febq%a<_&@>XZ>; zgyx#y+1JWaGf{FaxG8u*^lekErY8Cwx8vu!>XAHK-g{d0G&r}nae_rRMIMrR0*>;S zxsS~qQqlA#cZ`KvY?TKUe!7%}wtgtQcjrQt7ka}~qwA zn|d@aO!yIPXj8fUcknGk)HV(KoYltLAQw6K_I)=3`l_`)@**2mTXt8VH8vIpu^TR& z=9;Ev&Z*6S)0%w<=Vf!Vh(p*Eiw|LKc2gEzsU{8jK^@A{;erkP>OYdLzO9_rkJ~q- za72HpSoO&p;&vePBe1JX5ut4o4c_QHrR{09uJT04wh2#n$f(JbKV zs8q>T|J?^ASVaPNPl73Gp8)>=hW3Lr`_P-8K{cCer#n9hq5htz-lHyft;_CCY6NcV zD-wYJkyyX6ukCro&2y`#aR^!X(kqc6;#P~Wvc>dRh{n0Kp8mCQwa^opZY$sf^|Odr z9t?sp2l>66k1K(x$>yBJ2XbHzzX-)Itegi{UB(BF26{WPlLig@GN)dAw zc*wWiBld>BU!g`Hk8_oL-4hH2mDhMhMUS5q3B<$!$9QTjs##0~jcyG(SZw`tdf2o( zmTqlUw1Jo;3aO@PmcW#pw~;#PA{sr|W$$L>k6HJ>!oj*xq`2nx8EHInU&(b(*Wp zbe*Kv*E}O}wrpm#AoHCG+M`!E>9l+?EY;p}m@V zq1?pdzpgv4=c6svJ!5iQD;U&Gnls~ibQErX!6JWNXMPwf&G@E`YEiOP`hRl%N5m}| zR7Ji1qZcz0go4wxTC@e-A>F|p@gZKVm}6=LF9A~i=0HCyKB{{5{>#!W$`A$(FX9ti zJo=zW%v;0$0#f6wjD?tlWP4wPe<~LHLSGy30EvvJY<2UQ^v~QK3286Cb}tA*?C-*W zBvCS$Vorz>C$_|y*6L8WKu`*RZC%NK*s&idloQ<}?Ic#`n9l)T##GpgIZqYIzz7Vh zgHWWksimEJIu%cI$m6vyn=b=!hY?uJfp))W(&|D)s_n=QRUJYtdU08JQBU5Qr_03aq*nmzO~8d)3QH4y#$BeGG{aq*iq(TPFoL}J0=8DYIpR32OR@EQY zFDx{Ik=Hmr{b1PSbsZ0r8=-H!qoc)wT3k~teiryfibp(%W4@SY%zypCM=zH?u58j~Bw=LIM)DuW@}(?BrGc@)y1uK$95*5K zEGe*>@Zrs_7(s0p*k>6agzqNi{G8Dg80cKS4oJD0x96s_?;4V|Kz5y*(aMr~C7-{y dSB9HPIX^>>+RT*A$bK$>tFz~^8pojY{{S5zP;CGJ literal 0 HcmV?d00001 diff --git a/front/dist/resources/customisation/character_hairs/character_hairs6.png b/front/dist/resources/customisation/character_hairs/character_hairs6.png new file mode 100644 index 0000000000000000000000000000000000000000..638aefcb61c107b85cf94f6baabe3a0b710b7e19 GIT binary patch literal 2788 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 LdAU~Y3#9!I`zvZE literal 0 HcmV?d00001 diff --git a/front/dist/resources/customisation/character_hairs/character_hairs61.png b/front/dist/resources/customisation/character_hairs/character_hairs61.png new file mode 100644 index 0000000000000000000000000000000000000000..1ee93467949c5ae9b4d989a8f1b08f1173007797 GIT binary patch literal 3081 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 E0Q+IV)&Kwi literal 0 HcmV?d00001 diff --git a/front/dist/resources/customisation/character_hairs/character_hairs63.png b/front/dist/resources/customisation/character_hairs/character_hairs63.png new file mode 100644 index 0000000000000000000000000000000000000000..74f666b95a0b3dad55d79d1eabda2b4bd9ba86e2 GIT binary patch literal 3134 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 VzhRHV1q%KJfTNwOZMijx`d`6DzZ3uf literal 0 HcmV?d00001 diff --git a/front/dist/resources/customisation/character_hairs/character_hairs64.png b/front/dist/resources/customisation/character_hairs/character_hairs64.png new file mode 100644 index 0000000000000000000000000000000000000000..16bd4e3906fd23211b44a29660d9e0a1ba89349e GIT binary patch literal 3192 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 aI{+wW7^;Muq|X0Q0Gm?|R@D}yoBsw1faAje literal 0 HcmV?d00001 diff --git a/front/dist/resources/customisation/character_hairs/character_hairs65.png b/front/dist/resources/customisation/character_hairs/character_hairs65.png new file mode 100644 index 0000000000000000000000000000000000000000..907105fedb471f598f68856245b0381d2dfe1830 GIT binary patch literal 3107 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 literal 0 HcmV?d00001 diff --git a/front/dist/resources/customisation/character_hairs/character_hairs66.png b/front/dist/resources/customisation/character_hairs/character_hairs66.png new file mode 100644 index 0000000000000000000000000000000000000000..fda15aabd0336d61da89aed5b8bea994007cf069 GIT binary patch literal 3138 zcmV-I488M-P)m<0u+k;6)53SL|qR;Lta4JUrDg zhpSN(7d3z5KPX9wCSahU4FJHVTv&J5*JspikRx)~Pi^lxKqEMofNHnxeERVA`flVd z*DLt6`~u%kA8iJ*wR{$PsU^@2;Pd2SBe2`seR&l2U2{aQnVK1Av`? zyZdKRmL!|X1pxSd`Y^wr4o6t7SLT1Z59$%>1W5;gboSrfKbtPd>wvKc&^W*+Taq85 zg9c;RPaW`|7~vA|_e*!Mf=#(F5flO{`*b+=jHb~iZ9@W5=`fc4RtHQ;0GEvs#+yBU z=i5+MdVH)7W7#h{;1&qr-3mhi0L5~>>U@G@;PafXgPitTTfkHVpz-uL7Hvj`L;(Mt z$_)vET=w^-p_~AVZ~$-;(BO87fY@0H0Kn(3fAqHf|9}6DJ*_nWh#hMCIne%xr|UU_ zt^=r`u?V2DxbalJOBNnOkLP`MEL`?WGcy~k4nT#O@y2sD0&IeZ5Fqro1il#wXOm2NT9`hZ+|*!I!NRXJcv z0@_SERffa&(}&4ouG$6h6q$Hq+V35NkpL9#O2I$^mg^PZF+Q0Ln(-@*wK+Y5B$coeoDM6QG;JpF)Q*?RVA(Oicj5bxoCTLmA&sAFy1n z;PBV)@cr~57ElaXlFVhlw+otr03LbJriAS4vq=a4wER-Is#W+p^3Wg{+kR_-#?%Cm zX5Smcc*RO;2r2rb*{{itEVN=IZw;PIo{FFN2B2tXY| z)+1sG=d!UC`0SUUwck1hU{1@BWZV=`RO%Qk*DKRc+v>K4<|nyqy1RewoNtKz-YQ8A z=pdDo0NeSbLb?IKq_UuzvQYa~v!GBUCO|FERXEWGQ_{SfwhIy`3DS27&N5Yn@Q#4Q z1ZY}dgVBZi@~q~_F(D`jhS+bL1r_9>6Y%+~xKBfy7UsiKGI*8B25^e|txzODnaFYs zcC>7&akYfdBwZYMUA18C;}(qFRXY|*HO7dGj#qoE(@;#z1+WrOAgNO2iYxLi`JdLG zgHi3a)|Q1NY{~`f>vK~ni$+LlqO&gIbU4yh(zJ4*VpW>R71u%Rf~ws%q@co^13#oz ztJ-ZpQj-sCHXa zAlZF-(*<1S@361W4U-3WF{QmV9b!M%1HaP%qQB9uFiBnzKk>dkH$eKrp(KRJXXh+X zhcVW;kK?mrLBecrY`oyeIgpw`cXLf)M$tq-Wr?C8Nm=m)m#_WKJ@k^$s z=N@zB^z<9XTp=?t<`yt9W(Q1+Nei`qWjHUyZhZ_$SsyUlahdtXvR#97};Y6z@VFPoB*CD@7h<1-a}J)+IL9pLh9}>Gyq(|XLEp; zfPgeZeC+R_2vnweXAb}X{qwM+t0blGRM`=h_ za=ii|+0Jm8?rF}ge(bz-0mc)MG4U7bb3qb;#e`$lP5E;}_w~7>03GRR@ddQ~{ zS=B~9jwg6kN%csChRc&k!=6BMedKd|uM46%{ye`OnDKbwks5T)%m%K4?(_Eg-Ww-k zSA=y@N7Xes|fX~gB1d9ZKc`Sa^ph$JF{T_>)_6Mh@k4=E>sl9Zt)yR-C7BCWH zf*`g1JqP3<;NdB3imFNf;Gh|OA;@jN>Q+Py0Wq*0pK5!E9%I?>bigeTz>no*@VU6O zKgXq*!hh=_hyB5iuTMdM3lC4V_{8$i^GN&e>oYt&)xq5#|39VuJqO$x0n#~rkrvb9 za@*f?z{_K4eQtja0$lRBEGkbUb5kzh<*^)mRUB)-B!6&~WNhUKfcw_7^c?=s+ALnz zz#ZGoRtVEQh5Z1m1>mjN*tbwfRV~`?2fF}zAtdR;b)ws(<1jxzM29hW0O;QG=3P*; zDHo#{uLX8Nt{i<{8=&1cv6|-|Nzz zlfE#asn*wu_`CaOczG;4Z|blHq)$07*qoM6N<$g2?9Ql>h($ literal 0 HcmV?d00001 diff --git a/front/dist/resources/customisation/character_hairs/character_hairs67.png b/front/dist/resources/customisation/character_hairs/character_hairs67.png new file mode 100644 index 0000000000000000000000000000000000000000..77768cb40f901a3262ceffea1f25016660305f22 GIT binary patch literal 1939 zcmZ9Nc{JPU8pnT;NKo5IR4NEVm9~_ru@s4*mO-mZTbF8tmfq4JTD^?;HI`tM+^VLv zRI8Q_6U((%tu56NHkBTbeRRT%BM9s6Ey5BM zjz9?@a3-$B(ktJ$BQTl@vqEsMp*IR=@<@2vx}&NA$mvEcZMqyWZQZ*<$8l8T9@JkQ zq;iikJ)-Z!yq%3BI-jkb2(u;nnHFugU*x{53>@Dap;D$c7Bs8K+hweqP6fHGG4IF5e+@RM5@=8Ea z|ND@-HLRxtVi=x6>uDoFU!dEjHl}9YSTq=n?d6^h)qtKdL|(`ncpv5&CmYgVM#e^vaFD17*KN>7 zPc)GaTMH7fkn|MD`3WlkkiB#H+g=3D+~&r)*m!9+pd+eW2NKGiWRot#Mb|iLM)L z@jr=6gB)5~hwkDdJ%1#a$}+})q!3)L<~VAuXI54JQ~{kVPaDGy=_66)0xsCuCUd#%D^?)fiD6U z4Z`xlefl@267NJ#MQ(%3$&6E7Ebf|t)-}MH%?Mw&C*6mWSXb&Vc_oBqp6YtSwSmy! zD8PI4GQKI_b5~T6gH?XdAPveesZ3b9R9A;y36RoNj4&Clq~5TV^v(IgC<&j+1)zwbKA~zpQY^R{6xj;<>VVsuYxtc^LDb0Fd&Q& z?p6$G2rL*M4AC#~#ngrIR|)UpE@fD=Mpf<a+IvTSaUt6qKp5<1LHfXQKoGUNVcE@Pr(^kSKQBtC$s@7g!3B{)9u7Y8K;L^Fd^2+Qcb58n~2v;@9 z%rfZLYIo~IOY6brt(Ne$AKRKXNifW>Lb?{jRrp8jfJhB7B?kE1?}X1x4aRtRz*XpT z9ladCfd-4heNvD*F$MuK`3F>OaCP>o*oHOcDNFzMcn#2iJ}{Ef*3KS>?d{RmYqH-q?q49cexQl^h&)V zT(R_T41EVSkSPj{`A2NJZLE)^`%<5j5cK`eLE5)0%FdJM=S>~rcBGjaG=di$j2HW? zso2ZBQd~*De4WylJ&vW|rS&5(vq{Tn>e0Gho!lCu%#uIZ?=2#1mq)0>sFvunbl3v! MCr>$7I}&OC0`_N-{Qv*} literal 0 HcmV?d00001 diff --git a/front/dist/resources/customisation/character_hairs/character_hairs68.png b/front/dist/resources/customisation/character_hairs/character_hairs68.png new file mode 100644 index 0000000000000000000000000000000000000000..b7d248c615f79470efd026397e30371e1956f1e4 GIT binary patch literal 2237 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 literal 0 HcmV?d00001 diff --git a/front/dist/resources/customisation/character_hairs/character_hairs7.png b/front/dist/resources/customisation/character_hairs/character_hairs7.png new file mode 100644 index 0000000000000000000000000000000000000000..82359f605665b62a1931687592045498264aeb19 GIT binary patch literal 2845 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 AKL7v# literal 0 HcmV?d00001 diff --git a/front/dist/resources/customisation/character_hairs/character_hairs70.png b/front/dist/resources/customisation/character_hairs/character_hairs70.png new file mode 100644 index 0000000000000000000000000000000000000000..a5bdfb66769908f5cad00e659c7ffc60628bea63 GIT binary patch literal 1441 zcmb_ceQ4Zd7=LS>Et6?MtRFZRQiK)F<>QiE5_)UbyK8r_>$>YgHPH#@f$DNeTPoD}Oo+Ew4X_Uis9`$G&Q z@B2RQ^Lw7(^OZMRTbkFbetI|76G=B2+bpSO&L8$ zW@{-a9&TFlg-$^{M3)80 zICRWTTSfIq)s(;}clUQxP(*B`Ew+w|B4@*<+L?of8x03>bmP->O=47;S81pbDJVdK z;aQfDd4(oaUJ)6QWm7coFWFfMA7VM)&xYAZq>-cP2q!c(QjGy2A_hWDEYCKTuu;Qt zWkZD}-#YTWg!SJSD}`(*yQZBm&1|U)S~I3=IvLZ#LZM>SvGwh`p_zH7wosmuPGlKEpk;yJ1H7iFtiaJJ4PU}*_vCM}Pmu)0 zVU_4etPE8}ODP28c!8j4$PuC{u!P9*JVlAT;ujR0L=?$F>)g{yB@yb+!ghHu&|!JB zpn>MeMuSsZo_H33vcYJ0W5T<7YkVqtrs2t+sh#JlS49prPLmZ@GF>%Pwe{vR1MT+c zk?3aS{Lg3q*jKq~WMXpc1MX7iuJtcpu72Xr;l0_B=fC{+*K3EwnQ?q@;poNAitBYf z-fwf0{U=VHtldz5y5-|j>mGS){9ymu^w*=q^x*dsdw@;=rH`IV_g&sTM-CmE z{%MeAFWfvZ>b&~PjU7Msdhhk!`fOsf?5iDheN*!{yldYDKRLQ>=J@I6D1z>)xVTVV z_2~N@SI$LtzV>jY-#h2U2&%JL~3aK0Vxg5P&KG9smshRH76C p41fng&wmvDUv`Q#X2*s=IhYZz4?Gq(-bVjS5RJ5i`x|%f`v=Zr+UEcO literal 0 HcmV?d00001 diff --git a/front/dist/resources/customisation/character_hairs/character_hairs71.png b/front/dist/resources/customisation/character_hairs/character_hairs71.png new file mode 100644 index 0000000000000000000000000000000000000000..fb3e25a71612439b18c03a190ebc79c9f1714cb1 GIT binary patch literal 1434 zcmb_cTTC2P7(NOyh@v*tK#Ax$4M|aE=dv@iGb1AlyNhh%QUofP+R(Y2VMlf@%naRy zT7t$~O^mOtL}QKi#Y@6NW308r*v42w>m>pbY^qH}#MZ=Gu~k~n0*ieheK1ZkbI$qC z|NZ~>-)3)X%fn@*m8AfHvSf3-4Xr!TJ6v)T`u;wfIgFM~L82>YcZ?vbcn~z`jta4) zrS!lysOSTIpTjx;ik>w)x`M9MBa-G=AtkR9%2_T#15j6=a}})@2AB$aOk2i({b&rw zOkKu1xfGRhV=!$t4|=eDu%$yA?A1gauYU-u%Sp(91p@`kSsB}xax%VbS3>)|n8dMV zm7rI~S4efGTCtepL5vIWghtUU77;@<$4A6SEykcTNeLuF5tJx#VTod})dxr3Jl&Am z;!Uf*&`HMALEuUxnayTH*>K45dPrInMUrAjh9Qs!;Sbn>k|S(?bHPF!`kH6Df$7*- z-lC#9{eg@lrYj*>ZYs5A*!EWwg;GZ56qlq!6lq!cxR$m3pbh>@V_j{(W59)E8}yxi zPeb)EHW$Dsch`56S43>2t)7XBqGaNZ)^9;ONXBIx-Gp>gml#dqH5%%K0R>1fJj)Ua zuhN9Zt0E(^tU>ePf}Qp7v4ogtVjJm1qLHKN1Se1p5rJ)pHAEO*h{ePLHfj5TVr#JA z+eE%svD9_3Qp|%&;CLO5lPPpTYuX7MKkc|!EVf*AY)hwU>rU3M$(Ly*>NxbwT~KfG z91B~{vt+KrL05$cjId!sF|;tji7Z11v?36Egx6J#6*$_^@m0KjP5xH;6iHAVZh?-( zDo|5(LnR=`3j|F=ju170B}9(rDN5wku%O~3qDbaj=bBb3h){p#w`+re4r`+YZ8T3F z8l2Kh`fUJicsChu=*Z3dG9|ZsN>vPhFPzv^F};8K{`1GGD?TjFHh#Bn`aySZYbRZL zsU}(Z!>y+txbLl!qtipp+Z%UGJ@?zTbA69G4osWYLR@ zL(=SBi?7^%eE#eO@7&U#-0rgZ(|wQCPK+?U<4cRcyC-@$d->AzS6uCDhb~?jA5DBv ze)@@bMh>(uR7H1Bc8}d%K62Zc$%7|Pj9&eD=FO=mCm!E^=$k9!vUU0IuIGQ;u(WM3 zGk0|C<%yRTza4*lT&{{fb?ocPneMsIcFjM1(Kz0#k=5cK-DOqL#rA03@Bw9G`Imp) z`Nizq%t+@?M~s6-uU=qx7}ZB=7EX;`J#+79)yKs*ql^FyfMPHVz#RbG2%-R#{5RqM hWoLy({hnJWkou(f?Bt#|EcCMk$wW*1{l=Zo`~zyN(OUoj literal 0 HcmV?d00001 diff --git a/front/dist/resources/customisation/character_hairs/character_hairs72.png b/front/dist/resources/customisation/character_hairs/character_hairs72.png new file mode 100644 index 0000000000000000000000000000000000000000..b440321ce7e47236bc344b3a620f82f654938266 GIT binary patch literal 1544 zcmbVLYitx%6uuNSSVNR*Z41Os1|u3eJCB{6-5I*jebH`oOKEGm*0eH@yW2^-Gt11B zZp&*SsF6^JfyA^Ci;<8(Nzo{6tq}yJ6)_q@g9K?R7=c7cu~kwKtasZk@&k$SCNuZm zbI*6qcV2Iml@`y=oSO*%m>n$fm!o|p`jWFALI2;+H}s(`&kBUC3O!;qi3S87MVBBJ zjEPZL4n?JT)d^S#z|75RW!MUbUJ_(IW)o97wnQwB&;S%JO~ggH9$J_LqpIe{M?O1( zW2)lDs~jOJ6!*b8wWP&>6)mNea!b9;EBMkSSYbjy24c_>u|%vvGlhg3pR_BWb4pC& z*rbY8@5ZM{g+pbSPd6auuyKS;(JbcVZM1`P^3DQ`L3fgJkqkvpyx_146oXAK9CUV(*cLqW#_z{ld3q4 zEm4zU+P8{)Ph+_UVg;W8MN2m-b-f|o1!Z-*rJHqn9P{}mtByTirD}@aWWJCp(^S-c zXsD~9vdqw9*kqms^*$UF$>oGj)=r2K*-kikmLXiU=pr~Lr${pEa?lY4pT;ZqUeiB z(Bz)S#@wLaQ<*q-_1w`_n~Ffuig!MGZ2P`rTWbrjd80j9_3E9PfsWRlgW0>o;JAIm>0hdrY|H-siwk)RJ9De( z!+W^|AS}p7#g4lKt-9+e_L4)M4qT z9R1jv8}nb>Uey_xB%etY@ne++ttTZT{E zDs0QSdTCYEec-R$9TOw9*Gn!lPZgE?Mw1t1Blluv;@QnR296H3l6$zDH9fnZ-2C;1 zHA5XIC9bub+BPr@=gog@&F;|^4HLPmNAhbff0#3-hSwh~?&u7C@^aa?zMCH`dbh3f z6I;smRL#i%MF7kKUGb M7%263c~@@w8(t6$$N&HU literal 0 HcmV?d00001 diff --git a/front/dist/resources/customisation/character_hairs/character_hairs73.png b/front/dist/resources/customisation/character_hairs/character_hairs73.png new file mode 100644 index 0000000000000000000000000000000000000000..cc83cc4222ce3e5e404fd27fb025b197461f2c1e GIT binary patch literal 1554 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 QH1m(^?;XUs>J^#x7mP{UD*ylh literal 0 HcmV?d00001 diff --git a/front/dist/resources/customisation/character_hairs/character_hairs9.png b/front/dist/resources/customisation/character_hairs/character_hairs9.png new file mode 100644 index 0000000000000000000000000000000000000000..786aeee1a8ae3ce939b668a72091d563965b0213 GIT binary patch literal 2924 zcmaJ@2~bnl8oq%5QA7j7BXvob%s*{r+W6Zg7yd-cr-0 z008Lu`gnvu>t5)UAheJw0xAX*A0KZUZ)eLFMqzLi3I&73WAJ!1#DNwi^2D?RG*4u? zsKEmiF@$V^n9b)Q)f#DZeyrFL1$p{81g;=3@T+2;=nGH~WS9h+0E4r|Vz^v&T%Wi_ z;t=qEZu~8`C^S(3VnRR>KUTt}n1DWVZkPM>nBmx0VBhhha28m9=QwW4e9La7`&)>;=x_Q~Tld^P9=CFFCFpKzwK|HcO_nL?ps zq4)_nG6PL!5Xfi>8E1zE@gSX!CE+1dpcp>OGyj6$=Q@QbP#l6qcc=s!$e=SL>1dEh zBBOCQkcg%*$OJTnNFrge6cXKzOh;iL7cuJ6`AaD+lA!ujZ@)GMbokm@AP?#%A=Ef2 zPD!l*pp)wB;ToFI|1zSbV7=$E6V^StMaX&zsxO9U&{6ePn@wlS$#LF?54$5GBDmYlYS`3r#cQdw!fmKy z^!DZI@@`pvN@89EoUf|{jm@g$J=as-zP(Z3Ur^L$zRL)0O z&V_Tcn!S~4AT-wJfGNw9#$0z?%8aJEnWp_}qt(2^Md}e^kPsaJeG4|Q>?VT6iJvaUeWV*6S$6xe1~T8d zzz;An<$QPX&fRmqhV>oh(TFoUo_$FAB|WrbCamkUxIm333Kr~VF>ZR{H)*TB>IX&l zJj#$d&3#esYbaN(LA=SZc7zpVOCP*a#<*cdU?RI&8dq4MsUCmGIz8ZgEC zxfUS1&SDBSLb^Zn>~6I{7yh(Kt2D$u-ZCSQe68!TmV|0CXbMBDeH?z(X?@2?-X3e^ z8PB$R2e2D~V}&)DfniVi!!@;433+h&mZO_`n?wtVE9Z}z68CZB*Y7n2*F~hn7E22= z-qaS9HO~5X1^QU0>UZ_;P^URwlBZ7m$Z~;Bn>*^A1r^-0bCWa+qGIA$Lq`I{|-+D%mB3Cy7=OW@N@1 z(Tu0Np6TCO{oNXr?N6uVd8&V7Qk@j@&#r)XB`t{ZP6G~3b$X(%xPWm#lXLHWV zw$sG0>)z4rzlki5J_vI(R(Hy;;{h+fH^$$QrIhB}lDC`xfFR#J)tEW9Rik>3M))=7 zKj8sYWw){pO5gnW$~XF{c!^?qSzGj`f&dq{GH>@IjVrCD|IiWm^Pk(o<=LxKZoNW| zsMYR0utIMts84t)Zojq?YYMw+QVs4rlRF@o)IyF)9wEw8#`~5rJB1tGX_YQq)r{K+ z)a2gaMTG0DiGEKze-_9*gcusHxWA4X_!4a-DPrL#{ao%W3A?J*yRdBvCTgB9Vd+d6 zJW-V%tgqXi+`2&-lPZzDofwhX59{hQ_T}kBUez3g*?vyhkjmNwLoZHjw|)3FFEKZ< zJymBn$Ef4UD)i{gwi%Tn1r|*8*W~P)nN>*Se!%4Uy0ux_u@z2=?vyZ+&rqS^&G5rX zJ3}g3*Lhp+a4P-zn^!h}8WgodW07W$wvw1{^aMV-v|E;pM@eN?n}6y@u`{%lWGc+T zON4e|`Lb@;Yu#DJJchrbb9$}?(N>YN)jq9g>#paz1`*!J6|e&&8-u%7 zH{V*DwwW~Nz{hNq@J<;Xbu2kwQ(&dJ$teDhi@Zm(^Npgt$Mo*a#WY{~K7rB;PlN6> zCO>mLUGnVKwW?k%yqBHau;h3qGFEYJxzD4rTKL+hQK4n{2PbUAe#5deIUzbP1KWI1 s`<=%DlkaC5k^eu6KTT)GyX_JfV1?JItBOo%P~U%jJ%c>XyY1coU$9u_G5`Po literal 0 HcmV?d00001 diff --git a/front/dist/resources/customisation/character_hats/character_hats1.png b/front/dist/resources/customisation/character_hats/character_hats1.png new file mode 100644 index 0000000000000000000000000000000000000000..fc15513be4e28ac08e83ac276674d48daa82a9f7 GIT binary patch literal 293 zcmeAS@N?(olHy`uVBq!ia0vp^2|(Py!3HG1+{xJmq$EpRBT9nv(@M${i&7aJQ}UBi z6+Ckj(^G>|6H_V+Po~-c6&?3BLf4+VS@wvpDQx=g*aXI^eXRV1qv}R zFfu4GFt9K*Ffa%(FfcJVP$oz%a}dsuk78tFNJwM;Tf*93!vF-Hu6{1-oD!M>bDy)YU8Fk7)!o&nc9c)KEJ!sjnP6gI+Tfh8f^vX0VNiU|`5;?czW0K`gdMnY9US`a0fuQS9k z2ES@%AUbs%Ba4^9N-@evt!}N|M6R=^W~%H3Dv_EYl_0S;F$|z5Ed*lI7aGiBTO4B| zt{BRpZH$3Tm{ zur^yV$QLkPYHiLeF_KsYX{L%yD%cOrvMFa+yWdU}GK6TvX(ktOClU-@tPie)B}uu!Hq)BHb)rlrbk4)5Ata}LtTtkR(g2O`zC5MA@ zajqH_ksKw8b2xmy3X4USw!34o?Mtp-zBDS~jNU2j_MJO-E;*@vQ1XNCL{_ilN`BIgo+O3G zu`>8L2OI^d)H}UC-`FtyA>y_6G%N`;Hu(a9%k->(-IeRsJ67mcYr;1*-hAeZi*kY6HODb9$#6k5&QAA#g>!ctsQ<`L-y{S{K%GvFcEl zL+Cu6ToqX`dgQJ&s)ggSHnu(BzglB`yCgw#Hy91tL8HDH8?5|Gd;9g;2Wt%Un6W`{ zAPJ1td-~tH)Nwg|)8T^~e(IBo!cR}T;OIC(1-*gOW5ZQjo2DJu@#$Fma{BorrZD(r zL}tJT6e0mw1*K^K%z@utC`|`Iz0>bnR!{rsnC4aYe&=U?*O|`N-Jk5KJDHU8U30d> z)!^HGyYG6#@_d)u`MKX^jm~k?>Gn_09)H+;_4liiWZ#^X9j+`2u9oiW5tn&B{H7lr z!)h0`EbWZw@YhKYGgw4AR%ty8*qdl)BrP0pS8}Ur(Z2)3SHN+QQFEept&;b@^OwF0 z-h5=K07-+T%~S3~gQKe8)8Edve4{=+&S0tcZ#$O{q( z)F%0@3(NcRskAPzC+6PVe|rBkp5|MB^hrhKy`iRouu}mVGo^4pd8>ZrzF93_Eoo_W zUYj*^ENc6jn^*TAwRbN6o9@r|7VYvUcApPhUAp3=ySh)hxx{~)ef-@!2O_Jxt;+vi zd}2M)pE0L(;8yjC*i!Ab%8sr(8%J`JMXr^d5nA5_tY9>?MYXT|tFT8v25M}kJ$!|fFdDPUcWl8?EjS`DFgrj literal 0 HcmV?d00001 diff --git a/front/dist/resources/customisation/character_hats/character_hats11.png b/front/dist/resources/customisation/character_hats/character_hats11.png new file mode 100644 index 0000000000000000000000000000000000000000..4f9f83205793906f2396728f849621895dd059d4 GIT binary patch literal 1605 zcmaJ=eQXnD7{7Ll%;MsRA_~);H&KXO@2kD`&XsMn8*8uw#*!|C0oS|tw%T2Rv~F)jVTf6jUWYuv4|jsfPn@;O)%`j`nUCB zXi#!te!GwKMckk^Sk|P0c}?Y&VpB-uB&={cS`gzQfC3BwjVX0uosYS&VO$={Ni~6? z!zM<^g^iG^^36frss>QImBmGpvY`&nO4(Tl=a`1l@Jx_Sf+lg2DWOSJLStf)t7f`KrmFTQdR5HT`;FsHB`M;ji7G#aMjT%{$N;A8}zBkGL78Y z1GL~0AeCyWf)3}I4?ckd#fUO3QvkQqw20FVn*$e|lnn;~T9lnkz{biVmhzWIy^W8)q+h^XI%7hL^$sV?st*hTU$^jtl6FVnZze?02y%kSzcWG%hD zz3cxyF|%`h{G05m4NIfZp8Ec4*XsMD&0Pt}G}Styd3gAA+JJ@-}%zF>M$>bZD!=)joF=i|*qcaghO^Nwt8+uJ!WR6FEA zfkpRS*gWxzfx(|zUt<=w&-$+VtHjrdWtd~#*w6Yd>^asmzIZh7WAWnVy<;--^KuH1 zJEol(=qSMjHFr$j!^^Ks%R}?lbhHj4YDtRUV=yV&Nf3yaWO@r3C3v6)>V9Q}!K1hK z-8L>i=(~6N_xj5jhsJo69W~MBE!+1*^}l+LU5DlDvvBt(9J#eH=kdHeiW~X-zj2F^ WVsXFu2F@Hs;PRG~dp68iyzGAnRxtkn literal 0 HcmV?d00001 diff --git a/front/dist/resources/customisation/character_hats/character_hats12.png b/front/dist/resources/customisation/character_hats/character_hats12.png new file mode 100644 index 0000000000000000000000000000000000000000..e2636a7f64d572b046b3280420f81dd8793e1879 GIT binary patch literal 2072 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 literal 0 HcmV?d00001 diff --git a/front/dist/resources/customisation/character_hats/character_hats15.png b/front/dist/resources/customisation/character_hats/character_hats15.png new file mode 100644 index 0000000000000000000000000000000000000000..3e1a635efffdbb2e27de505044714e43a24a9ca7 GIT binary patch literal 539 zcmeAS@N?(olHy`uVBq!ia0vp^2|(Py!VDzYJ{5KXDVB6cUq=Rpjs4tz5?O(Kg=CK) zUj~LMHK4i{28LfC^)DD0N(~qoUL`OvSj}Ky5HFasE6@fgAsXNl;tHhei}H?an||lw zp7$?q|Nr#`C~|o7|35&Au_VYZn8D%MjWiG^$=lt9p@UV{1IXbl@Q5sCVBi)4Va7{$ z>wwA`!#rIaLn02poqn;m*+9VMEgw%vLJZ>!z8kL}yx2cgg75j8o2=eHcX%(E%kP~g zx7fwQIx0D(bguDsrUl#=ckgCk*yXV08viQ>hMWcKb!~U>I4p?IxVu<9HknuUdVPIs}~zi1blaLk(fK;4b^+y4eIIlpUOB=059C_S(C z!BGa5sB*rZ!;uPqk8*QVREu?pGD}QY_BB#rr~Co;g!DSDBQZZ2=7cC7ydD;~GVTKN YM7b}_O#ee30fU{v)78&qol`;+05~Pp-T(jq literal 0 HcmV?d00001 diff --git a/front/dist/resources/customisation/character_hats/character_hats16.png b/front/dist/resources/customisation/character_hats/character_hats16.png new file mode 100644 index 0000000000000000000000000000000000000000..d7dd765466d02b3cb1ebaeb65f8ce125bddf0737 GIT binary patch literal 814 zcmV+}1JV46P)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw0000O zP)t-s0001uFaX750RNQ$;d}u9vjAQn00000S*08@00001bW%=J06^y0W&i*H0b)x> zL;#2d9Y_EG010qNS#tmY3labT3lag+-G2N400L%7L_t(o!|j-{ZsRZzM5X3xixAS2 z65L;?xHn1g2ZHN;j=}%`gsddWvSycY85i0j$a-D|ZZbo%s>Eq%4%H6>Kx6b@qYq^R z0BBXN*?zDw0HE%>K{vhab-@4uhWWa&mpT<4fAQ}ijNME$4TM!L6(8iRk zJ*5dh7=PlxOh|{Q$t#FY%uL0CWbVU{8;IfI0(G@27ZoxerihfO?zaeV{;9 zk^uwi6sbEXd_(RB&>2v_g*mO4egK^T)s>Qc+H*gkjzIP27Dq>Iw5&6rqGYGhMI8Ya z@2Kznu+J;a%k@J({<~-Q2M70uVL1b$0RZdq-|3RU23U{(gBA@CSdag+CF%@#IR4Ll z0Xhe|d%U}gpmQMK7or{FMbJ6W`)N;K;V2n!prsg{j{h;=AGSIJ>UK_R+W$*B1E%Bu zl-9A4bOz9O823nha1nI`sQPt3I))_c45*YI!OZ8p&$19!#=+}-|U9YUP|XqiU0rr07*qoM6N<$g4+gSivR!s literal 0 HcmV?d00001 diff --git a/front/dist/resources/customisation/character_hats/character_hats17.png b/front/dist/resources/customisation/character_hats/character_hats17.png new file mode 100644 index 0000000000000000000000000000000000000000..7adc46bda6f7c5bdc923717fddbc1003458c5abd GIT binary patch literal 608 zcmeAS@N?(olHy`uVBq!ia0vp^2|(Py!VDzYJ{5KXDVB6cUq=Rpjs4tz5?O(Kg=CK) zUj~LMHK4i{28LfC^)DD0N(~qoUL`OvSj}Ky5HFasE6@fgAsyfo;tHg-v~+B2YWI%mzA4HQ@T6D0|x7)yfuf*Bm1-ADs*lDyqr7&=&GJ%Aj}0*}aI1_o{+ z5N5n|x9$&6!BkHd$B>A_Z)f=C9WoGUc`U86uByReQFVcZ~fyT?clKL+Bx>nv>Gmr z3`{}a4=2~`o>w}P%fVsW`@^|1#~)@b+umu%=#p%= z>}E;nDfI^XqZNHe+!qL3sts7>^_xYb<+s)m!CID%Yc*osTh}g|zhu=vo*z~9+f3OM z9#pHwai}mbhQFV?%Gi#zCi*#(K*!g8t1mG!9H|Q5o1M+$pm1fkRMlR8Rt14qf9+~~ zOMC4Yo%Y_Z|I^B3$C$MDcd?2c)5d%JrMJ`@)|ZD)m6T^(WIF$7Qm&R__&<9Eg|9__ z)fpK&mbLC@mtbfJ=$*O#ze)o`*3N&6`x`2FizEIUGBiwooVoGeWCjM8;ypFzuh$DP zH0ZuQZD0pvH8kwy@0snpLvNZL(?gNRmW%uus^7o<`OCkC^{X=kfpm literal 0 HcmV?d00001 diff --git a/front/dist/resources/customisation/character_hats/character_hats18.png b/front/dist/resources/customisation/character_hats/character_hats18.png new file mode 100644 index 0000000000000000000000000000000000000000..5cec2c16c9c94f177271f5a591bee65bbaff8bf7 GIT binary patch literal 445 zcmeAS@N?(olHy`uVBq!ia0vp^2|(Py!VDzYJ{5KXDVB6cUq=Rpjs4tz5?O(Kg=CK) zUj~LMHK4i{28LfC^)DD0N(~qoUL`OvSj}Ky5HFasE6@fgAsXNl;tHf&Tiaj1e!Fqw z=KufypFDXQC=zy>OAkmfmIV0)GdMiEkp|)%y{W; z-5;Rf4^J1zkch)?rw8UW8wj}UHQ%sM=70lV!hMGO3KNU|uim1vbj9XxyQY4cUMVkj z&4%}owqn6Lw;SRg*Ku-edNVyaM{I$@(_dTfY)fP0O00XcIRA-;hv)Cm6VaO=OjmgL z$!D3wDpn01)mrwQKcX199@pHds<6>{<~8B>#`){E#&Dhww)c;Fs&VD`t=YDUPu_C= z7g4F+&Cr_pwTzMLa+0`)t6-7SCM#AjL0jUCZaCvFE2QI4Ak}-I86CRaz$O zzx=n(CDCIplZc((y)#n{4#^dZIC-Y^HLdBMsqI)~Qmp!?=GgWkkt>=>_vQ-!XXa3B f5pX);{gdU;9p(KKmTfKrh5>`8tDnm{r-UW|n)$7_ literal 0 HcmV?d00001 diff --git a/front/dist/resources/customisation/character_hats/character_hats19.png b/front/dist/resources/customisation/character_hats/character_hats19.png new file mode 100644 index 0000000000000000000000000000000000000000..794dbbdcd78584aaf0c31e08018a6a33e047722a GIT binary patch literal 445 zcmeAS@N?(olHy`uVBq!ia0vp^2|(Py!VDzYJ{5KXDVB6cUq=Rpjs4tz5?O(Kg=CK) zUj~LMHK4i{28LfC^)DD0N(~qoUL`OvSj}Ky5HFasE6@fgAsXNl;tHe<4GoKmio(Le zIy*a4Qc{2-=9Xb1K#H*>$S;_|;n|He5GTpo-G!lpRn`N@;VkfoEM{Qf76M_$OLy!3 z00n<|x;TbJ9DX}JFt6D_z-6!bhJ`W*9QYFMGu&60SoDAO7L}zdHha5dXN2lVj7H>B%`_3lyII+InYO8Y5R?-J8YvPc%F{e}|rk-uz&?!oyEK z%OqB@YVfGmvhVy6#mM!z=1x_Gjm|T#3BNbaU$-@e^L((qf80}zE5~omwpD!cmh-=e zO7(7r*37SEj9izK#5Ej0JzE>YnHRHo=Hdq_erfAkJ}-?uKXt)5$ e(+TgNEQjtW@1L-2a~UuU7(8A5T-G@yGywn+cc&)+ literal 0 HcmV?d00001 diff --git a/front/dist/resources/customisation/character_hats/character_hats2.png b/front/dist/resources/customisation/character_hats/character_hats2.png new file mode 100644 index 0000000000000000000000000000000000000000..cfc00e20aea9a5603dd4cb862a007b7ae9651226 GIT binary patch literal 2509 zcmaJ@3sh3s8a{yes!TJ>EbWMCxe_=aC{T(8_$U=qE3_;Tj!McSKtY{?N-cZ&D(~%9 zqo$3OliFlCYK>N7<;+@*G?`{rPFk6kkFF+}L-%0O%w4NBd#!W!zxVl{-~atFHhlpg*n}#P+yu4}N9v}%h6Cf&q1mPeWo#IJ{NZ{v% zMWV?B@$_((|L0i9$p@RLP)O+nf>No(D?RZNSptDbqtOTui9jOZ5DlC>O|0OlaALWO z(E|&X^JPM*LMRb~29LZrNs7V;i)8w#1d%i(dGU#`02dEaVI0YeOvdrN;)poDR~(H*Ba`EaUYdg)kLV5I$Z>oKfd-~}dI_+f?FE0s?-Ngv8>9}YF&(-fp6mtF$niLsgm@zo zVG54w&GW?3ym{Vn5D%io#S^gvBt?ROI)9^*@e1LmLHsfp$l=Rq!D3{dWXRymEOyQU zfEiDNSgRvdU9V$8#E}8kPPvmN>#Z~i`7^CMT{7}#0uOWj7dt2PnBR%x+?er0P0P2L zGiz#Sem~pIqV%7b_h#bv$JLFMrfS#2tFAm5JU?7HP~1^9pp<1~G@kAZqWYID@%@JE zKw08DC6@(rL)WHj>`-lu50f`eR@@mMA6GImI@e>=MHmkY>&K_(&^a8=@D@3;YF7K= zlFuGyJVX_lBtDKF-fQ;JcI4IX~}y*Vac8M@6!r_vsnz4D^k;TyURoOL0q>vCML#l zXd4zcnu}-JpnzHE7Y!SNHEtf4&Gw6li~Cygsa~do%MZ2sWzf9FnwNxISo_^ev_e7i zOpaPHWgl-(e5~4)HZ^#?s6K^SMR44e{>L0Ai?;lwSnV>b=$B<|R$ce9_4aiy-GM!u z&|~B1;757q7iD_1Kb@-{3DhVeJQne>eT8(B{#Hn-KEFWU8pN%J$8QGCL64EFMSVjp z{T80eZD$wgA8yFALyZHMj@udtiRl?QUI9fQ}aXncQaIO zAjNe{MM2pkm&vPUen@4ZcTfHBX4qSOVe3!nDg7@Vy%95JfiCau(V%K6(D3r!^?Wr! z>)x=fNk9L>{w?LE=~kMae1N6B{n3{*U>X~&VOm^#f-xxD>_2eyTm|Po&snX`**bIT z`U+GHiY*>Zclh8Vd8)5(3Jq91q%izfklu3+o5ynl)zK1l~@~MI(rdf$!%)R=@)@``(0| z8saXapf6LYo9!Ro3C`|0tD`C_mPXuc|A6r@|94?&?MSKoKhIYlDX3m(a(QGQ9|S6n zVXV8d#H`-b#(HM>H`$l!0Q1{x07dVJSb+U?g0b}~_s@49F0Ev;FT5-$((P5E^Ag;( z*@2S|N&6Jipgjdkqg&gHPrlxz7iz8VTdJw1XzLU@Iwe~7q^NyN`!-_u)Wx5dT(yM+ z0aJ~F?1Qr_-&D0;VXZSj8~9`UqHPTuffjjzlYZ>gf2%tlcb^m7UyAQ57iZRwGp8??6HT$R?S2L9D zl;_td`abVOu1$~Y%O*Sh_uh$PZq0jZZ~Zn2@Ojaej$hzxL(Tid+lh4uCq0a4ngN5D zLm18fG1Nd+^_x=~qD{}=nuyx|hqB(zS$mpOiVKl+{JLIPok~c40pyzW zb=8!+l`hj?4nU9Dp3&n)cQ02~FWi1}GmsgH7GPJGMN|*89r%|ubTsEs5OGE~*G(=2 zYHu)pv@2~qu+{&$N9(Pl6~4!;T%Ui}Ni-!VY(BkAue}DYLqFSB;(9Yc=$1m5a<=mm zD)Fw6ugx`<$}X7Or{~=07MDLb;rTkMhjaJH6%d5CeCvSTJ|N0s41Pq- uH&LZilXn-tdgWA{`8AeJ)x2eEP{6_8-rwUk4x1T%u!7j3tg1D!d;SNG4)byV literal 0 HcmV?d00001 diff --git a/front/dist/resources/customisation/character_hats/character_hats20.png b/front/dist/resources/customisation/character_hats/character_hats20.png new file mode 100644 index 0000000000000000000000000000000000000000..0d77a1c80344152e755dc3c1ced7a1db64f6004e GIT binary patch literal 445 zcmeAS@N?(olHy`uVBq!ia0vp^2|(Py!VDzYJ{5KXDVB6cUq=Rpjs4tz5?O(Kg=CK) zUj~LMHK4i{28LfC^)DD0N(~qoUL`OvSj}Ky5HFasE6@fgAsXNl;tHhmIe4Dwxo(kG z|L>K0PT2$~l3p169Y`^j1o;IsI6S+N2I3@nySp%Su*!M>Ih+L^k;M!Q+(IDCc!2)OJu->^{TfCFE`eTMrA6N~<@-lDQ}#pZ9jrhb}UDKB=- zhWC)RV!=AM8{!|=adK>WGd(#+Y=OelUt8~NOJn3ptb4OK|A~f&=kL%H(VHJkS9tiz zXPLw*Rt+B2TK1hkq8Paz*W9V9u+e$uHR1Qh`RlgEaGnpg_m6w3apm}}*|v&L-g5pI zQK{a|(3<(RjFIbdlDLNBr)O(pIP+o_&s_W<#V>7L%jc!B=cg_>C;9o^l3kNkS|;qj z{I|{}(PJ)?h@IZOGgA!?$rXz@d8YL>t?8br?O0?|tooyP=Y$!x zPZDL=ZtL(lJb11JB6zA8n6r~F$}(@ZlfG+cAiqALn(NIr_Pd4~{ynMY+H>Rde%=3Z zF8?Bb8+{P`!@%~JqmH3@-)Cmc4;!1_YHoNtqvZI3KZVPyx&CnNTCT9y_}x?gsrH&m d5b&wlTuVV{neSIFPM|XxJYD@<);T3K0RVm*dno__ literal 0 HcmV?d00001 diff --git a/front/dist/resources/customisation/character_hats/character_hats22.png b/front/dist/resources/customisation/character_hats/character_hats22.png new file mode 100644 index 0000000000000000000000000000000000000000..ef054b229e5ec0ca598a7e33aae09ae7bdda4a13 GIT binary patch literal 352 zcmeAS@N?(olHy`uVBq!ia0vp^2|(Py!VDzYJ{5KXDVB6cUq=Rpjs4tz5?O(Kg=CK) zUj~LMHK4i{28LfC^)DD0N(~qoUL`OvSj}Ky5HFasE6@fgAsXNl;tHe<4GqJ>!itKD zQc_YnJ3*$3NvGQaDaMi@zhDN3XE)M7oFs2|7lsa2Sq~tGv%n*=n1O*?2!t6g-L3lr z6rAnp;usQf`0d4myiA5XE`ht5(><9rL{lz`HIzwryx1@PF4<7*(TP2;Ykp3cQTrrO zhV8ZvpTmRaS|Ea_ih(&h`JycIW;^M-h6eKM6RNr1Y-7J`xZ&TEYOXyuPVd+KALsHf z^0(0k!9NUae>v(Hn)iKX*8H%s>8<95w=+tPANW(ayqfC|*RJIXdyU^c^`C05sRRL^ an$5KogqHb!<>CZ7lfl!~&t;ucLK6V*aC9R8 literal 0 HcmV?d00001 diff --git a/front/dist/resources/customisation/character_hats/character_hats23.png b/front/dist/resources/customisation/character_hats/character_hats23.png new file mode 100644 index 0000000000000000000000000000000000000000..a06ce23b8cf316d15dfd588d3bfde7576222ded5 GIT binary patch literal 352 zcmeAS@N?(olHy`uVBq!ia0vp^2|(Py!VDzYJ{5KXDVB6cUq=Rpjs4tz5?O(Kg=CK) zUj~LMHK4i{28LfC^)DD0N(~qoUL`OvSj}Ky5HFasE6@fgAsXNl;tHhmIe4~6t3T6o zJ*RB)-zya;!mc#oC6Hn)3GxeOaCmkj4a7pQ+Swl4CqF6(jbjOSR;_s3T#U7p5^Sb8egc-F@ z5@pzK>+m@|c&-H^c&Zqfvy(5%GH&-UyyM`P7J*no}bK~@W-T!ee z{~~`IeGvS^!1kA;j-h$qXJ*Y08=Ky0Zg@MROAkmfmIV0)GdMiEkp|)%y{W; z-5;Rf98VX=kch)?r)?BGY`}Bm1h0m*+<`Kq2BRjkfQf&@J>S;LSH6><%O}9SapFzc zvs?-vj6X3-{Fw2Rf#;TCaDQXJ+|dT_2XBREE>DoWYvg~h>d8E&|E{kz7pz^N|2^tm zEQex?fK!LHjU1b|K3l?vL+{NhxWX(JA760szl@&4gZIW?MShg~+p=yudnegpeaF5# i!8_eSS~wKvePG|wA^1Q;GkG1*oeZ9?elF{r5}E*i@Ou9M literal 0 HcmV?d00001 diff --git a/front/dist/resources/customisation/character_hats/character_hats25.png b/front/dist/resources/customisation/character_hats/character_hats25.png new file mode 100644 index 0000000000000000000000000000000000000000..fa55d53273267ff4dd14b3732b8caea3f507d5c0 GIT binary patch literal 353 zcmeAS@N?(olHy`uVBq!ia0vp^2|(Py!VDzYJ{5KXDVB6cUq=Rpjs4tz5?O(Kg=CK) zUj~LMHK4i{28LfC^)DD0N(~qoUL`OvSj}Ky5HFasE6@fgAsXNl;tHe<4GoKmio(Le zIy*a4Qc{2-=9Xb1K#H*>$S;_|;n|He5GTpo-G!lpRn`N@;VkfoEM{Qf76M_$OLy!3 z00rlGx;TbJ9DX}(qu^l!o+BrCHLT?hlo>S`HJJrW{2T81wqCySo%~!r0q%_xZ_1wK zQutu}iBaOmjGqiVw+w^(8~f#sHh4dHD?D>~g5+Hz|ASRe<}v+ueWkfz?E?MpQSV|o z6k7zGI;?Hv*u3@G5Dup*ZgY`;HF52O65m>wxZL@O1TaS?83{1OQS@bZ-Cv literal 0 HcmV?d00001 diff --git a/front/dist/resources/customisation/character_hats/character_hats26.png b/front/dist/resources/customisation/character_hats/character_hats26.png new file mode 100644 index 0000000000000000000000000000000000000000..6c805fd5b36ed487202d0fdbd125b51adba3d61e GIT binary patch literal 353 zcmeAS@N?(olHy`uVBq!ia0vp^2|(Py!VDzYJ{5KXDVB6cUq=Rpjs4tz5?O(Kg=CK) zUj~LMHK4i{28LfC^)DD0N(~qoUL`OvSj}Ky5HFasE6@fgAsXNl;tHhmIe4Dwxo(kG z|L>K0PT2$~l3p169Y`^j1o;IsI6S+N2I3@nySp%Su*!M>Ih+L^k;M!Q+(IDCcQ-`&U9Gka3Tf&D!@69T>!YmdaUvTlijGn`T_r_mEew6#$vTi$jC)r_r$G$tk hJKaHAI27l7VBgUp_&`H5c^%N544$rjF6*2UngDH$b*caW literal 0 HcmV?d00001 diff --git a/front/dist/resources/customisation/character_hats/character_hats3.png b/front/dist/resources/customisation/character_hats/character_hats3.png new file mode 100644 index 0000000000000000000000000000000000000000..f5858738fa63e19d87bb3441d2c9cf7b2b78db05 GIT binary patch literal 685 zcmV;e0#f~nP)Px#6;Mo6MF0Q*V7=5BOIId$i!`OdlhfiZ9wG|G7V-c9 z00DGTPE!Ct=GbNc00JpVL_t(o!|j+&j@vK{Mh*1@ij}>GGP)0`>E5>5eUPRX2r&0Q zLM8tsF-bcpP@q#l+zjaV=7ZzJqOGd>J7oaiPXyybB-jbyf{)g^q1g^#f(iC`wGOuf znBY5my`JsekO6C9s@pt3r*+ zgH$*tnwRR!<~5C7-;L+Ty0ox`p72Sw<+ zn&=HxE`{i*O($`7sB$U9;TV2(_AxKkTngchE|>g34=R@ewNM}PB9AJU0(m%`9^Vw_ zLNJ5@zI5sNU*|$d2CNot&bg5K!1^`kf(gf=*$WT?zr8rGUfsa2c&SolK79K5FxId$ zAGomB^8=<2Q|p%fCH4$ZwGjnEU TMf&U600000NkvXXu0mjfoDeeh literal 0 HcmV?d00001 diff --git a/front/dist/resources/customisation/character_hats/character_hats4.png b/front/dist/resources/customisation/character_hats/character_hats4.png new file mode 100644 index 0000000000000000000000000000000000000000..2503c96b83f7b8d16edf12a4e5cdaaa3215e736b GIT binary patch literal 1843 zcmaJ?2~ZPf6kd=bS^*KYgO0ir)MCpfyCKPDgFpg_m1+o{H*O;~{ zTCG~|>3CGzj)Mqj)l$5$VnK97I&GvVVihZjM+8w2M7!azc80n$yZ^qo@A%&L-kV(; zANPsx@NvT-2=a}cDNkU}W$f+n@n)ax4H+lcBZyHXG4p6GVmAb?vCP_J4LeY9I>9*n8^+whkf~H5=jU<&07+4Kbb%qFz>ts0x)@dR* z3x!HlX^a7Bx|!K#FfThUk;+b|2n{DH5}t0CumSXdAz`~d!(frvBRIWrCG5Lf&Evqm zCQNz+rw>$;G9Heh%>Wj1MF@pr0vIQ_m{5chcqq(gWgaT#@lgaNB*HKW%7^s#tU*}?(FbUva7=v0{ z60?kemjEoZ)l9Md&;}1Uv)sKqk=u|(Bbj5?u}vW}HwXs45El!CK!8v{Od+URKp`ZCqliFFp)55( z9469m`u#O;@z*z}tcI<_H~>eY(F#O>5NHv=XQN>l5F%on3_}Q<#MLN?5^62R;js{T z?$LQ`lm=Ane7axXECwsQSuJ2-_sPsI&X!Xl+u40o#L8uf_G=G!$(B3gN3W)DbK5@) zyXn`i-xoMH#qpPP-; z+_}9c^;>oxnR`xQns~0nnsKseEG|9RY1ud|?QYL2WaW1yM;@v24~&O9c0xx|Dv1hf zhO?9dUY1pPt$C&z^U`E(Q>#i_k~fFGik$PKU7ud+}m@g}wPQ_uzAz&pP}}qtv@+{HLSKFV)p9@$~SKLW`u3C*XgT_^V&8K=VJw zg>AkqbvgIPJ0DJp^uP66Xib5owQbvy>aI=%EZsAq@}?{3$;Q0)qN`ql>lg6k3plv7U`p$>CfBnOAvH~B zUaYG#sgJX*|MKr2yG#?B=O=f3H8W_%W6Wdt;+*G&ey{KSe4}D%Q=`GrKzaJrTs%~^ zTJ5YUGSRry<$_MXy3su;ZL33{)uRlEnxxJh7VHRxArA-S1$mBy*zp)t$lO@&IRes! W9tqwpHm!C4#$pw5^5W=apZ^0UrL~Iy literal 0 HcmV?d00001 diff --git a/front/dist/resources/customisation/character_hats/character_hats5.png b/front/dist/resources/customisation/character_hats/character_hats5.png new file mode 100644 index 0000000000000000000000000000000000000000..67ae54ba28c5366068f69d32f8b7e45f28d8e777 GIT binary patch literal 1510 zcmaJ=eM}o=7=OE|z#?I4;x^RfEJ|kL^*;J>y@Nu(rE>*jB;yY=x!%2n3fDWYS6b>A zbr4ZwvS>6$mu&jSWX1@(xskCcj6{heZZ5`s2$MvNbHPQiP6naqTcF4y@+Noh`#$gU zJip)b^>TIP6ZsnoHvj&^f?p1uGh#xI zEvRTsHvJ;0I)63hl2wSA4HjG=DHF!92Fh$%k2pf*Mk^ zkQ~M`9{GSA)ogmibTI@;@%xt@ha*dgLMbESyh2b0l8~fKTnpL}tp@%}V^!@)ZL0!_ z8W@qIs(|VdEXo?A+^r3iQABLGDm8?P!Z*8RAu7SJ=5yQh=*1w0M2;4Ci$FmU4?-)% zX^Y8(^OgXG3zh&&vnErJvKX^|RuzaYgiBCk9Ox$eMyUq^$x@QP7NA8QzGq49_4Kk_`kYJ%K0^nbuj+N?8%=&&+Xo zFwkXrv|t#`lZpoC(+6(u20(Yq=XTV_zyI~BzjDY9l24swD_%924!ZwJ5LJWuV}+mT zm?KXLKW#29!cXY-dAFC`cw_p}+*_`aRN;DG&e4rS?zGw81`1LiDi=Z94*T)1f1JHO z({^pInq!|Lez`o7z6y`@4ixj(_I3=HBu2lpq;UAVkN^f&2(gwAh#~8ichBc-+r*a^f1W$hJ0C6Evo&_lmuHT> zRzwWFWS)0a*^j5wsVSkS^Lk>g<6v_9+?n2D@$Q_#3*FtlyN~@*5Zp9L^gUeC*MLj= z$7ey6OZQ)-+u-f=;g5Ujxf6MpXOymwqIY)K0GC!ePIpCS`hFNKKRbHmkahk7%GZtb zbZURzH{#sH+sQqX56*ABh?^d2f4;kW0P;6KImsS4G~WNh`xAX-gWp#FUyQdQC)dhG fMsx7@+579k)7$Uk|L(|n6QJeuRJwbd_51z-_9y_0 literal 0 HcmV?d00001 diff --git a/front/dist/resources/customisation/character_hats/character_hats6.png b/front/dist/resources/customisation/character_hats/character_hats6.png new file mode 100644 index 0000000000000000000000000000000000000000..6d16feaf82112f9f9876ee407942d2619b215997 GIT binary patch literal 1728 zcmbVNeM}Q)7{69!O%1|yPH{MI#}YTk_3rw8g-U4)gK2>vB8qNY@7~%|+NWu5?{HNJNlHoA{hOG0(QxzzQw}6S7hGT^{I-Ac;wS55uknB5DV#dAAYkZ*IX* zo-<<0G&a)au>dEZR^|mu$})1;vb8MDVMzmELyPBYAnkGmkp;Y3~0{4}=MaGZ2eQ{v~EAX*i z-XrpY8x0{ccA-c#Vvy;03NDY$_6XSRnE&Tlm_n<-7P)|1Ot%^__(j3-oI%MlT9yJF z?f`m#E46Ah&S>ov&T8$nl2)r7lvWkSd6Iv!)dJ0w>J+8fLQyFivsIOvs#jUeX3|V+ zlGS0~bhl4r+$;#k=3(p!U)5864Hhq8M8TUQ2!-J($Z`sz;ByKd)M6RyI{L~o-pvUm zzE?wS8qeAaynHd>QoVu;9jmi}e*y=RrtLtfcHn^2s&JN71Kh5n)Nr;KwMtKN8ivwf z6aL&|^&6j4cmnhAgy|SKhgu8h5SmiY;uHlmxL(Joa9YRc>?A|db_azKkRlNpoySHg zd<5q+BtBXUs61LN;D-C;g^RQQ?v#E6k^Y=+P0sQEdaL@J?FTa2G*^`#G~I{*(xH8q zXKjgGKt)WS5ojfDAcdy+NbNka3j4^{DRoy`xA)L}#&+fURd;q=IdU$hGJ4~r1o>nX zkpz&*h%_3JnUMdZj6`1A$DO)%D)^YB~MXa%_YIgpLcGa4>ypLNNnB9Ei zcipjww(f<;?(f;KYQ>N}sabNfqoF9FaiD8ob<5dWWV?BBL_>9R)YKE#a*^vb>f4{^ zc3gtumg?f@hu5a`-jo-7$joaQkakZmX!?71QQ|jWoxOb^xr1=-VC&0e`2%;~pM3K$ zR~PJT5w<7wZ}i7hAa(!Ij|cOsN1mB>xB~mO5o>L_I+)RrNt`}CT33W4Ko67PG=ZzozSlt?SI1D_>WB((%Tw+L46(z>mpC#XH^7 z?*6v}u>}bWgh8=u_el5k&EO0a-Zk7BG!`6ZyLK-axJtJD)Vnx;Mv-2O;$m~7-c0#R sA(P}tBr*h!U3363AyQLSrX&J+ZtMIH>SDid4gFKnQ!=av%mo|&0hJ_d8UO$Q literal 0 HcmV?d00001 diff --git a/front/dist/resources/customisation/character_hats/character_hats7.png b/front/dist/resources/customisation/character_hats/character_hats7.png new file mode 100644 index 0000000000000000000000000000000000000000..1dc05927addc787aad5bfec567e74289939d8b36 GIT binary patch literal 1717 zcmbVN3rrJd96ufdG-KkXGtNEEGMumLU9ZopwouxFoq`B;q73DF_my^~z1lly!3T9S zZcco~J(y@9Qx}xsGl&kf#_5~}buJN9a0!VFBRIws<9xur0(CAkF4-k_-}nE%|L_0* z{a?AY8R@C9BVQYdAV{ofmLU_adGPheM8WUfwu0~AGF~ud3t601@X{WD=vdAIP?M9+ z2bq9oiIKkA0M({06gQd zy9GPvLW34*3s)#;M3CuF2u^oe+7rVremGGuWw?)a;}S7}JDtI}2DN!16Z}o%ncBR$ z*bVSZz;lHj2G+wG9|FVNJ>OAK5wcOw_1Ixi=mG=B6gq)RFc~x=cq3-*teRwK1tS40 zW(6vMkqVg%qZJkj#waWlNy%hZi9#B(^DMkESwhGuoxw;ZDIT@;B6{@C3%;4$)DwR+$1&GAjm16@y76K#r-Dv=pP1v=X`@D2r7h!XZUG*g8+O zQs@ZwXK?#uFre^cw15lFlLrpY^_}ljB1rfdlR;e1&OCEQtYmSyEDdMc6=1~x70k^ace`Hn^+xdPK5@z7y2GV8u^n== z<4hnz%U7OXm#b>-K6y2Znrmzg%nQt}4f`mka#X73YU`3iE5BS6QP$99EE;I*Iu+&K zEk|YT%L`+3uOQ;nQEdK$GZ*))T#GCln9vqegKHz5(dmm5Jsr7|U#VLDaKy#-c;}tk z{s$8cf4u(wi&v$-)Rg(97dGDO&5a93!eWp}6p8aANyxthe`KUEr5+z$b)hN8m3TCE z|K_X%-HlV@v#j@awV>Ipmm9don9avFEg6@QaC*=EqPq=q&4I4uh+8RTB@>Tt|2fK? zYxj2~>{@G|_jvEL*!^`ir`+#OI8m!i+CbFryN1*u9lsr__I>j0#ln`n&aq=Un-$vC zpC4VZrAj+v((cN}t$;HdRaZ@0s?qko6P|3Y=a`t@CtTk4kH^v`eY8<*N*uoJBXkcMU{0m6kJ^iUzIu(ztC-$Bt1Ck4KaD ox}rNH?oSQ>XLH4E#>1iz&VPH|7av@vf20GW4Wg8%>k literal 0 HcmV?d00001 diff --git a/front/dist/resources/customisation/character_hats/character_hats8.png b/front/dist/resources/customisation/character_hats/character_hats8.png new file mode 100644 index 0000000000000000000000000000000000000000..35e70ecfe03fa6c804d2a8306c8b7b417649a3a6 GIT binary patch literal 1975 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 o>N~ Date: Tue, 28 Jul 2020 11:35:30 +0200 Subject: [PATCH 070/313] Fixing merge issue --- front/src/Phaser/Entity/body_character.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/front/src/Phaser/Entity/body_character.ts b/front/src/Phaser/Entity/body_character.ts index f56de7c1..efa82c15 100644 --- a/front/src/Phaser/Entity/body_character.ts +++ b/front/src/Phaser/Entity/body_character.ts @@ -1,5 +1,3 @@ -import {Character} from "./character_animation"; - export interface BodyResourceDescriptionInterface { name: string, img: string From 6d0bccc0e1d1629cb7e91dbc72e4efc8beb4a9ef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20N=C3=A9grier?= Date: Tue, 28 Jul 2020 15:53:44 +0200 Subject: [PATCH 071/313] Making a nice "customize" button --- front/dist/resources/objects/customize.png | Bin 0 -> 771 bytes .../resources/objects/customize_selected.png | Bin 0 -> 2349 bytes front/src/Phaser/Game/GameManager.ts | 15 ++-- front/src/Phaser/Login/CustomizeScene.ts | 28 ++++---- front/src/Phaser/Login/LoginScene.ts | 6 +- .../src/Phaser/Login/SelectCharacterScene.ts | 67 +++++++++++++----- .../src/Phaser/Reconnecting/FourOFourScene.ts | 1 - front/src/index.ts | 2 +- 8 files changed, 79 insertions(+), 40 deletions(-) create mode 100644 front/dist/resources/objects/customize.png create mode 100644 front/dist/resources/objects/customize_selected.png diff --git a/front/dist/resources/objects/customize.png b/front/dist/resources/objects/customize.png new file mode 100644 index 0000000000000000000000000000000000000000..27cfe3106c63eff09efba962df7c4eace6218d55 GIT binary patch literal 771 zcmV+e1N{7nP)v0K?{f3p^8Gp6852 zh{8QdA?278;KPD@Vh~Zi5y-+H1Q?SN-vrqD0o8~xff*udI`qmJ+3Xm%>|_wN^?d{TszqBaJ0NKP5m36sQQSAU=U&wUhwjM3H8KLlC>vXbPZ# zLaSG@Ehzx(2k}X&#mR=hbDvAUmq<+sfcSP-0Ie##iQ@p(5P*_N0|T$|WPd#uGnJCm z2Gr@71bDq()ARW}kO}cS zwJC`JlxVzFNd&7^0Ilu8e{bLyx0)?O@y!ZEN(yA*<{3t*y>1FX z1L1w%3X= zmUbP})N&{r6zi#_St#D}sTd9`D@h+{uX?Tf_F3ob|NP(g{lngSopnyTI2}@u+bIVC zfP$?J-c39wi*Gm#Dt-Wdlr^q5FSAWJ`zuDKrMzj5#+dT=y3 zib1AD!XrhSOh|n=-XJYlR*yso+*<4wJmXjC<%hvi!?y}os7gH{~wtIS(mN# zwVnVkOUlCS#jGXxAK&-#Fp?-}YZ`?X?H&~vOp?%lcKytDA+tynA3T{# zilnb)Ff{ur`Wg9KrSEs8k>QWRAAqky3`(-7KP>Y44z78{TZogxpuQakoLqRm%p#J;dKKL9ACI4q}ZPEJ|0kPvR za#gPN*XER0^671#wlIfh%A2GGV|+xt^d*1w$D`DR`Rv2tt{vd;OKI*KB7#a~_l(dF z!q4$tK{H9Ser?l7hOlhg>m~0pfx(#Gxwk6s%z8{~K-7ib>CF~FLNsmxHu*XC$o@wk z4e$pS-|rk6UD5Ffuxol{mvnbobn#srrPXQGTW$oqf_{<+q=VZzDulLMO@}Ozm4bjQ z)3~Af*Oh|aCY2a1D?Oyz7tYY~=i!@V~(^Gp>|G6%ZvWj;tBrR5MT zPY=$Qm$=va+&ObA)pFca+qx=8dQS1lqw6sy^@4YVUnI0O~6L)fX-r@F>` z!-zhL2&JuurC>R?m)dNMJDqy%ip{&#d2u?Nr%V|Q^*1MG2bMBw*pq_PzR?DCnUU(9 zqf-76rZJRF7!|KG+s|xI9JW)9<>ExsuckFN-cfy_aCab#G9@}%^I3*$5_PhfwUnnC@Q)$rLa6M+Qs$0wGZOYAN zXGC~N*r{T98RF9^^Idj;NDjEtgs|cHp01qO%H~!o{gL{h`mFq<-dM2jj;k}ZjC}91 z9x3)oW136KFNo_f5BeQM?0&!T=D!{oMf@Wn+al|@j_>JMwNH$Utlq{1bx5w-(C#+E zu^v-l-&h1AS(^?un+d2(4MIo2!(e1PvuD+){?|#DHc6ewQ;5rNLcEf&N1Qcq+M#2b zbyt=HFXnIuyJ2+}Uql%QzzEjpMQ17wuTp(I@Jvv8U@klS5cp_bx;yedV z2XmP#@>YJpQ}5^J?%#gv1=zbU7cEp3iuz_-7R}otsKAlX4Ha9@(7~^^%cKb!onqAn ziYTqRSIX21xaA+N&T6~WcUBh$U}PIKx%_E%wOecfdb zfb+Z=@_2Jegutdc*Rt{65Lkm}J~_Eb^Jgl{g1*$>Q4WyQm*Ks<{ zZAEeR2Va3X6}JOzpIekRP%e<~yi4~E>}?q)4MK{V> z*AgkHt@YA)siR?A&zhVTD)aJ3c+NY>DkogF$3BGU&(7}auk}3IIP2;68{%R2qZFd6 zA8za@?1DdD7Q3kV=^8OAc}O{}LGG%WqGB(Ah$?h+E)Y4GhrRrSHOjG^>dw7juZ4e^S6c)ULd!HS7Z)JgK0_m4?PW zW$0h<=-SuGKahY&&Sg9uGA;71PB;dVk9!G1d5Fe~^-xWwGO+lJ*mG1QlpjCe@=s~b zuR=%uNsD>j?l#r%8|`7alPev^<>u^V>Vso?n6g-Yes;=gn2TyJ(VRmi$>tY6R&n@v z8kT5sD(iRuR)fCc^Qc_}?`en^a|S$5JJ>idfl4DtxAQjl%nb(+q%zwSTI7|zQG>7> eie|dtRnW!H;2R0U*&NB=gzZ5m{LKSLQ~v`9a@DB- literal 0 HcmV?d00001 diff --git a/front/src/Phaser/Game/GameManager.ts b/front/src/Phaser/Game/GameManager.ts index 04cb1bbe..f05857b4 100644 --- a/front/src/Phaser/Game/GameManager.ts +++ b/front/src/Phaser/Game/GameManager.ts @@ -14,11 +14,18 @@ export interface HasMovedEvent { export class GameManager { private playerName: string; - private characterUserSelected: string; + private characterLayers: string[]; - public storePlayerDetails(name: string, characterUserSelected : string): void { + public setPlayerName(name: string): void { this.playerName = name; - this.characterUserSelected = characterUserSelected; + } + + public setCharacterUserSelected(characterUserSelected : string): void { + this.characterLayers = [characterUserSelected]; + } + + public setCharacterLayers(layers: string[]) { + this.characterLayers = layers; } loadStartMap() : Promise { @@ -36,7 +43,7 @@ export class GameManager { } getCharacterSelected(): string { - return this.characterUserSelected; + return this.characterLayers[0]; } loadMap(mapUrl: string, scene: Phaser.Scenes.ScenePlugin, instance: string): string { diff --git a/front/src/Phaser/Login/CustomizeScene.ts b/front/src/Phaser/Login/CustomizeScene.ts index b28d11d7..fe59e205 100644 --- a/front/src/Phaser/Login/CustomizeScene.ts +++ b/front/src/Phaser/Login/CustomizeScene.ts @@ -5,6 +5,7 @@ import Rectangle = Phaser.GameObjects.Rectangle; import {LAYERS} from "../Entity/body_character"; import Sprite = Phaser.GameObjects.Sprite; import Container = Phaser.GameObjects.Container; +import {gameManager} from "../Game/GameManager"; export const CustomizeSceneName = "CustomizeScene"; @@ -15,10 +16,6 @@ enum CustomizeTextures{ arrowUp = "arrow_up", } -export interface CustomizeSceneInitDataInterface { - name: string -} - export class CustomizeScene extends Phaser.Scene { private textField: TextField; @@ -34,8 +31,6 @@ export class CustomizeScene extends Phaser.Scene { private logo: Image; - private loginName: String; - private selectedLayers: Array = [0]; private containersRow: Array> = new Array>(); private activeRow = 0; @@ -48,10 +43,6 @@ export class CustomizeScene extends Phaser.Scene { }); } - init({name}: CustomizeSceneInitDataInterface) { - this.loginName = name; - } - preload() { this.load.image(CustomizeTextures.arrowRight, "resources/objects/arrow_right.png"); this.load.image(CustomizeTextures.icon, "resources/logos/tcm_full.png"); @@ -111,6 +102,19 @@ export class CustomizeScene extends Phaser.Scene { this.moveLayers(); this.input.keyboard.on('keyup-ENTER', () => { + const layers: string[] = []; + let i = 0; + for (let layerItem of this.selectedLayers) { + console.log(i, layerItem, LAYERS); + if (layerItem !== undefined) { + layers.push(LAYERS[i][layerItem].name); + } + i++; + } + + console.log(layers); + gameManager.setCharacterLayers(layers); + return this.scene.start(EnableCameraSceneName); }); @@ -251,10 +255,8 @@ export class CustomizeScene extends Phaser.Scene { const children = this.getContainerChildren(i, j); this.containersRow[i][j].removeAll(true); this.containersRow[i][j].add(children); - } } - } private reposition() { @@ -280,4 +282,4 @@ export class CustomizeScene extends Phaser.Scene { this.arrowRight.x = this.game.renderer.width*0.9; this.arrowRight.y = this.game.renderer.height/2; } -} \ No newline at end of file +} diff --git a/front/src/Phaser/Login/LoginScene.ts b/front/src/Phaser/Login/LoginScene.ts index 5177659b..308ba3ae 100644 --- a/front/src/Phaser/Login/LoginScene.ts +++ b/front/src/Phaser/Login/LoginScene.ts @@ -6,7 +6,7 @@ import Image = Phaser.GameObjects.Image; import Rectangle = Phaser.GameObjects.Rectangle; import {PLAYER_RESOURCES, PlayerResourceDescriptionInterface} from "../Entity/Character"; import {cypressAsserter} from "../../Cypress/CypressAsserter"; -import {SelectCharacterSceneInitDataInterface, SelectCharacterSceneName} from "./SelectCharacterScene"; +import {SelectCharacterSceneName} from "./SelectCharacterScene"; //todo: put this constants in a dedicated file export const LoginSceneName = "LoginScene"; @@ -89,6 +89,8 @@ export class LoginScene extends Phaser.Scene { } private login(name: string): void { - this.scene.start(SelectCharacterSceneName, { name } as SelectCharacterSceneInitDataInterface); + gameManager.setPlayerName(name); + + this.scene.start(SelectCharacterSceneName); } } diff --git a/front/src/Phaser/Login/SelectCharacterScene.ts b/front/src/Phaser/Login/SelectCharacterScene.ts index ddfd5c3b..535529ee 100644 --- a/front/src/Phaser/Login/SelectCharacterScene.ts +++ b/front/src/Phaser/Login/SelectCharacterScene.ts @@ -1,23 +1,22 @@ import {gameManager} from "../Game/GameManager"; import {TextField} from "../Components/TextField"; -import {ClickButton} from "../Components/ClickButton"; import Image = Phaser.GameObjects.Image; import Rectangle = Phaser.GameObjects.Rectangle; import {PLAYER_RESOURCES, PlayerResourceDescriptionInterface} from "../Entity/Character"; import {GameSceneInitInterface} from "../Game/GameScene"; import {StartMapInterface} from "../../Connection"; import {EnableCameraSceneName} from "./EnableCameraScene"; +import {CustomizeSceneName} from "./CustomizeScene"; + //todo: put this constants in a dedicated file export const SelectCharacterSceneName = "SelectCharacterScene"; enum LoginTextures { playButton = "play_button", icon = "icon", - mainFont = "main_font" -} - -export interface SelectCharacterSceneInitDataInterface { - name: string + mainFont = "main_font", + customizeButton = "customize_button", + customizeButtonSelected = "customize_button_selected" } export class SelectCharacterScene extends Phaser.Scene { @@ -25,12 +24,13 @@ export class SelectCharacterScene extends Phaser.Scene { private textField: TextField; private pressReturnField: TextField; private logo: Image; - private loginName: string; + private customizeButton: Image; + private customizeButtonSelected: Image; private selectedRectangle: Rectangle; private selectedRectangleXPos = 0; // Number of the character selected in the rows private selectedRectangleYPos = 0; // Number of the character selected in the columns - private selectedPlayer: Phaser.Physics.Arcade.Sprite; + private selectedPlayer: Phaser.Physics.Arcade.Sprite|null; // null if we are selecting the "customize" option private players: Array = new Array(); constructor() { @@ -39,10 +39,6 @@ export class SelectCharacterScene extends Phaser.Scene { }); } - init({ name }: SelectCharacterSceneInitDataInterface) { - this.loginName = name; - } - preload() { this.load.image(LoginTextures.playButton, "resources/objects/play_button.png"); this.load.image(LoginTextures.icon, "resources/logos/tcm_full.png"); @@ -56,13 +52,15 @@ export class SelectCharacterScene extends Phaser.Scene { {frameWidth: 32, frameHeight: 32} ); }); + this.load.image(LoginTextures.customizeButton, 'resources/objects/customize.png'); + this.load.image(LoginTextures.customizeButtonSelected, 'resources/objects/customize_selected.png'); } create() { this.textField = new TextField(this, this.game.renderer.width / 2, 50, 'Select your character'); this.textField.setOrigin(0.5).setCenterAlign() - this.pressReturnField = new TextField(this, this.game.renderer.width / 2, 230, 'Press enter to start'); + this.pressReturnField = new TextField(this, this.game.renderer.width / 2, 256, 'Press enter to start'); this.pressReturnField.setOrigin(0.5).setCenterAlign() const rectangleXStart = this.game.renderer.width / 2 - (this.nbCharactersPerRow / 2) * 32 + 16; @@ -73,7 +71,7 @@ export class SelectCharacterScene extends Phaser.Scene { this.add.existing(this.logo); this.input.keyboard.on('keyup-ENTER', () => { - return this.login(this.loginName); + return this.nextScene(); }); this.input.keyboard.on('keydown-RIGHT', () => { @@ -89,7 +87,7 @@ export class SelectCharacterScene extends Phaser.Scene { this.updateSelectedPlayer(); }); this.input.keyboard.on('keydown-DOWN', () => { - if (this.selectedRectangleYPos < Math.ceil(PLAYER_RESOURCES.length / this.nbCharactersPerRow) - 1) { + if (this.selectedRectangleYPos < Math.ceil(PLAYER_RESOURCES.length / this.nbCharactersPerRow)) { this.selectedRectangleYPos++; } this.updateSelectedPlayer(); @@ -117,10 +115,15 @@ export class SelectCharacterScene extends Phaser.Scene { this.pressReturnField.setVisible(!!(Math.floor(time / 500) % 2)); } - private login(name: string): void { - gameManager.storePlayerDetails(name, this.selectedPlayer.texture.key); + private nextScene(): void { - this.scene.start(EnableCameraSceneName); + if (this.selectedPlayer !== null) { + gameManager.setCharacterUserSelected(this.selectedPlayer.texture.key); + + this.scene.start(EnableCameraSceneName); + } else { + this.scene.start(CustomizeSceneName); + } // Do we have a start URL in the address bar? If so, let's redirect to this address /*const instanceAndMapUrl = this.findMapUrl(); @@ -188,6 +191,20 @@ export class SelectCharacterScene extends Phaser.Scene { }); this.players.push(player); } + + this.customizeButton = new Image(this, this.game.renderer.width / 2, 90 + 32 * 4 + 6, LoginTextures.customizeButton); + this.customizeButton.setOrigin(0.5, 0.5); + this.add.existing(this.customizeButton); + this.customizeButtonSelected = new Image(this, this.game.renderer.width / 2, 90 + 32 * 4 + 6, LoginTextures.customizeButtonSelected); + this.customizeButtonSelected.setOrigin(0.5, 0.5); + this.customizeButtonSelected.setVisible(false); + this.add.existing(this.customizeButtonSelected); + + this.customizeButton.setInteractive().on("pointerdown", () => { + this.selectedRectangleYPos = Math.ceil(PLAYER_RESOURCES.length / this.nbCharactersPerRow); + this.updateSelectedPlayer(); + }); + this.selectedPlayer = this.players[0]; this.selectedPlayer.play(PLAYER_RESOURCES[0].name); } @@ -203,10 +220,22 @@ export class SelectCharacterScene extends Phaser.Scene { } private updateSelectedPlayer(): void { - this.selectedPlayer.anims.pause(); + this.selectedPlayer?.anims.pause(); + // If we selected the customize button + if (this.selectedRectangleYPos === Math.ceil(PLAYER_RESOURCES.length / this.nbCharactersPerRow)) { + this.selectedPlayer = null; + this.selectedRectangle.setVisible(false); + this.customizeButtonSelected.setVisible(true); + this.customizeButton.setVisible(false); + return; + } + this.customizeButtonSelected.setVisible(false); + this.customizeButton.setVisible(true); const [x, y] = this.getCharacterPosition(this.selectedRectangleXPos, this.selectedRectangleYPos); + this.selectedRectangle.setVisible(true); this.selectedRectangle.setX(x); this.selectedRectangle.setY(y); + this.selectedRectangle.setSize(32, 32); const playerNumber = this.selectedRectangleXPos + this.selectedRectangleYPos * this.nbCharactersPerRow; const player = this.players[playerNumber]; player.play(PLAYER_RESOURCES[playerNumber].name); diff --git a/front/src/Phaser/Reconnecting/FourOFourScene.ts b/front/src/Phaser/Reconnecting/FourOFourScene.ts index 4fe4ff24..8c71ae65 100644 --- a/front/src/Phaser/Reconnecting/FourOFourScene.ts +++ b/front/src/Phaser/Reconnecting/FourOFourScene.ts @@ -1,7 +1,6 @@ import {TextField} from "../Components/TextField"; import Image = Phaser.GameObjects.Image; import Sprite = Phaser.GameObjects.Sprite; -import {SelectCharacterSceneInitDataInterface} from "../Login/SelectCharacterScene"; import Text = Phaser.GameObjects.Text; export const FourOFourSceneName = "FourOFourScene"; diff --git a/front/src/index.ts b/front/src/index.ts index a2ab575d..7634351f 100644 --- a/front/src/index.ts +++ b/front/src/index.ts @@ -15,7 +15,7 @@ const config: GameConfig = { width: window.innerWidth / RESOLUTION, height: window.innerHeight / RESOLUTION, parent: "game", - scene: [LoginScene, SelectCharacterScene, EnableCameraScene, ReconnectingScene, FourOFourScene], + scene: [LoginScene, SelectCharacterScene, EnableCameraScene, ReconnectingScene, FourOFourScene, CustomizeScene], zoom: RESOLUTION, physics: { default: "arcade", From 84529d6e995a00a0c73d99b657dcabeb165257e5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20N=C3=A9grier?= Date: Tue, 28 Jul 2020 17:43:33 +0200 Subject: [PATCH 072/313] Propagating customized sprites all over the game --- back/src/Controller/IoSocketController.ts | 6 +- back/src/Model/Websocket/ExSocketInterface.ts | 2 +- back/src/Model/Websocket/MessageUserJoined.ts | 2 +- .../Model/Websocket/MessageUserPosition.ts | 2 +- .../Websocket/SetPlayerDetailsMessage.ts | 2 +- front/src/Connection.ts | 10 +- front/src/Messages/SetPlayerDetailsMessage.ts | 2 +- front/src/Phaser/Entity/Character.ts | 124 +++++++++++------- front/src/Phaser/Entity/RemotePlayer.ts | 4 +- front/src/Phaser/Game/AddPlayerInterface.ts | 2 +- front/src/Phaser/Game/GameManager.ts | 4 +- front/src/Phaser/Game/GameScene.ts | 4 +- front/src/Phaser/Login/CustomizeScene.ts | 2 +- front/src/Phaser/Player/Player.ts | 6 +- 14 files changed, 99 insertions(+), 73 deletions(-) diff --git a/back/src/Controller/IoSocketController.ts b/back/src/Controller/IoSocketController.ts index edd29e7b..28dd2da2 100644 --- a/back/src/Controller/IoSocketController.ts +++ b/back/src/Controller/IoSocketController.ts @@ -177,7 +177,7 @@ export class IoSocketController { //add function to refresh position user in real time. //this.refreshUserPosition(Client); - const messageUserJoined = new MessageUserJoined(Client.userId, Client.name, Client.character, Client.position); + const messageUserJoined = new MessageUserJoined(Client.userId, Client.name, Client.characterLayers, Client.position); socket.to(roomId).emit(SockerIoEvent.JOIN_ROOM, messageUserJoined); @@ -188,7 +188,7 @@ export class IoSocketController { console.warn('Something went wrong. The World contains a user "'+user.id+"' but this user does not exist in the sockets list!"); return null; } - return new MessageUserPosition(user.id, player.name, player.character, player.position); + return new MessageUserPosition(user.id, player.name, player.characterLayers, player.position); }).filter((item: MessageUserPosition|null) => item !== null); answerFn(listOfUsers); } catch (e) { @@ -278,7 +278,7 @@ export class IoSocketController { } const Client = (socket as ExSocketInterface); Client.name = playerDetails.name; - Client.character = playerDetails.character; + Client.characterLayers = playerDetails.characterLayers; answerFn(Client.userId); }); }); diff --git a/back/src/Model/Websocket/ExSocketInterface.ts b/back/src/Model/Websocket/ExSocketInterface.ts index 5827ccc9..108c61cb 100644 --- a/back/src/Model/Websocket/ExSocketInterface.ts +++ b/back/src/Model/Websocket/ExSocketInterface.ts @@ -9,6 +9,6 @@ export interface ExSocketInterface extends Socket, Identificable { webRtcRoomId: string; userId: string; name: string; - character: string; + characterLayers: string[]; position: PointInterface; } diff --git a/back/src/Model/Websocket/MessageUserJoined.ts b/back/src/Model/Websocket/MessageUserJoined.ts index d3143a6b..9e993dd3 100644 --- a/back/src/Model/Websocket/MessageUserJoined.ts +++ b/back/src/Model/Websocket/MessageUserJoined.ts @@ -1,6 +1,6 @@ import {PointInterface} from "_Model/Websocket/PointInterface"; export class MessageUserJoined { - constructor(public userId: string, public name: string, public character: string, public position: PointInterface) { + constructor(public userId: string, public name: string, public characterLayers: string[], public position: PointInterface) { } } diff --git a/back/src/Model/Websocket/MessageUserPosition.ts b/back/src/Model/Websocket/MessageUserPosition.ts index ed604940..03fc6f09 100644 --- a/back/src/Model/Websocket/MessageUserPosition.ts +++ b/back/src/Model/Websocket/MessageUserPosition.ts @@ -6,6 +6,6 @@ export class Point implements PointInterface{ } export class MessageUserPosition { - constructor(public userId: string, public name: string, public character: string, public position: PointInterface) { + constructor(public userId: string, public name: string, public characterLayers: string[], public position: PointInterface) { } } diff --git a/back/src/Model/Websocket/SetPlayerDetailsMessage.ts b/back/src/Model/Websocket/SetPlayerDetailsMessage.ts index 21461812..1693f9a0 100644 --- a/back/src/Model/Websocket/SetPlayerDetailsMessage.ts +++ b/back/src/Model/Websocket/SetPlayerDetailsMessage.ts @@ -3,6 +3,6 @@ import * as tg from "generic-type-guard"; export const isSetPlayerDetailsMessage = new tg.IsInterface().withProperties({ name: tg.isString, - character: tg.isString + characterLayers: tg.isArray(tg.isString) }).get(); export type SetPlayerDetailsMessage = tg.GuardedType; diff --git a/front/src/Connection.ts b/front/src/Connection.ts index c4ac92c6..04715df6 100644 --- a/front/src/Connection.ts +++ b/front/src/Connection.ts @@ -44,7 +44,7 @@ export class Point implements PointInterface{ export interface MessageUserPositionInterface { userId: string; name: string; - character: string; + characterLayers: string[]; position: PointInterface; } @@ -56,7 +56,7 @@ export interface MessageUserMovedInterface { export interface MessageUserJoined { userId: string; name: string; - character: string; + characterLayers: string[]; position: PointInterface } @@ -109,7 +109,7 @@ export class Connection implements Connection { }) } - public static createConnection(name: string, characterSelected: string): Promise { + public static createConnection(name: string, characterLayersSelected: string[]): Promise { return Axios.post(`${API_URL}/login`, {name: name}) .then((res) => { @@ -123,7 +123,7 @@ export class Connection implements Connection { connection.socket.emit(EventMessage.SET_PLAYER_DETAILS, { name: name, - character: characterSelected + characterLayers: characterLayersSelected } as SetPlayerDetailsMessage, (id: string) => { connection.userId = id; }); @@ -135,7 +135,7 @@ export class Connection implements Connection { // Let's retry in 4-6 seconds return new Promise((resolve, reject) => { setTimeout(() => { - Connection.createConnection(name, characterSelected).then((connection) => resolve(connection)) + Connection.createConnection(name, characterLayersSelected).then((connection) => resolve(connection)) .catch((error) => reject(error)); }, 4000 + Math.floor(Math.random() * 2000) ); }); diff --git a/front/src/Messages/SetPlayerDetailsMessage.ts b/front/src/Messages/SetPlayerDetailsMessage.ts index 2f3cc707..789833ff 100644 --- a/front/src/Messages/SetPlayerDetailsMessage.ts +++ b/front/src/Messages/SetPlayerDetailsMessage.ts @@ -1,4 +1,4 @@ export interface SetPlayerDetailsMessage { name: string, - character: string + characterLayers: string[] } diff --git a/front/src/Phaser/Entity/Character.ts b/front/src/Phaser/Entity/Character.ts index 7453dc75..c3c4def4 100644 --- a/front/src/Phaser/Entity/Character.ts +++ b/front/src/Phaser/Entity/Character.ts @@ -1,6 +1,8 @@ import {PlayerAnimationNames} from "../Player/Animation"; import {SpeechBubble} from "./SpeechBubble"; import BitmapText = Phaser.GameObjects.BitmapText; +import Container = Phaser.GameObjects.Container; +import Sprite = Phaser.GameObjects.Sprite; export interface PlayerResourceDescriptionInterface { name: string, @@ -38,57 +40,62 @@ interface AnimationData { frameEnd: number; } -export abstract class Character extends Phaser.Physics.Arcade.Sprite { +export abstract class Character extends Container { private bubble: SpeechBubble|null = null; private readonly playerName: BitmapText; public PlayerValue: string; - public PlayerTexture: string; - + public sprites: Map; + private lastDirection: string = PlayerAnimationNames.WalkDown; constructor(scene: Phaser.Scene, x: number, y: number, - texture: string, + textures: string[], name: string, direction: string, moving: boolean, frame?: string | number ) { - super(scene, x, y, texture, frame); + super(scene, x, y/*, texture, frame*/); + + this.sprites = new Map(); + + for (const texture of textures) { + const sprite = new Sprite(scene, 0, 0, texture, frame); + this.getPlayerAnimations(texture).forEach(d => { + this.scene.anims.create({ + key: d.key, + frames: this.scene.anims.generateFrameNumbers(d.frameModel, {start: d.frameStart, end: d.frameEnd}), + frameRate: d.frameRate, + repeat: d.repeat + }); + }) + this.add(sprite); + this.scene.sys.updateList.add(sprite); + this.scene.sys.displayList.add(sprite); + this.sprites.set(texture, sprite); + } this.PlayerValue = name; - this.PlayerTexture = texture; this.playerName = new BitmapText(scene, x, y - 25, 'main_font', name, 8); this.playerName.setOrigin(0.5).setCenterAlign().setDepth(99999); scene.add.existing(this.playerName); - this.scene.sys.updateList.add(this); - this.scene.sys.displayList.add(this); - //this.setScale(2); + scene.add.existing(this); + this.scene.physics.world.enableBody(this); - this.setImmovable(true); - this.setCollideWorldBounds(true); - this.setSize(16, 16); //edit the hitbox to better match the character model - this.setOffset(8, 16); + this.getBody().setImmovable(true); + this.getBody().setCollideWorldBounds(true); + this.setSize(16, 16); + this.getBody().setSize(16, 16); //edit the hitbox to better match the character model + this.getBody().setOffset(0, 8); this.setDepth(-1); this.scene.events.on('postupdate', this.postupdate.bind(this)); - this.initAnimation(); this.playAnimation(direction, moving); } - private initAnimation(): void { - this.getPlayerAnimations(this.PlayerTexture).forEach(d => { - this.scene.anims.create({ - key: d.key, - frames: this.scene.anims.generateFrameNumbers(d.frameModel, {start: d.frameStart, end: d.frameEnd}), - frameRate: d.frameRate, - repeat: d.repeat - }); - }) - } - private getPlayerAnimations(name: string): AnimationData[] { return [{ key: `${name}-${PlayerAnimationNames.WalkDown}`, @@ -122,34 +129,53 @@ export abstract class Character extends Phaser.Physics.Arcade.Sprite { } protected playAnimation(direction : string, moving: boolean): void { - if (!this.anims) { - console.error('ANIMS IS NOT DEFINED!!!'); - return; - } - if (moving && (!this.anims.currentAnim || this.anims.currentAnim.key !== direction)) { - this.play(this.PlayerTexture+'-'+direction, true); - } else if (!moving) { - /*if (this.anims.currentAnim) { - this.anims.stop(); - }*/ - this.play(this.PlayerTexture+'-'+direction, true); - this.stop(); + for (const [texture, sprite] of this.sprites.entries()) { + if (!sprite.anims) { + console.error('ANIMS IS NOT DEFINED!!!'); + return; + } + if (moving && (!sprite.anims.currentAnim || sprite.anims.currentAnim.key !== direction)) { + sprite.play(texture+'-'+direction, true); + } else if (!moving) { + /*if (this.anims.currentAnim) { + this.anims.stop(); + }*/ + sprite.play(texture+'-'+direction, true); + sprite.anims.stop(); + } } } - move(x: number, y: number) { + protected getBody(): Phaser.Physics.Arcade.Body { + const body = this.body; + if (!(body instanceof Phaser.Physics.Arcade.Body)) { + throw new Error('Container does not have arcade body'); + } + return body; + } - this.setVelocity(x, y); + move(x: number, y: number) { + const body = this.getBody(); + + body.setVelocity(x, y); // up or down animations are prioritized over left and right - if (this.body.velocity.y < 0) { //moving up - this.play(`${this.PlayerTexture}-${PlayerAnimationNames.WalkUp}`, true); - } else if (this.body.velocity.y > 0) { //moving down - this.play(`${this.PlayerTexture}-${PlayerAnimationNames.WalkDown}`, true); - } else if (this.body.velocity.x > 0) { //moving right - this.play(`${this.PlayerTexture}-${PlayerAnimationNames.WalkRight}`, true); - } else if (this.body.velocity.x < 0) { //moving left - this.anims.playReverse(`${this.PlayerTexture}-${PlayerAnimationNames.WalkLeft}`, true); + if (body.velocity.y < 0) { //moving up + this.lastDirection = PlayerAnimationNames.WalkUp; + this.playAnimation(PlayerAnimationNames.WalkUp, true); + //this.play(`${this.PlayerTexture}-${PlayerAnimationNames.WalkUp}`, true); + } else if (body.velocity.y > 0) { //moving down + this.lastDirection = PlayerAnimationNames.WalkDown; + this.playAnimation(PlayerAnimationNames.WalkDown, true); + //this.play(`${this.PlayerTexture}-${PlayerAnimationNames.WalkDown}`, true); + } else if (body.velocity.x > 0) { //moving right + this.lastDirection = PlayerAnimationNames.WalkRight; + this.playAnimation(PlayerAnimationNames.WalkRight, true); + //this.play(`${this.PlayerTexture}-${PlayerAnimationNames.WalkRight}`, true); + } else if (body.velocity.x < 0) { //moving left + this.lastDirection = PlayerAnimationNames.WalkLeft; + this.playAnimation(PlayerAnimationNames.WalkLeft, true); + //this.anims.playReverse(`${this.PlayerTexture}-${PlayerAnimationNames.WalkLeft}`, true); } if (this.bubble) { @@ -166,8 +192,8 @@ export abstract class Character extends Phaser.Physics.Arcade.Sprite { } stop(){ - this.setVelocity(0, 0); - this.anims.stop(); + this.getBody().setVelocity(0, 0); + this.playAnimation(this.lastDirection, false); } say(text: string) { diff --git a/front/src/Phaser/Entity/RemotePlayer.ts b/front/src/Phaser/Entity/RemotePlayer.ts index 36911bb6..18785331 100644 --- a/front/src/Phaser/Entity/RemotePlayer.ts +++ b/front/src/Phaser/Entity/RemotePlayer.ts @@ -16,11 +16,11 @@ export class RemotePlayer extends Character { x: number, y: number, name: string, - PlayerTexture: string, + PlayerTextures: string[], direction: string, moving: boolean ) { - super(Scene, x, y, PlayerTexture, name, direction, moving, 1); + super(Scene, x, y, PlayerTextures, name, direction, moving, 1); //set data this.userId = userId; diff --git a/front/src/Phaser/Game/AddPlayerInterface.ts b/front/src/Phaser/Game/AddPlayerInterface.ts index 9570c765..a3f50de3 100644 --- a/front/src/Phaser/Game/AddPlayerInterface.ts +++ b/front/src/Phaser/Game/AddPlayerInterface.ts @@ -3,6 +3,6 @@ import {PointInterface} from "../../Connection"; export interface AddPlayerInterface { userId: string; name: string; - character: string; + characterLayers: string[]; position: PointInterface; } diff --git a/front/src/Phaser/Game/GameManager.ts b/front/src/Phaser/Game/GameManager.ts index f05857b4..3dcf3474 100644 --- a/front/src/Phaser/Game/GameManager.ts +++ b/front/src/Phaser/Game/GameManager.ts @@ -42,8 +42,8 @@ export class GameManager { return this.playerName; } - getCharacterSelected(): string { - return this.characterLayers[0]; + getCharacterSelected(): string[] { + return this.characterLayers; } loadMap(mapUrl: string, scene: Phaser.Scenes.ScenePlugin, instance: string): string { diff --git a/front/src/Phaser/Game/GameScene.ts b/front/src/Phaser/Game/GameScene.ts index a46672ee..8034bfbe 100644 --- a/front/src/Phaser/Game/GameScene.ts +++ b/front/src/Phaser/Game/GameScene.ts @@ -166,7 +166,7 @@ export class GameScene extends Phaser.Scene { connection.onUserJoins((message: MessageUserJoined) => { const userMessage: AddPlayerInterface = { userId: message.userId, - character: message.character, + characterLayers: message.characterLayers, name: message.name, position: message.position } @@ -704,7 +704,7 @@ export class GameScene extends Phaser.Scene { addPlayerData.position.x, addPlayerData.position.y, addPlayerData.name, - addPlayerData.character, + addPlayerData.characterLayers, addPlayerData.position.direction, addPlayerData.position.moving ); diff --git a/front/src/Phaser/Login/CustomizeScene.ts b/front/src/Phaser/Login/CustomizeScene.ts index fe59e205..7a1dd12e 100644 --- a/front/src/Phaser/Login/CustomizeScene.ts +++ b/front/src/Phaser/Login/CustomizeScene.ts @@ -104,7 +104,7 @@ export class CustomizeScene extends Phaser.Scene { this.input.keyboard.on('keyup-ENTER', () => { const layers: string[] = []; let i = 0; - for (let layerItem of this.selectedLayers) { + for (const layerItem of this.selectedLayers) { console.log(i, layerItem, LAYERS); if (layerItem !== undefined) { layers.push(LAYERS[i][layerItem].name); diff --git a/front/src/Phaser/Player/Player.ts b/front/src/Phaser/Player/Player.ts index f912d110..b9490c8d 100644 --- a/front/src/Phaser/Player/Player.ts +++ b/front/src/Phaser/Player/Player.ts @@ -21,17 +21,17 @@ export class Player extends Character implements CurrentGamerInterface { x: number, y: number, name: string, - PlayerTexture: string, + PlayerTextures: string[], direction: string, moving: boolean ) { - super(Scene, x, y, PlayerTexture, name, direction, moving, 1); + super(Scene, x, y, PlayerTextures, name, direction, moving, 1); //create input to move this.userInputManager = new UserInputManager(Scene); //the current player model should be push away by other players to prevent conflict - this.setImmovable(false); + this.getBody().setImmovable(false); } moveUser(delta: number): void { From dcbe8d35db6daee754d34e1cbcfc25b396ef2f6b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20N=C3=A9grier?= Date: Wed, 29 Jul 2020 11:35:59 +0200 Subject: [PATCH 073/313] Upgrading dependencies --- front/yarn.lock | 1593 ++++++++++++++++++++++++++++++----------------- 1 file changed, 1032 insertions(+), 561 deletions(-) diff --git a/front/yarn.lock b/front/yarn.lock index 05e9b368..f57cf0a6 100644 --- a/front/yarn.lock +++ b/front/yarn.lock @@ -3,26 +3,39 @@ "@babel/code-frame@^7.0.0": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.8.3.tgz#33e25903d7481181534e12ec0a25f16b6fcf419e" - integrity sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g== + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.10.4.tgz#168da1a36e90da68ae8d49c0f1b48c7c6249213a" + integrity sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg== dependencies: - "@babel/highlight" "^7.8.3" + "@babel/highlight" "^7.10.4" -"@babel/helper-validator-identifier@^7.9.0": - version "7.9.0" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.9.0.tgz#ad53562a7fc29b3b9a91bbf7d10397fd146346ed" - integrity sha512-6G8bQKjOh+of4PV/ThDm/rRqlU7+IGoJuofpagU5GlEl29Vv0RGqqt86ZGRV8ZuSOY3o+8yXl5y782SMcG7SHw== +"@babel/helper-validator-identifier@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz#a78c7a7251e01f616512d31b10adcf52ada5e0d2" + integrity sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw== -"@babel/highlight@^7.8.3": - version "7.9.0" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.9.0.tgz#4e9b45ccb82b79607271b2979ad82c7b68163079" - integrity sha512-lJZPilxX7Op3Nv/2cvFdnlepPXDxi29wxteT57Q965oc5R9v86ztx0jfxVrTcBk8C2kcPkkDa2Z4T3ZsPPVWsQ== +"@babel/highlight@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.10.4.tgz#7d1bdfd65753538fabe6c38596cdb76d9ac60143" + integrity sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA== dependencies: - "@babel/helper-validator-identifier" "^7.9.0" + "@babel/helper-validator-identifier" "^7.10.4" chalk "^2.0.0" js-tokens "^4.0.0" +"@mrmlnc/readdir-enhanced@^2.2.1": + version "2.2.1" + resolved "https://registry.yarnpkg.com/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz#524af240d1a360527b730475ecfa1344aa540dde" + integrity sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g== + dependencies: + call-me-maybe "^1.0.1" + glob-to-regexp "^0.3.0" + +"@nodelib/fs.stat@^1.1.2": + version "1.1.3" + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz#2b5a3ab3f918cca48a8c754c08168e3f03eba61b" + integrity sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw== + "@types/anymatch@*": version "1.3.1" resolved "https://registry.yarnpkg.com/@types/anymatch/-/anymatch-1.3.1.tgz#336badc1beecb9dacc38bea2cf32adf627a8421a" @@ -45,15 +58,11 @@ resolved "https://registry.yarnpkg.com/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#1ee30d79544ca84d68d4b3cdb0af4f205663dd2d" integrity sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag== -"@types/events@*": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@types/events/-/events-3.0.0.tgz#2862f3f58a9a7f7c3e78d79f130dd4d71c25c2a7" - "@types/glob@^7.1.1": - version "7.1.1" - resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.1.tgz#aa59a1c6e3fbc421e07ccd31a944c30eba521575" + version "7.1.3" + resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.3.tgz#e6ba80f36b7daad2c685acd9266382e68985c183" + integrity sha512-SEYeGAIQIQX8NN6LDKprLjbrd5dARM5EXsd8GI/A5l0apYI1fGMWgPHSe4ZKL4eozlAyI+doUE9XbYS4xCkQ1w== dependencies: - "@types/events" "*" "@types/minimatch" "*" "@types/node" "*" @@ -63,22 +72,24 @@ integrity sha512-iYCgjm1dGPRuo12+BStjd1HiVQqhlRhWDOQigNxn023HcjnhsiFz9pc6CzJj4HwDCSQca9bxTL4PxJDbkdm3PA== "@types/jasmine@^3.5.10": - version "3.5.10" - resolved "https://registry.yarnpkg.com/@types/jasmine/-/jasmine-3.5.10.tgz#a1a41012012b5da9d4b205ba9eba58f6cce2ab7b" - integrity sha512-3F8qpwBAiVc5+HPJeXJpbrl+XjawGmciN5LgiO7Gv1pl1RHtjoMNqZpqEksaPJW05ViKe8snYInRs6xB25Xdew== + version "3.5.11" + resolved "https://registry.yarnpkg.com/@types/jasmine/-/jasmine-3.5.11.tgz#ba8e80639dffbe277f49c708b45373a320d158e2" + integrity sha512-fg1rOd/DehQTIJTifGqGVY6q92lDgnLfs7C6t1ccSwQrMyoTGSoH6wWzhJDZb6ezhsdwAX4EIBLe8w5fXWmEng== -"@types/json-schema@^7.0.3": - version "7.0.4" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.4.tgz#38fd73ddfd9b55abb1e1b2ed578cb55bd7b7d339" - integrity sha512-8+KAKzEvSUdeo+kmqnKrqgeE+LcA0tjYWFY7RPProVYwnqDjukzO+3b6dLD56rYX5TdWejnEOLJYOIeh4CXKuA== +"@types/json-schema@^7.0.3", "@types/json-schema@^7.0.4": + version "7.0.5" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.5.tgz#dcce4430e64b443ba8945f0290fb564ad5bac6dd" + integrity sha512-7+2BITlgjgDhH0vvwZU/HZJVyk+2XUlvxXe8dFMedNX/aMkaOq++rMAFXc0tM7ij15QaWlbdQASBR9dihi+bDQ== "@types/minimatch@*": version "3.0.3" resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d" + integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA== "@types/node@*": - version "13.11.0" - resolved "https://registry.yarnpkg.com/@types/node/-/node-13.11.0.tgz#390ea202539c61c8fa6ba4428b57e05bc36dc47b" + version "14.0.27" + resolved "https://registry.yarnpkg.com/@types/node/-/node-14.0.27.tgz#a151873af5a5e851b51b3b065c9e63390a9e0eb1" + integrity sha512-kVrqXhbclHNHGu9ztnAwSncIgJv/FaxmzXJvGXNdcCpV1b8u1/Mi6z6m0vwy0LzKeXFTPLH0NzwmoJ3fNCIq0g== "@types/simple-peer@^9.6.0": version "9.6.0" @@ -88,9 +99,9 @@ "@types/node" "*" "@types/socket.io-client@^1.4.32": - version "1.4.32" - resolved "https://registry.yarnpkg.com/@types/socket.io-client/-/socket.io-client-1.4.32.tgz#988a65a0386c274b1c22a55377fab6a30789ac14" - integrity sha512-Vs55Kq8F+OWvy1RLA31rT+cAyemzgm0EWNeax6BWF8H7QiiOYMJIdcwSDdm5LVgfEkoepsWkS+40+WNb7BUMbg== + version "1.4.33" + resolved "https://registry.yarnpkg.com/@types/socket.io-client/-/socket.io-client-1.4.33.tgz#8e705b9b3f7fba6cb329d27cd2eda222812adbf1" + integrity sha512-m4LnxkljsI9fMsjwpW5QhRpMixo2BeeLpFmg0AE+sS4H1pzAd/cs/ftTiL60FLZgfFa8PFRPx5KsHu8O0bADKQ== "@types/source-list-map@*": version "0.1.2" @@ -98,30 +109,30 @@ integrity sha512-K5K+yml8LTo9bWJI/rECfIPrGgxdpeNbj+d53lwN4QjW1MCwlkhUms+gtdzigTeUyBr09+u8BwOIY3MXvHdcsA== "@types/tapable@*", "@types/tapable@^1.0.5": - version "1.0.5" - resolved "https://registry.yarnpkg.com/@types/tapable/-/tapable-1.0.5.tgz#9adbc12950582aa65ead76bffdf39fe0c27a3c02" - integrity sha512-/gG2M/Imw7cQFp8PGvz/SwocNrmKFjFsm5Pb8HdbHkZ1K8pmuPzOX4VeVoiEecFCVf4CsN1r3/BRvx+6sNqwtQ== + version "1.0.6" + resolved "https://registry.yarnpkg.com/@types/tapable/-/tapable-1.0.6.tgz#a9ca4b70a18b270ccb2bc0aaafefd1d486b7ea74" + integrity sha512-W+bw9ds02rAQaMvaLYxAbJ6cvguW/iJXNT6lTssS1ps6QdrMKttqEAMEG/b5CR8TZl3/L7/lH0ZV5nNR1LXikA== "@types/uglify-js@*": - version "3.9.2" - resolved "https://registry.yarnpkg.com/@types/uglify-js/-/uglify-js-3.9.2.tgz#01992579debba674e1e359cd6bcb1a1d0ab2e02b" - integrity sha512-d6dIfpPbF+8B7WiCi2ELY7m0w1joD8cRW4ms88Emdb2w062NeEpbNCeWwVCgzLRpVG+5e74VFSg4rgJ2xXjEiQ== + version "3.9.3" + resolved "https://registry.yarnpkg.com/@types/uglify-js/-/uglify-js-3.9.3.tgz#d94ed608e295bc5424c9600e6b8565407b6b4b6b" + integrity sha512-KswB5C7Kwduwjj04Ykz+AjvPcfgv/37Za24O2EDzYNbwyzOo8+ydtvzUfZ5UMguiVu29Gx44l1A6VsPPcmYu9w== dependencies: source-map "^0.6.1" "@types/webpack-sources@*": - version "0.1.7" - resolved "https://registry.yarnpkg.com/@types/webpack-sources/-/webpack-sources-0.1.7.tgz#0a330a9456113410c74a5d64180af0cbca007141" - integrity sha512-XyaHrJILjK1VHVC4aVlKsdNN5KBTwufMb43cQs+flGxtPAf/1Qwl8+Q0tp5BwEGaI8D6XT1L+9bSWXckgkjTLw== + version "1.4.2" + resolved "https://registry.yarnpkg.com/@types/webpack-sources/-/webpack-sources-1.4.2.tgz#5d3d4dea04008a779a90135ff96fb5c0c9e6292c" + integrity sha512-77T++JyKow4BQB/m9O96n9d/UUHWLQHlcqXb9Vsf4F1+wKNrrlWNFPDLKNT92RJnCSL6CieTc+NDXtCVZswdTw== dependencies: "@types/node" "*" "@types/source-list-map" "*" - source-map "^0.6.1" + source-map "^0.7.3" "@types/webpack@^4.41.8": - version "4.41.16" - resolved "https://registry.yarnpkg.com/@types/webpack/-/webpack-4.41.16.tgz#57b6154c5465401b0466c5fadcaf89dd98a77798" - integrity sha512-w80nXwCcXwwgv7rkTXb8lET6nWPNNUJxa36lrA2DEkD5TcPpHrlGAPrjdpZnkFX/FXSSuN5IIxCYowAB1Vobtw== + version "4.41.21" + resolved "https://registry.yarnpkg.com/@types/webpack/-/webpack-4.41.21.tgz#cc685b332c33f153bb2f5fc1fa3ac8adeb592dee" + integrity sha512-2j9WVnNrr/8PLAB5csW44xzQSJwS26aOnICsP3pSGCEdsu6KYtfQ6QJsVUKHWRnm1bL7HziJsfh5fHqth87yKA== dependencies: "@types/anymatch" "*" "@types/node" "*" @@ -131,51 +142,52 @@ source-map "^0.6.0" "@typescript-eslint/eslint-plugin@^2.26.0": - version "2.26.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-2.26.0.tgz#04c96560c8981421e5a9caad8394192363cc423f" - integrity sha512-4yUnLv40bzfzsXcTAtZyTjbiGUXMrcIJcIMioI22tSOyAxpdXiZ4r7YQUU8Jj6XXrLz9d5aMHPQf5JFR7h27Nw== + version "2.34.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-2.34.0.tgz#6f8ce8a46c7dea4a6f1d171d2bb8fbae6dac2be9" + integrity sha512-4zY3Z88rEE99+CNvTbXSyovv2z9PNOVffTWD2W8QF5s2prBQtwN2zadqERcrHpcR7O/+KMI3fcTAmUUhK/iQcQ== dependencies: - "@typescript-eslint/experimental-utils" "2.26.0" + "@typescript-eslint/experimental-utils" "2.34.0" functional-red-black-tree "^1.0.1" regexpp "^3.0.0" tsutils "^3.17.1" -"@typescript-eslint/experimental-utils@2.26.0": - version "2.26.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-2.26.0.tgz#063390c404d9980767d76274df386c0aa675d91d" - integrity sha512-RELVoH5EYd+JlGprEyojUv9HeKcZqF7nZUGSblyAw1FwOGNnmQIU8kxJ69fttQvEwCsX5D6ECJT8GTozxrDKVQ== +"@typescript-eslint/experimental-utils@2.34.0": + version "2.34.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-2.34.0.tgz#d3524b644cdb40eebceca67f8cf3e4cc9c8f980f" + integrity sha512-eS6FTkq+wuMJ+sgtuNTtcqavWXqsflWcfBnlYhg/nS4aZ1leewkXGbvBhaapn1q6qf4M71bsR1tez5JTRMuqwA== dependencies: "@types/json-schema" "^7.0.3" - "@typescript-eslint/typescript-estree" "2.26.0" + "@typescript-eslint/typescript-estree" "2.34.0" eslint-scope "^5.0.0" eslint-utils "^2.0.0" "@typescript-eslint/parser@^2.26.0": - version "2.26.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-2.26.0.tgz#385463615818b33acb72a25b39c03579df93d76f" - integrity sha512-+Xj5fucDtdKEVGSh9353wcnseMRkPpEAOY96EEenN7kJVrLqy/EVwtIh3mxcUz8lsFXW1mT5nN5vvEam/a5HiQ== + version "2.34.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-2.34.0.tgz#50252630ca319685420e9a39ca05fe185a256bc8" + integrity sha512-03ilO0ucSD0EPTw2X4PntSIRFtDPWjrVq7C3/Z3VQHRC7+13YB55rcJI3Jt+YgeHbjUdJPcPa7b23rXCBokuyA== dependencies: "@types/eslint-visitor-keys" "^1.0.0" - "@typescript-eslint/experimental-utils" "2.26.0" - "@typescript-eslint/typescript-estree" "2.26.0" + "@typescript-eslint/experimental-utils" "2.34.0" + "@typescript-eslint/typescript-estree" "2.34.0" eslint-visitor-keys "^1.1.0" -"@typescript-eslint/typescript-estree@2.26.0": - version "2.26.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-2.26.0.tgz#d8132cf1ee8a72234f996519a47d8a9118b57d56" - integrity sha512-3x4SyZCLB4zsKsjuhxDLeVJN6W29VwBnYpCsZ7vIdPel9ZqLfIZJgJXO47MNUkurGpQuIBALdPQKtsSnWpE1Yg== +"@typescript-eslint/typescript-estree@2.34.0": + version "2.34.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-2.34.0.tgz#14aeb6353b39ef0732cc7f1b8285294937cf37d5" + integrity sha512-OMAr+nJWKdlVM9LOqCqh3pQQPwxHAN7Du8DR6dmwCrAmxtiXQnhHJ6tBNtf+cggqfo51SG/FCwnKhXCIM7hnVg== dependencies: debug "^4.1.1" eslint-visitor-keys "^1.1.0" glob "^7.1.6" is-glob "^4.0.1" lodash "^4.17.15" - semver "^6.3.0" + semver "^7.3.2" tsutils "^3.17.1" "@webassemblyjs/ast@1.9.0": version "1.9.0" resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.9.0.tgz#bd850604b4042459a5a41cd7d338cbed695ed964" + integrity sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA== dependencies: "@webassemblyjs/helper-module-context" "1.9.0" "@webassemblyjs/helper-wasm-bytecode" "1.9.0" @@ -184,38 +196,46 @@ "@webassemblyjs/floating-point-hex-parser@1.9.0": version "1.9.0" resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz#3c3d3b271bddfc84deb00f71344438311d52ffb4" + integrity sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA== "@webassemblyjs/helper-api-error@1.9.0": version "1.9.0" resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz#203f676e333b96c9da2eeab3ccef33c45928b6a2" + integrity sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw== "@webassemblyjs/helper-buffer@1.9.0": version "1.9.0" resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz#a1442d269c5feb23fcbc9ef759dac3547f29de00" + integrity sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA== "@webassemblyjs/helper-code-frame@1.9.0": version "1.9.0" resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz#647f8892cd2043a82ac0c8c5e75c36f1d9159f27" + integrity sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA== dependencies: "@webassemblyjs/wast-printer" "1.9.0" "@webassemblyjs/helper-fsm@1.9.0": version "1.9.0" resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz#c05256b71244214671f4b08ec108ad63b70eddb8" + integrity sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw== "@webassemblyjs/helper-module-context@1.9.0": version "1.9.0" resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz#25d8884b76839871a08a6c6f806c3979ef712f07" + integrity sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g== dependencies: "@webassemblyjs/ast" "1.9.0" "@webassemblyjs/helper-wasm-bytecode@1.9.0": version "1.9.0" resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz#4fed8beac9b8c14f8c58b70d124d549dd1fe5790" + integrity sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw== "@webassemblyjs/helper-wasm-section@1.9.0": version "1.9.0" resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz#5a4138d5a6292ba18b04c5ae49717e4167965346" + integrity sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw== dependencies: "@webassemblyjs/ast" "1.9.0" "@webassemblyjs/helper-buffer" "1.9.0" @@ -225,22 +245,26 @@ "@webassemblyjs/ieee754@1.9.0": version "1.9.0" resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz#15c7a0fbaae83fb26143bbacf6d6df1702ad39e4" + integrity sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg== dependencies: "@xtuc/ieee754" "^1.2.0" "@webassemblyjs/leb128@1.9.0": version "1.9.0" resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.9.0.tgz#f19ca0b76a6dc55623a09cffa769e838fa1e1c95" + integrity sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw== dependencies: "@xtuc/long" "4.2.2" "@webassemblyjs/utf8@1.9.0": version "1.9.0" resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.9.0.tgz#04d33b636f78e6a6813227e82402f7637b6229ab" + integrity sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w== "@webassemblyjs/wasm-edit@1.9.0": version "1.9.0" resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz#3fe6d79d3f0f922183aa86002c42dd256cfee9cf" + integrity sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw== dependencies: "@webassemblyjs/ast" "1.9.0" "@webassemblyjs/helper-buffer" "1.9.0" @@ -254,6 +278,7 @@ "@webassemblyjs/wasm-gen@1.9.0": version "1.9.0" resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz#50bc70ec68ded8e2763b01a1418bf43491a7a49c" + integrity sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA== dependencies: "@webassemblyjs/ast" "1.9.0" "@webassemblyjs/helper-wasm-bytecode" "1.9.0" @@ -264,6 +289,7 @@ "@webassemblyjs/wasm-opt@1.9.0": version "1.9.0" resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz#2211181e5b31326443cc8112eb9f0b9028721a61" + integrity sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A== dependencies: "@webassemblyjs/ast" "1.9.0" "@webassemblyjs/helper-buffer" "1.9.0" @@ -273,6 +299,7 @@ "@webassemblyjs/wasm-parser@1.9.0": version "1.9.0" resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz#9d48e44826df4a6598294aa6c87469d642fff65e" + integrity sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA== dependencies: "@webassemblyjs/ast" "1.9.0" "@webassemblyjs/helper-api-error" "1.9.0" @@ -284,6 +311,7 @@ "@webassemblyjs/wast-parser@1.9.0": version "1.9.0" resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz#3031115d79ac5bd261556cecc3fa90a3ef451914" + integrity sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw== dependencies: "@webassemblyjs/ast" "1.9.0" "@webassemblyjs/floating-point-hex-parser" "1.9.0" @@ -295,6 +323,7 @@ "@webassemblyjs/wast-printer@1.9.0": version "1.9.0" resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz#4935d54c85fef637b00ce9f52377451d00d47899" + integrity sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA== dependencies: "@webassemblyjs/ast" "1.9.0" "@webassemblyjs/wast-parser" "1.9.0" @@ -303,14 +332,17 @@ "@xtuc/ieee754@^1.2.0": version "1.2.0" resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790" + integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA== "@xtuc/long@4.2.2": version "4.2.2" resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d" + integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.7: version "1.3.7" resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd" + integrity sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA== dependencies: mime-types "~2.1.24" negotiator "0.6.2" @@ -320,14 +352,15 @@ acorn-jsx@^5.2.0: resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.2.0.tgz#4c66069173d6fdd68ed85239fc256226182b2ebe" integrity sha512-HiUX/+K2YpkpJ+SzBffkM/AQ2YE03S0U1kjTLVpoJdhZMOWy8qvXVN9JdLqv2QsaQ6MPYQIuNmwD8zOiYUofLQ== -acorn@^6.2.1: +acorn@^6.4.1: version "6.4.1" resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.1.tgz#531e58ba3f51b9dacb9a6646ca4debf5b14ca474" + integrity sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA== acorn@^7.1.1: - version "7.1.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.1.1.tgz#e35668de0b402f359de515c5482a1ab9f89a69bf" - integrity sha512-add7dgA5ppRPxCFJoAGfMDi7PIBXq1RtGo7BhbLaxwrXPOmw8gq48Y9ozT01hUKy9byMjlR20EJhu5zlkErEkg== + version "7.3.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.3.1.tgz#85010754db53c3fbaf3b9ea3e083aa5c5d147ffd" + integrity sha512-tLc0wSnatxAQHVHUapaHdz72pi9KUyHjq5KyHjGg9Y8Ifdc79pTh2XvI6I1/chZbnM7QtNKzh66ooDogPZSleA== after@0.8.2: version "0.8.2" @@ -337,14 +370,17 @@ after@0.8.2: ajv-errors@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/ajv-errors/-/ajv-errors-1.0.1.tgz#f35986aceb91afadec4102fbd85014950cefa64d" + integrity sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ== ajv-keywords@^3.1.0, ajv-keywords@^3.4.1: - version "3.4.1" - resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.4.1.tgz#ef916e271c64ac12171fd8384eaae6b2345854da" + version "3.5.2" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" + integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== -ajv@^6.1.0, ajv@^6.10.0, ajv@^6.10.2: - version "6.12.0" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.0.tgz#06d60b96d87b8454a5adaba86e7854da629db4b7" +ajv@^6.1.0, ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.2: + version "6.12.3" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.3.tgz#18c5af38a111ddeb4f2697bd78d68abc1cabd706" + integrity sha512-4K0cK3L1hsqk9xIb2z9vs/XU+PGJZ9PNpJRDS9YLzmNdX6jmVPfamLvTJr0aDAusnHyCHO6MjzlkAsgtqp9teA== dependencies: fast-deep-equal "^3.1.1" fast-json-stable-stringify "^2.0.0" @@ -354,6 +390,7 @@ ajv@^6.1.0, ajv@^6.10.0, ajv@^6.10.2: ansi-colors@^3.0.0: version "3.2.4" resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.4.tgz#e3a3da4bfbae6c86a9c285625de124a234026fbf" + integrity sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA== ansi-escapes@^4.2.1: version "4.3.1" @@ -365,18 +402,17 @@ ansi-escapes@^4.2.1: ansi-html@0.0.7: version "0.0.7" resolved "https://registry.yarnpkg.com/ansi-html/-/ansi-html-0.0.7.tgz#813584021962a9e9e6fd039f940d12f56ca7859e" + integrity sha1-gTWEAhliqenm/QOflA0S9WynhZ4= ansi-regex@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" - -ansi-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" + integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= ansi-regex@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" + integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== ansi-regex@^5.0.0: version "5.0.0" @@ -386,6 +422,7 @@ ansi-regex@^5.0.0: ansi-styles@^3.2.0, ansi-styles@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== dependencies: color-convert "^1.9.0" @@ -400,13 +437,23 @@ ansi-styles@^4.1.0: anymatch@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" + integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw== dependencies: micromatch "^3.1.4" normalize-path "^2.1.1" +anymatch@~3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.1.tgz#c55ecf02185e2469259399310c173ce31233b142" + integrity sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + aproba@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" + integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== arg@^4.1.0: version "4.1.3" @@ -423,36 +470,44 @@ argparse@^1.0.7: arr-diff@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" + integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA= arr-flatten@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" + integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== arr-union@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" + integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= array-flatten@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" + integrity sha1-ml9pkFGx5wczKPKgCJaLZOopVdI= array-flatten@^2.1.0: version "2.1.2" resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.2.tgz#24ef80a28c1a893617e2149b0c6d0d788293b099" + integrity sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ== array-union@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" + integrity sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk= dependencies: array-uniq "^1.0.1" array-uniq@^1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" + integrity sha1-r2rId6Jcx/dOBYiUdThY39sk/bY= array-unique@^0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" + integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= arraybuffer.slice@~0.0.7: version "0.0.7" @@ -462,6 +517,7 @@ arraybuffer.slice@~0.0.7: asn1.js@^4.0.0: version "4.10.1" resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.10.1.tgz#b9c2bf5805f1e64aadeed6df3a2bfafb5a73f5a0" + integrity sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw== dependencies: bn.js "^4.0.0" inherits "^2.0.1" @@ -470,6 +526,7 @@ asn1.js@^4.0.0: assert@^1.1.1: version "1.5.0" resolved "https://registry.yarnpkg.com/assert/-/assert-1.5.0.tgz#55c109aaf6e0aefdb3dc4b71240c70bf574b18eb" + integrity sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA== dependencies: object-assign "^4.1.1" util "0.10.3" @@ -477,6 +534,7 @@ assert@^1.1.1: assign-symbols@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" + integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= astral-regex@^1.0.0: version "1.0.0" @@ -486,20 +544,24 @@ astral-regex@^1.0.0: async-each@^1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf" + integrity sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ== async-limiter@~1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" + integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== async@^2.6.2: version "2.6.3" resolved "https://registry.yarnpkg.com/async/-/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff" + integrity sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg== dependencies: lodash "^4.17.14" atob@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" + integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== axios@*: version "0.19.2" @@ -516,6 +578,7 @@ backo2@1.0.2: balanced-match@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" + integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= base64-arraybuffer@0.1.5: version "0.1.5" @@ -525,10 +588,12 @@ base64-arraybuffer@0.1.5: base64-js@^1.0.2: version "1.3.1" resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.1.tgz#58ece8cb75dd07e71ed08c736abc5fac4dbf8df1" + integrity sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g== base@^0.11.1: version "0.11.2" resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" + integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg== dependencies: cache-base "^1.0.1" class-utils "^0.3.5" @@ -541,6 +606,7 @@ base@^0.11.1: batch@0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16" + integrity sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY= better-assert@~1.0.0: version "1.0.2" @@ -552,14 +618,22 @@ better-assert@~1.0.0: big.js@^5.2.2: version "5.2.2" resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" + integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== binary-extensions@^1.0.0: version "1.13.1" resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65" + integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw== + +binary-extensions@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.1.0.tgz#30fa40c9e7fe07dbc895678cd287024dea241dd9" + integrity sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ== bindings@^1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" + integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ== dependencies: file-uri-to-path "1.0.0" @@ -571,14 +645,22 @@ blob@0.0.5: bluebird@^3.5.5: version "3.7.2" resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" + integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== -bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0: - version "4.11.8" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.8.tgz#2cde09eb5ee341f484746bb0309b3253b1b1442f" +bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.4.0: + version "4.11.9" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.9.tgz#26d556829458f9d1e81fc48952493d0ba3507828" + integrity sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw== + +bn.js@^5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.1.2.tgz#c9686902d3c9a27729f43ab10f9d79c2004da7b0" + integrity sha512-40rZaf3bUNKTVYu9sIeeEGOg7g14Yvnj9kH7b50EiwX0Q7A6umbvfI5tvHaOERH0XigqKkfLkFQxzb4e6CIXnA== body-parser@1.19.0: version "1.19.0" resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.0.tgz#96b2709e57c9c4e09a6fd66a8fd979844f69f08a" + integrity sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw== dependencies: bytes "3.1.0" content-type "~1.0.4" @@ -594,6 +676,7 @@ body-parser@1.19.0: bonjour@^3.5.0: version "3.5.0" resolved "https://registry.yarnpkg.com/bonjour/-/bonjour-3.5.0.tgz#8e890a183d8ee9a2393b3844c691a42bcf7bc9f5" + integrity sha1-jokKGD2O6aI5OzhExpGkK897yfU= dependencies: array-flatten "^2.1.0" deep-equal "^1.0.1" @@ -610,6 +693,7 @@ boolbase@~1.0.0: brace-expansion@^1.1.7: version "1.1.11" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== dependencies: balanced-match "^1.0.0" concat-map "0.0.1" @@ -617,6 +701,7 @@ brace-expansion@^1.1.7: braces@^2.3.1, braces@^2.3.2: version "2.3.2" resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" + integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== dependencies: arr-flatten "^1.1.0" array-unique "^0.3.2" @@ -629,19 +714,22 @@ braces@^2.3.1, braces@^2.3.2: split-string "^3.0.2" to-regex "^3.0.1" -braces@^3.0.1: +braces@^3.0.1, braces@~3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== dependencies: fill-range "^7.0.1" brorand@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" + integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8= browserify-aes@^1.0.0, browserify-aes@^1.0.4: version "1.2.0" resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" + integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA== dependencies: buffer-xor "^1.0.3" cipher-base "^1.0.0" @@ -653,6 +741,7 @@ browserify-aes@^1.0.0, browserify-aes@^1.0.4: browserify-cipher@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.1.tgz#8d6474c1b870bfdabcd3bcfcc1934a10e94f15f0" + integrity sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w== dependencies: browserify-aes "^1.0.4" browserify-des "^1.0.0" @@ -661,52 +750,62 @@ browserify-cipher@^1.0.0: browserify-des@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.2.tgz#3af4f1f59839403572f1c66204375f7a7f703e9c" + integrity sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A== dependencies: cipher-base "^1.0.1" des.js "^1.0.0" inherits "^2.0.1" safe-buffer "^5.1.2" -browserify-rsa@^4.0.0: +browserify-rsa@^4.0.0, browserify-rsa@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.0.1.tgz#21e0abfaf6f2029cf2fafb133567a701d4135524" + integrity sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ= dependencies: bn.js "^4.1.0" randombytes "^2.0.1" browserify-sign@^4.0.0: - version "4.0.4" - resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.0.4.tgz#aa4eb68e5d7b658baa6bf6a57e630cbd7a93d298" + version "4.2.0" + resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.2.0.tgz#545d0b1b07e6b2c99211082bf1b12cce7a0b0e11" + integrity sha512-hEZC1KEeYuoHRqhGhTy6gWrpJA3ZDjFWv0DE61643ZnOXAKJb3u7yWcrU0mMc9SwAqK1n7myPGndkp0dFG7NFA== dependencies: - bn.js "^4.1.1" - browserify-rsa "^4.0.0" - create-hash "^1.1.0" - create-hmac "^1.1.2" - elliptic "^6.0.0" - inherits "^2.0.1" - parse-asn1 "^5.0.0" + bn.js "^5.1.1" + browserify-rsa "^4.0.1" + create-hash "^1.2.0" + create-hmac "^1.1.7" + elliptic "^6.5.2" + inherits "^2.0.4" + parse-asn1 "^5.1.5" + readable-stream "^3.6.0" + safe-buffer "^5.2.0" browserify-zlib@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz#2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f" + integrity sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA== dependencies: pako "~1.0.5" buffer-from@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" + integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== buffer-indexof@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/buffer-indexof/-/buffer-indexof-1.1.1.tgz#52fabcc6a606d1a00302802648ef68f639da268c" + integrity sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g== buffer-xor@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" + integrity sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk= buffer@^4.3.0: version "4.9.2" resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.2.tgz#230ead344002988644841ab0244af8c44bbe3ef8" + integrity sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg== dependencies: base64-js "^1.0.2" ieee754 "^1.1.4" @@ -715,18 +814,22 @@ buffer@^4.3.0: builtin-status-codes@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" + integrity sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug= bytes@3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" + integrity sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg= bytes@3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" + integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== cacache@^12.0.2: version "12.0.4" resolved "https://registry.yarnpkg.com/cacache/-/cacache-12.0.4.tgz#668bcbd105aeb5f1d92fe25570ec9525c8faa40c" + integrity sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ== dependencies: bluebird "^3.5.5" chownr "^1.1.1" @@ -747,6 +850,7 @@ cacache@^12.0.2: cache-base@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" + integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ== dependencies: collection-visit "^1.0.0" component-emitter "^1.2.1" @@ -758,6 +862,11 @@ cache-base@^1.0.1: union-value "^1.0.0" unset-value "^1.0.0" +call-me-maybe@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/call-me-maybe/-/call-me-maybe-1.0.1.tgz#26d208ea89e37b5cbde60250a15f031c16a4d66b" + integrity sha1-JtII6onje1y95gJQoV8DHBak1ms= + callsite@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/callsite/-/callsite-1.0.0.tgz#280398e5d664bd74038b6f0905153e6e8af1bc20" @@ -779,19 +888,21 @@ camel-case@^4.1.1: camelcase@^5.0.0: version "5.3.1" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" + integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== -chalk@2.4.2, chalk@^2.0.0, chalk@^2.1.0, chalk@^2.3.0: +chalk@^2.0.0, chalk@^2.1.0, chalk@^2.3.0, chalk@^2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== dependencies: ansi-styles "^3.2.1" escape-string-regexp "^1.0.5" supports-color "^5.3.0" -chalk@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4" - integrity sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg== +chalk@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a" + integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A== dependencies: ansi-styles "^4.1.0" supports-color "^7.1.0" @@ -804,6 +915,7 @@ chardet@^0.7.0: chokidar@^2.1.8: version "2.1.8" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917" + integrity sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg== dependencies: anymatch "^2.0.0" async-each "^1.0.1" @@ -819,19 +931,37 @@ chokidar@^2.1.8: optionalDependencies: fsevents "^1.2.7" +chokidar@^3.4.1: + version "3.4.1" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.4.1.tgz#e905bdecf10eaa0a0b1db0c664481cc4cbc22ba1" + integrity sha512-TQTJyr2stihpC4Sya9hs2Xh+O2wf+igjL36Y75xx2WdHuiICcn/XJza46Jwt0eT5hVpQOzo3FpY3cj3RVYLX0g== + dependencies: + anymatch "~3.1.1" + braces "~3.0.2" + glob-parent "~5.1.0" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.4.0" + optionalDependencies: + fsevents "~2.1.2" + chownr@^1.1.1: version "1.1.4" resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" + integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== chrome-trace-event@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz#234090ee97c7d4ad1a2c4beae27505deffc608a4" + integrity sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ== dependencies: tslib "^1.9.0" cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: version "1.0.4" resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" + integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q== dependencies: inherits "^2.0.1" safe-buffer "^5.0.1" @@ -839,6 +969,7 @@ cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: class-utils@^0.3.5: version "0.3.6" resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" + integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg== dependencies: arr-union "^3.1.0" define-property "^0.2.5" @@ -859,34 +990,24 @@ cli-cursor@^3.1.0: dependencies: restore-cursor "^3.1.0" -cli-width@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639" - integrity sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk= - -cliui@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-4.1.0.tgz#348422dbe82d800b3022eef4f6ac10bf2e4d1b49" - dependencies: - string-width "^2.1.1" - strip-ansi "^4.0.0" - wrap-ansi "^2.0.0" +cli-width@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6" + integrity sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw== cliui@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5" + integrity sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA== dependencies: string-width "^3.1.0" strip-ansi "^5.2.0" wrap-ansi "^5.1.0" -code-point-at@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" - collection-visit@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" + integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA= dependencies: map-visit "^1.0.0" object-visit "^1.0.0" @@ -894,6 +1015,7 @@ collection-visit@^1.0.0: color-convert@^1.9.0: version "1.9.3" resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== dependencies: color-name "1.1.3" @@ -907,6 +1029,7 @@ color-convert@^2.0.1: color-name@1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= color-name@~1.1.4: version "1.1.4" @@ -916,6 +1039,7 @@ color-name@~1.1.4: commander@^2.20.0: version "2.20.3" resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" + integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== commander@^4.1.1: version "4.1.1" @@ -925,6 +1049,7 @@ commander@^4.1.1: commondir@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" + integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= component-bind@1.0.0: version "1.0.0" @@ -936,9 +1061,10 @@ component-emitter@1.2.1: resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6" integrity sha1-E3kY1teCg/ffemt8WmPhQOaUJeY= -component-emitter@^1.2.1: +component-emitter@^1.2.1, component-emitter@~1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" + integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== component-inherit@0.0.3: version "0.0.3" @@ -948,12 +1074,14 @@ component-inherit@0.0.3: compressible@~2.0.16: version "2.0.18" resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba" + integrity sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg== dependencies: mime-db ">= 1.43.0 < 2" compression@^1.7.4: version "1.7.4" resolved "https://registry.yarnpkg.com/compression/-/compression-1.7.4.tgz#95523eff170ca57c29a0ca41e6fe131f41e5bb8f" + integrity sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ== dependencies: accepts "~1.3.5" bytes "3.0.0" @@ -966,10 +1094,12 @@ compression@^1.7.4: concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= concat-stream@^1.5.0: version "1.6.2" resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" + integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== dependencies: buffer-from "^1.0.0" inherits "^2.0.3" @@ -979,36 +1109,44 @@ concat-stream@^1.5.0: connect-history-api-fallback@^1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz#8b32089359308d111115d81cad3fceab888f97bc" + integrity sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg== console-browserify@^1.1.0: version "1.2.0" resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.2.0.tgz#67063cef57ceb6cf4993a2ab3a55840ae8c49336" + integrity sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA== constants-browserify@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" + integrity sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U= content-disposition@0.5.3: version "0.5.3" resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.3.tgz#e130caf7e7279087c5616c2007d0485698984fbd" + integrity sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g== dependencies: safe-buffer "5.1.2" content-type@~1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" + integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== cookie-signature@1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" + integrity sha1-4wOogrNCzD7oylE6eZmXNNqzriw= cookie@0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.0.tgz#beb437e7022b3b6d49019d088665303ebe9c14ba" + integrity sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg== copy-concurrently@^1.0.0: version "1.0.5" resolved "https://registry.yarnpkg.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz#92297398cae34937fcafd6ec8139c18051f0b5e0" + integrity sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A== dependencies: aproba "^1.1.1" fs-write-stream-atomic "^1.0.8" @@ -1020,21 +1158,25 @@ copy-concurrently@^1.0.0: copy-descriptor@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" + integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= core-util-is@~1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= create-ecdh@^4.0.0: version "4.0.3" resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.3.tgz#c9111b6f33045c4697f144787f9254cdc77c45ff" + integrity sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw== dependencies: bn.js "^4.1.0" elliptic "^6.0.0" -create-hash@^1.1.0, create-hash@^1.1.2: +create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" + integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg== dependencies: cipher-base "^1.0.1" inherits "^2.0.1" @@ -1042,9 +1184,10 @@ create-hash@^1.1.0, create-hash@^1.1.2: ripemd160 "^2.0.1" sha.js "^2.4.0" -create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4: +create-hmac@^1.1.0, create-hmac@^1.1.4, create-hmac@^1.1.7: version "1.1.7" resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" + integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg== dependencies: cipher-base "^1.0.3" create-hash "^1.1.0" @@ -1053,9 +1196,10 @@ create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4: safe-buffer "^5.0.1" sha.js "^2.4.8" -cross-spawn@6.0.5, cross-spawn@^6.0.0, cross-spawn@^6.0.5: +cross-spawn@^6.0.0, cross-spawn@^6.0.5: version "6.0.5" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" + integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== dependencies: nice-try "^1.0.4" path-key "^2.0.1" @@ -1066,6 +1210,7 @@ cross-spawn@6.0.5, cross-spawn@^6.0.0, cross-spawn@^6.0.5: crypto-browserify@^3.11.0: version "3.12.0" resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" + integrity sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg== dependencies: browserify-cipher "^1.0.0" browserify-sign "^4.0.0" @@ -1097,10 +1242,12 @@ css-what@2.1: cyclist@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-1.0.1.tgz#596e9698fd0c80e12038c2b82d6eb1b35b6224d9" + integrity sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk= debug@2.6.9, debug@^2.2.0, debug@^2.3.3: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== dependencies: ms "2.0.0" @@ -1111,29 +1258,34 @@ debug@=3.1.0, debug@~3.1.0: dependencies: ms "2.0.0" -debug@^3.0.0, debug@^3.1.1, debug@^3.2.5: +debug@^3.1.1, debug@^3.2.5: version "3.2.6" resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" + integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== dependencies: ms "^2.1.1" debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@~4.1.0: version "4.1.1" resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" + integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw== dependencies: ms "^2.1.1" decamelize@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" + integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= decode-uri-component@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" + integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= deep-equal@^1.0.1: version "1.1.1" resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.1.1.tgz#b5c98c942ceffaf7cb051e24e1434a25a2e6076a" + integrity sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g== dependencies: is-arguments "^1.0.4" is-date-object "^1.0.1" @@ -1150,6 +1302,7 @@ deep-is@~0.1.3: default-gateway@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/default-gateway/-/default-gateway-4.2.0.tgz#167104c7500c2115f6dd69b0a536bb8ed720552b" + integrity sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA== dependencies: execa "^1.0.0" ip-regex "^2.1.0" @@ -1157,24 +1310,28 @@ default-gateway@^4.2.0: define-properties@^1.1.2, define-properties@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" + integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== dependencies: object-keys "^1.0.12" define-property@^0.2.5: version "0.2.5" resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" + integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY= dependencies: is-descriptor "^0.1.0" define-property@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" + integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY= dependencies: is-descriptor "^1.0.0" define-property@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" + integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ== dependencies: is-descriptor "^1.0.2" isobject "^3.0.1" @@ -1182,6 +1339,7 @@ define-property@^2.0.2: del@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/del/-/del-4.1.1.tgz#9e8f117222ea44a31ff3a156c049b99052a9f0b4" + integrity sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ== dependencies: "@types/glob" "^7.1.1" globby "^6.1.0" @@ -1194,10 +1352,12 @@ del@^4.1.1: depd@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" + integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= des.js@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.1.tgz#5382142e1bdc53f85d86d53e5f4aa7deb91e0843" + integrity sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA== dependencies: inherits "^2.0.1" minimalistic-assert "^1.0.0" @@ -1205,14 +1365,17 @@ des.js@^1.0.0: destroy@~1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" + integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA= detect-file@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/detect-file/-/detect-file-1.0.0.tgz#f0d66d03672a825cb1b73bdb3fe62310c8e552b7" + integrity sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc= detect-node@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.0.4.tgz#014ee8f8f669c5c58023da64b8179c083a28c46c" + integrity sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw== diff@^4.0.1: version "4.0.2" @@ -1222,6 +1385,7 @@ diff@^4.0.1: diffie-hellman@^5.0.0: version "5.0.3" resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875" + integrity sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg== dependencies: bn.js "^4.1.0" miller-rabin "^4.0.0" @@ -1230,10 +1394,12 @@ diffie-hellman@^5.0.0: dns-equal@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/dns-equal/-/dns-equal-1.0.0.tgz#b39e7f1da6eb0a75ba9c17324b34753c47e0654d" + integrity sha1-s55/HabrCnW6nBcySzR1PEfgZU0= dns-packet@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-1.3.1.tgz#12aa426981075be500b910eedcd0b47dd7deda5a" + integrity sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg== dependencies: ip "^1.1.0" safe-buffer "^5.0.1" @@ -1241,6 +1407,7 @@ dns-packet@^1.3.1: dns-txt@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/dns-txt/-/dns-txt-2.0.2.tgz#b91d806f5d27188e4ab3e7d107d881a1cc4642b6" + integrity sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY= dependencies: buffer-indexof "^1.0.0" @@ -1269,6 +1436,7 @@ dom-serializer@0: domain-browser@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda" + integrity sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA== domelementtype@1, domelementtype@^1.3.1: version "1.3.1" @@ -1314,6 +1482,7 @@ dot-case@^3.0.3: duplexify@^3.4.2, duplexify@^3.6.0: version "3.7.1" resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.7.1.tgz#2a4df5317f6ccfd91f86d6fd25d8d8a103b88309" + integrity sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g== dependencies: end-of-stream "^1.0.0" inherits "^2.0.1" @@ -1323,10 +1492,12 @@ duplexify@^3.4.2, duplexify@^3.6.0: ee-first@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" + integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= -elliptic@^6.0.0: - version "6.5.2" - resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.2.tgz#05c5678d7173c049d8ca433552224a495d0e3762" +elliptic@^6.0.0, elliptic@^6.5.2: + version "6.5.3" + resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.3.tgz#cb59eb2efdaf73a0bd78ccd7015a62ad6e0f93d6" + integrity sha512-IMqzv5wNQf+E6aHeIqATs0tOLeOTwj1QKbRcS3jBbYkl5oLAserA8yJTT7/VyHUYG91PRmPyeQDObKLPpeS4dw== dependencies: bn.js "^4.4.0" brorand "^1.0.1" @@ -1339,36 +1510,36 @@ elliptic@^6.0.0: emoji-regex@^7.0.1: version "7.0.3" resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" + integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== emoji-regex@^8.0.0: version "8.0.0" resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== -emojis-list@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389" - emojis-list@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78" + integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q== encodeurl@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" + integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= end-of-stream@^1.0.0, end-of-stream@^1.1.0: version "1.4.4" resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" + integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== dependencies: once "^1.4.0" engine.io-client@~3.4.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/engine.io-client/-/engine.io-client-3.4.0.tgz#82a642b42862a9b3f7a188f41776b2deab643700" - integrity sha512-a4J5QO2k99CM2a0b12IznnyQndoEvtA4UAldhGzKqnHf42I3Qs2W5SPnDvatZRcMaNZs4IevVicBPayxYt6FwA== + version "3.4.3" + resolved "https://registry.yarnpkg.com/engine.io-client/-/engine.io-client-3.4.3.tgz#192d09865403e3097e3575ebfeb3861c4d01a66c" + integrity sha512-0NGY+9hioejTEJCaSJZfWZLk4FPI9dN+1H1C4+wj2iuFba47UgZbJzfWs4aNFajnX/qAaYKbe2lLTfEEWzCmcw== dependencies: - component-emitter "1.2.1" + component-emitter "~1.3.0" component-inherit "0.0.3" debug "~4.1.0" engine.io-parser "~2.2.0" @@ -1391,17 +1562,10 @@ engine.io-parser@~2.2.0: blob "0.0.5" has-binary2 "~1.0.2" -enhanced-resolve@4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.1.0.tgz#41c7e0bfdfe74ac1ffe1e57ad6a5c6c9f3742a7f" - dependencies: - graceful-fs "^4.1.2" - memory-fs "^0.4.0" - tapable "^1.0.0" - -enhanced-resolve@^4.0.0, enhanced-resolve@^4.1.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.1.1.tgz#2937e2b8066cd0fe7ce0990a98f0d71a35189f66" +enhanced-resolve@^4.0.0, enhanced-resolve@^4.1.1, enhanced-resolve@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.3.0.tgz#3b806f3bfafc1ec7de69551ef93cca46c1704126" + integrity sha512-3e87LvavsdxyoCfGusJnrZ5G8SLPOFeHSNpZI/ATL9a5leXo2k0w6MKnbqhdBad9qTobSfB20Ld7UmgoNbAZkQ== dependencies: graceful-fs "^4.1.2" memory-fs "^0.5.0" @@ -1413,35 +1577,38 @@ entities@^1.1.1: integrity sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w== entities@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/entities/-/entities-2.0.2.tgz#ac74db0bba8d33808bbf36809c3a5c3683531436" - integrity sha512-dmD3AvJQBUjKpcNkoqr+x+IF0SdRtPz9Vk0uTy4yWqga9ibB6s4v++QFWNohjiUGoMlF552ZvNyXDxz5iW0qmw== + version "2.0.3" + resolved "https://registry.yarnpkg.com/entities/-/entities-2.0.3.tgz#5c487e5742ab93c15abb5da22759b8590ec03b7f" + integrity sha512-MyoZ0jgnLvB2X3Lg5HqpFmn1kybDiIfEQmKzTb5apr51Rb+T3KdmMiqa70T+bhGnyv7bQ6WMj2QMHpGMmlrUYQ== errno@^0.1.3, errno@~0.1.7: version "0.1.7" resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.7.tgz#4684d71779ad39af177e3f007996f7c67c852618" + integrity sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg== dependencies: prr "~1.0.1" es-abstract@^1.17.0-next.1, es-abstract@^1.17.5: - version "1.17.5" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.17.5.tgz#d8c9d1d66c8981fb9200e2251d799eee92774ae9" + version "1.17.6" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.17.6.tgz#9142071707857b2cacc7b89ecb670316c3e2d52a" + integrity sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw== dependencies: es-to-primitive "^1.2.1" function-bind "^1.1.1" has "^1.0.3" has-symbols "^1.0.1" - is-callable "^1.1.5" - is-regex "^1.0.5" + is-callable "^1.2.0" + is-regex "^1.1.0" object-inspect "^1.7.0" object-keys "^1.1.1" object.assign "^4.1.0" - string.prototype.trimleft "^2.1.1" - string.prototype.trimright "^2.1.1" + string.prototype.trimend "^1.0.1" + string.prototype.trimstart "^1.0.1" es-to-primitive@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" + integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== dependencies: is-callable "^1.1.4" is-date-object "^1.0.1" @@ -1450,22 +1617,25 @@ es-to-primitive@^1.2.1: escape-html@~1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= escape-string-regexp@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= eslint-scope@^4.0.3: version "4.0.3" resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.3.tgz#ca03833310f6889a3264781aa82e63eb9cfe7848" + integrity sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg== dependencies: esrecurse "^4.1.0" estraverse "^4.1.1" eslint-scope@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.0.0.tgz#e87c8887c73e8d1ec84f1ca591645c358bfc8fb9" - integrity sha512-oYrhJW7S0bxAFDvWqzvMPRm6pcgcnWc4QnofCAqRTRfQC0JcwenzGglTtsLyIuuWFfkqDG9vz67cnttSd53djw== + version "5.1.0" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.0.tgz#d0f971dfe59c69e0cada684b23d49dbf82600ce5" + integrity sha512-iiGRvtxWqgtx5m8EyQUJihBloE4EnYeGE/bz1wSPwJE6tZuJUtHlhqDM4Xj2ukE8Dyy1+HCZ4hE0fzIVMzb58w== dependencies: esrecurse "^4.1.0" estraverse "^4.1.1" @@ -1478,16 +1648,16 @@ eslint-utils@^1.4.3: eslint-visitor-keys "^1.1.0" eslint-utils@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.0.0.tgz#7be1cc70f27a72a76cd14aa698bcabed6890e1cd" - integrity sha512-0HCPuJv+7Wv1bACm8y5/ECVfYdfsAm9xmVb7saeFlxjPYALefjhbYoCkBjPdPzGH8wWyTpAez82Fh3VKYEZ8OA== + version "2.1.0" + resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27" + integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg== dependencies: eslint-visitor-keys "^1.1.0" eslint-visitor-keys@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz#e2a82cea84ff246ad6fb57f9bde5b46621459ec2" - integrity sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A== + version "1.3.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" + integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== eslint@^6.8.0: version "6.8.0" @@ -1547,26 +1717,28 @@ esprima@^4.0.0: integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== esquery@^1.0.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.2.0.tgz#a010a519c0288f2530b3404124bfb5f02e9797fe" - integrity sha512-weltsSqdeWIX9G2qQZz7KlTRJdkkOCTPgLYJUz1Hacf48R4YOwGPHO3+ORfWedqJKbq5WQmsgK90n+pFLIKt/Q== + version "1.3.1" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.3.1.tgz#b78b5828aa8e214e29fb74c4d5b752e1c033da57" + integrity sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ== dependencies: - estraverse "^5.0.0" + estraverse "^5.1.0" esrecurse@^4.1.0: version "4.2.1" resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.1.tgz#007a3b9fdbc2b3bb87e4879ea19c92fdbd3942cf" + integrity sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ== dependencies: estraverse "^4.1.0" estraverse@^4.1.0, estraverse@^4.1.1: version "4.3.0" resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" + integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== -estraverse@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.0.0.tgz#ac81750b482c11cca26e4b07e83ed8f75fbcdc22" - integrity sha512-j3acdrMzqrxmJTNj5dbr1YbjacrYgAxVMeF0gK16E3j494mOe7xygM/ZLIguEQ0ETwAg2hlJCtHRGav+y0Ny5A== +estraverse@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.1.0.tgz#374309d39fd935ae500e7b92e8a6b4c720e59642" + integrity sha512-FyohXK+R0vE+y1nHLoBM7ZTyqRpqAlhdZHCWIWEviFLiGB8b04H6bQs8G+XTthacvT8VuwvteiP7RJSxMs8UEw== esutils@^2.0.2: version "2.0.3" @@ -1576,28 +1748,29 @@ esutils@^2.0.2: etag@~1.8.1: version "1.8.1" resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" + integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= -eventemitter3@^3.1.0: - version "3.1.2" - resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-3.1.2.tgz#2d3d48f9c346698fce83a85d7d664e98535df6e7" - -eventemitter3@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.0.tgz#d65176163887ee59f386d64c82610b696a4a74eb" +eventemitter3@^4.0.0, eventemitter3@^4.0.4: + version "4.0.4" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.4.tgz#b5463ace635a083d018bdc7c917b4c5f10a85384" + integrity sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ== events@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/events/-/events-3.1.0.tgz#84279af1b34cb75aa88bf5ff291f6d0bd9b31a59" + version "3.2.0" + resolved "https://registry.yarnpkg.com/events/-/events-3.2.0.tgz#93b87c18f8efcd4202a461aec4dfc0556b639379" + integrity sha512-/46HWwbfCX2xTawVfkKLGxMifJYQBWMwY1mjywRtb4c9x8l5NP3KoJtnIOiL1hfdRkIuYhETxQlo62IF8tcnlg== eventsource@^1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/eventsource/-/eventsource-1.0.7.tgz#8fbc72c93fcd34088090bc0a4e64f4b5cee6d8d0" + integrity sha512-4Ln17+vVT0k8aWq+t/bF5arcS3EpT9gYtW66EPacdj/mAFevznsnyoHLPy2BA8gbIQeIHoPsvwmfBftfcG//BQ== dependencies: original "^1.0.0" evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" + integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA== dependencies: md5.js "^1.3.4" safe-buffer "^5.1.1" @@ -1605,6 +1778,7 @@ evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: execa@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" + integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== dependencies: cross-spawn "^6.0.0" get-stream "^4.0.0" @@ -1617,6 +1791,7 @@ execa@^1.0.0: expand-brackets@^2.1.4: version "2.1.4" resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" + integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI= dependencies: debug "^2.3.3" define-property "^0.2.5" @@ -1629,19 +1804,23 @@ expand-brackets@^2.1.4: expand-tilde@^2.0.0, expand-tilde@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/expand-tilde/-/expand-tilde-2.0.2.tgz#97e801aa052df02454de46b02bf621642cdc8502" + integrity sha1-l+gBqgUt8CRU3kawK/YhZCzchQI= dependencies: homedir-polyfill "^1.0.1" -exports-loader@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/exports-loader/-/exports-loader-0.7.0.tgz#84881c784dea6036b8e1cd1dac3da9b6409e21a5" +exports-loader@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/exports-loader/-/exports-loader-1.1.0.tgz#26a16706e4cf533145de24c1419baf33b624fb5c" + integrity sha512-zGB2SujiAyO0Rwn4GQ17/HlT8cwmT8abcBeZpr2R3sItJ5sI5Y9BzNzus3H9tH1iWLAoJLi9N3TP54D2+j859Q== dependencies: - loader-utils "^1.1.0" - source-map "0.5.0" + loader-utils "^2.0.0" + schema-utils "^2.7.0" + source-map "^0.6.1" express@^4.17.1: version "4.17.1" resolved "https://registry.yarnpkg.com/express/-/express-4.17.1.tgz#4491fc38605cf51f8629d39c2b5d026f98a4c134" + integrity sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g== dependencies: accepts "~1.3.7" array-flatten "1.1.1" @@ -1677,12 +1856,14 @@ express@^4.17.1: extend-shallow@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" + integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= dependencies: is-extendable "^0.1.0" extend-shallow@^3.0.0, extend-shallow@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" + integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg= dependencies: assign-symbols "^1.0.0" is-extendable "^1.0.1" @@ -1699,6 +1880,7 @@ external-editor@^3.0.3: extglob@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" + integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw== dependencies: array-unique "^0.3.2" define-property "^1.0.0" @@ -1710,12 +1892,26 @@ extglob@^2.0.4: to-regex "^3.0.1" fast-deep-equal@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz#545145077c501491e33b15ec408c294376e94ae4" + version "3.1.3" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + +fast-glob@^2.2.6: + version "2.2.7" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-2.2.7.tgz#6953857c3afa475fff92ee6015d52da70a4cd39d" + integrity sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw== + dependencies: + "@mrmlnc/readdir-enhanced" "^2.2.1" + "@nodelib/fs.stat" "^1.1.2" + glob-parent "^3.1.0" + is-glob "^4.0.0" + merge2 "^1.2.3" + micromatch "^3.1.10" fast-json-stable-stringify@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== fast-levenshtein@~2.0.6: version "2.0.6" @@ -1725,18 +1921,21 @@ fast-levenshtein@~2.0.6: faye-websocket@^0.10.0: version "0.10.0" resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.10.0.tgz#4e492f8d04dfb6f89003507f6edbf2d501e7c6f4" + integrity sha1-TkkvjQTftviQA1B/btvy1QHnxvQ= dependencies: websocket-driver ">=0.5.1" faye-websocket@~0.11.1: version "0.11.3" resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.3.tgz#5c0e9a8968e8912c286639fde977a8b209f2508e" + integrity sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA== dependencies: websocket-driver ">=0.5.1" figgy-pudding@^3.5.1: version "3.5.2" resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.2.tgz#b4eee8148abb01dcf1d1ac34367d59e12fa61d6e" + integrity sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw== figures@^3.0.0: version "3.2.0" @@ -1755,10 +1954,12 @@ file-entry-cache@^5.0.1: file-uri-to-path@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" + integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== fill-range@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" + integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc= dependencies: extend-shallow "^2.0.1" is-number "^3.0.0" @@ -1768,12 +1969,14 @@ fill-range@^4.0.0: fill-range@^7.0.1: version "7.0.1" resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== dependencies: to-regex-range "^5.0.1" finalhandler@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d" + integrity sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA== dependencies: debug "2.6.9" encodeurl "~1.0.2" @@ -1786,6 +1989,7 @@ finalhandler@~1.1.2: find-cache-dir@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-2.1.0.tgz#8d0f94cd13fe43c6c7c261a0d86115ca918c05f7" + integrity sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ== dependencies: commondir "^1.0.1" make-dir "^2.0.0" @@ -1794,12 +1998,14 @@ find-cache-dir@^2.1.0: find-up@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" + integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== dependencies: locate-path "^3.0.0" -findup-sync@3.0.0: +findup-sync@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-3.0.0.tgz#17b108f9ee512dfb7a5c7f3c8b27ea9e1a9c08d1" + integrity sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg== dependencies: detect-file "^1.0.0" is-glob "^4.0.0" @@ -1823,6 +2029,7 @@ flatted@^2.0.0: flush-write-stream@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.1.1.tgz#8dd7d873a1babc207d94ead0c2e0e44276ebf2e8" + integrity sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w== dependencies: inherits "^2.0.3" readable-stream "^2.3.6" @@ -1835,32 +2042,36 @@ follow-redirects@1.5.10: debug "=3.1.0" follow-redirects@^1.0.0: - version "1.11.0" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.11.0.tgz#afa14f08ba12a52963140fe43212658897bc0ecb" - dependencies: - debug "^3.0.0" + version "1.12.1" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.12.1.tgz#de54a6205311b93d60398ebc01cf7015682312b6" + integrity sha512-tmRv0AVuR7ZyouUHLeNSiO6pqulF7dYa3s19c6t+wz9LD69/uSzdMxJ2S91nTI9U3rt/IldxpzMOFejp6f0hjg== for-in@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" + integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= forwarded@~0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84" + integrity sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ= fragment-cache@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" + integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk= dependencies: map-cache "^0.2.2" fresh@0.5.2: version "0.5.2" resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" + integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= from2@^2.1.0: version "2.3.0" resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af" + integrity sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8= dependencies: inherits "^2.0.1" readable-stream "^2.0.0" @@ -1868,6 +2079,7 @@ from2@^2.1.0: fs-write-stream-atomic@^1.0.8: version "1.0.10" resolved "https://registry.yarnpkg.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9" + integrity sha1-tH31NJPvkR33VzHnCp3tAYnbQMk= dependencies: graceful-fs "^4.1.2" iferr "^0.1.5" @@ -1877,17 +2089,25 @@ fs-write-stream-atomic@^1.0.8: fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= fsevents@^1.2.7: - version "1.2.12" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.12.tgz#db7e0d8ec3b0b45724fd4d83d43554a8f1f0de5c" + version "1.2.13" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.13.tgz#f325cb0455592428bcf11b383370ef70e3bfcc38" + integrity sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw== dependencies: bindings "^1.5.0" nan "^2.12.1" +fsevents@~2.1.2: + version "2.1.3" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.3.tgz#fb738703ae8d2f9fe900c33836ddebee8b97f23e" + integrity sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ== + function-bind@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== functional-red-black-tree@^1.0.1: version "1.0.1" @@ -1899,41 +2119,47 @@ get-browser-rtc@^1.0.0: resolved "https://registry.yarnpkg.com/get-browser-rtc/-/get-browser-rtc-1.0.2.tgz#bbcd40c8451a7ed4ef5c373b8169a409dd1d11d9" integrity sha1-u81AyEUaftTvXDc7gWmkCd0dEdk= -get-caller-file@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a" - get-caller-file@^2.0.1: version "2.0.5" resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== get-stream@^4.0.0: version "4.1.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" + integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== dependencies: pump "^3.0.0" get-value@^2.0.3, get-value@^2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" + integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= glob-parent@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" + integrity sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4= dependencies: is-glob "^3.1.0" path-dirname "^1.0.0" -glob-parent@^5.0.0: +glob-parent@^5.0.0, glob-parent@~5.1.0: version "5.1.1" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.1.tgz#b6c1ef417c4e5663ea498f1c45afac6916bbc229" integrity sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ== dependencies: is-glob "^4.0.1" +glob-to-regexp@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz#8c5a1494d2066c570cc3bfe4496175acc4d502ab" + integrity sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs= + glob@^7.0.3, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: version "7.1.6" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" + integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== dependencies: fs.realpath "^1.0.0" inflight "^1.0.4" @@ -1942,23 +2168,26 @@ glob@^7.0.3, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: once "^1.3.0" path-is-absolute "^1.0.0" -global-modules@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-2.0.0.tgz#997605ad2345f27f51539bea26574421215c7780" - dependencies: - global-prefix "^3.0.0" - global-modules@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-1.0.0.tgz#6d770f0eb523ac78164d72b5e71a8877265cc3ea" + integrity sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg== dependencies: global-prefix "^1.0.1" is-windows "^1.0.1" resolve-dir "^1.0.0" +global-modules@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-2.0.0.tgz#997605ad2345f27f51539bea26574421215c7780" + integrity sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A== + dependencies: + global-prefix "^3.0.0" + global-prefix@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-1.0.2.tgz#dbf743c6c14992593c655568cb66ed32c0122ebe" + integrity sha1-2/dDxsFJklk8ZVVoy2btMsASLr4= dependencies: expand-tilde "^2.0.2" homedir-polyfill "^1.0.1" @@ -1969,6 +2198,7 @@ global-prefix@^1.0.1: global-prefix@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-3.0.0.tgz#fc85f73064df69f50421f47f883fe5b913ba9b97" + integrity sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg== dependencies: ini "^1.3.5" kind-of "^6.0.2" @@ -1984,6 +2214,7 @@ globals@^12.1.0: globby@^6.1.0: version "6.1.0" resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c" + integrity sha1-9abXDoOV4hyFj7BInWTfAkJNUGw= dependencies: array-union "^1.0.1" glob "^7.0.3" @@ -1992,12 +2223,14 @@ globby@^6.1.0: pinkie-promise "^2.0.0" graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2: - version "4.2.3" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.3.tgz#4a12ff1b60376ef09862c2093edd908328be8423" + version "4.2.4" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" + integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== handle-thing@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-2.0.1.tgz#857f79ce359580c340d43081cc648970d0bb234e" + integrity sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg== has-binary2@~1.0.2: version "1.0.3" @@ -2014,6 +2247,7 @@ has-cors@1.1.0: has-flag@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= has-flag@^4.0.0: version "4.0.0" @@ -2023,10 +2257,12 @@ has-flag@^4.0.0: has-symbols@^1.0.0, has-symbols@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8" + integrity sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg== has-value@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" + integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8= dependencies: get-value "^2.0.3" has-values "^0.1.4" @@ -2035,6 +2271,7 @@ has-value@^0.3.1: has-value@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" + integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc= dependencies: get-value "^2.0.6" has-values "^1.0.0" @@ -2043,10 +2280,12 @@ has-value@^1.0.0: has-values@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" + integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E= has-values@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" + integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8= dependencies: is-number "^3.0.0" kind-of "^4.0.0" @@ -2054,19 +2293,23 @@ has-values@^1.0.0: has@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== dependencies: function-bind "^1.1.1" hash-base@^3.0.0: - version "3.0.4" - resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.0.4.tgz#5fc8686847ecd73499403319a6b0a3f3f6ae4918" + version "3.1.0" + resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.1.0.tgz#55c381d9e06e1d2997a883b4a3fddfe7f0d3af33" + integrity sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA== dependencies: - inherits "^2.0.1" - safe-buffer "^5.0.1" + inherits "^2.0.4" + readable-stream "^3.6.0" + safe-buffer "^5.2.0" hash.js@^1.0.0, hash.js@^1.0.3: version "1.1.7" resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" + integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== dependencies: inherits "^2.0.3" minimalistic-assert "^1.0.1" @@ -2079,6 +2322,7 @@ he@^1.2.0: hmac-drbg@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" + integrity sha1-0nRXAQJabHdabFRXk+1QL8DGSaE= dependencies: hash.js "^1.0.3" minimalistic-assert "^1.0.0" @@ -2087,21 +2331,24 @@ hmac-drbg@^1.0.0: homedir-polyfill@^1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz#743298cef4e5af3e194161fbadcc2151d3a058e8" + integrity sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA== dependencies: parse-passwd "^1.0.0" hpack.js@^2.1.6: version "2.1.6" resolved "https://registry.yarnpkg.com/hpack.js/-/hpack.js-2.1.6.tgz#87774c0949e513f42e84575b3c45681fade2a0b2" + integrity sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI= dependencies: inherits "^2.0.1" obuf "^1.0.0" readable-stream "^2.0.1" wbuf "^1.1.0" -html-entities@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.2.1.tgz#0df29351f0721163515dfb9e5543e5f6eed5162f" +html-entities@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.3.1.tgz#fb9a1a4b5b14c5daba82d3e34c6ae4fe701a0e44" + integrity sha512-rhE/4Z3hIhzHAUKbW8jVcCyuT5oJCXXqhN/6mXXVCpzTmvJnoH2HL/bt3EZ6p55jbFJBeAe1ZNpL5BugLujxNA== html-minifier-terser@^5.0.1: version "5.1.1" @@ -2146,10 +2393,12 @@ htmlparser2@^3.3.0: http-deceiver@^1.2.7: version "1.2.7" resolved "https://registry.yarnpkg.com/http-deceiver/-/http-deceiver-1.2.7.tgz#fa7168944ab9a519d337cb0bec7284dc3e723d87" + integrity sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc= http-errors@1.7.2: version "1.7.2" resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.2.tgz#4f5029cf13239f31036e5b2e55292bcfbcc85c8f" + integrity sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg== dependencies: depd "~1.1.2" inherits "2.0.3" @@ -2160,6 +2409,7 @@ http-errors@1.7.2: http-errors@~1.6.2: version "1.6.3" resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d" + integrity sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0= dependencies: depd "~1.1.2" inherits "2.0.3" @@ -2169,6 +2419,7 @@ http-errors@~1.6.2: http-errors@~1.7.2: version "1.7.3" resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06" + integrity sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw== dependencies: depd "~1.1.2" inherits "2.0.4" @@ -2176,13 +2427,15 @@ http-errors@~1.7.2: statuses ">= 1.5.0 < 2" toidentifier "1.0.0" -"http-parser-js@>=0.4.0 <0.4.11": - version "0.4.10" - resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.4.10.tgz#92c9c1374c35085f75db359ec56cc257cbb93fa4" +http-parser-js@>=0.5.1: + version "0.5.2" + resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.2.tgz#da2e31d237b393aae72ace43882dd7e270a8ff77" + integrity sha512-opCO9ASqg5Wy2FNo7A0sxy71yGbbkJJXLdgMK04Tcypw9jr2MgWbyubb0+WdmDmGnFflO7fRbqbaihh/ENDlRQ== http-proxy-middleware@0.19.1: version "0.19.1" resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz#183c7dc4aa1479150306498c210cdaf96080a43a" + integrity sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q== dependencies: http-proxy "^1.17.0" is-glob "^4.0.0" @@ -2190,8 +2443,9 @@ http-proxy-middleware@0.19.1: micromatch "^3.1.10" http-proxy@^1.17.0: - version "1.18.0" - resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.18.0.tgz#dbe55f63e75a347db7f3d99974f2692a314a6a3a" + version "1.18.1" + resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.18.1.tgz#401541f0534884bbf95260334e72f88ee3976549" + integrity sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ== dependencies: eventemitter3 "^4.0.0" follow-redirects "^1.0.0" @@ -2200,20 +2454,24 @@ http-proxy@^1.17.0: https-browserify@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" + integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM= iconv-lite@0.4.24, iconv-lite@^0.4.24: version "0.4.24" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== dependencies: safer-buffer ">= 2.1.2 < 3" ieee754@^1.1.4: version "1.1.13" resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84" + integrity sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg== iferr@^0.1.5: version "0.1.5" resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" + integrity sha1-xg7taebY/bazEEofy8ocGS3FtQE= ignore@^4.0.6: version "4.0.6" @@ -2228,23 +2486,28 @@ import-fresh@^3.0.0: parent-module "^1.0.0" resolve-from "^4.0.0" -import-local@2.0.0, import-local@^2.0.0: +import-local@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/import-local/-/import-local-2.0.0.tgz#55070be38a5993cf18ef6db7e961f5bee5c5a09d" + integrity sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ== dependencies: pkg-dir "^3.0.0" resolve-cwd "^2.0.0" -imports-loader@^0.8.0: - version "0.8.0" - resolved "https://registry.yarnpkg.com/imports-loader/-/imports-loader-0.8.0.tgz#030ea51b8ca05977c40a3abfd9b4088fe0be9a69" +imports-loader@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/imports-loader/-/imports-loader-1.1.0.tgz#1c3a388d0c5cd7f9eb08f3646d4aae3b70e57933" + integrity sha512-HcPM6rULdQ6EBLVq+5O+CF9xb7qiUjsRm6V28bTG/c3IU5sQkVZzUDwYY0r4jHvSAmVFdO9WA/vLAURR5WQSeQ== dependencies: - loader-utils "^1.0.2" + loader-utils "^2.0.0" + schema-utils "^2.7.0" source-map "^0.6.1" + strip-comments "^2.0.1" imurmurhash@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= indexof@0.0.1: version "0.0.1" @@ -2254,45 +2517,51 @@ indexof@0.0.1: infer-owner@^1.0.3: version "1.0.4" resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467" + integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A== inflight@^1.0.4: version "1.0.6" resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= dependencies: once "^1.3.0" wrappy "1" -inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.1, inherits@~2.0.3: +inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== inherits@2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1" + integrity sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE= inherits@2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" + integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= ini@^1.3.4, ini@^1.3.5: version "1.3.5" resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" + integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw== inquirer@^7.0.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-7.1.0.tgz#1298a01859883e17c7264b82870ae1034f92dd29" - integrity sha512-5fJMWEmikSYu0nv/flMc475MhGbB7TSPd/2IpFV4I4rMklboCH2rQjYY5kKiYGHqUF9gvaambupcJFFG9dvReg== + version "7.3.3" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-7.3.3.tgz#04d176b2af04afc157a83fd7c100e98ee0aad003" + integrity sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA== dependencies: ansi-escapes "^4.2.1" - chalk "^3.0.0" + chalk "^4.1.0" cli-cursor "^3.1.0" - cli-width "^2.0.0" + cli-width "^3.0.0" external-editor "^3.0.3" figures "^3.0.0" - lodash "^4.17.15" + lodash "^4.17.19" mute-stream "0.0.8" run-async "^2.4.0" - rxjs "^6.5.3" + rxjs "^6.6.0" string-width "^4.1.0" strip-ansi "^6.0.0" through "^2.3.6" @@ -2300,83 +2569,102 @@ inquirer@^7.0.0: internal-ip@^4.3.0: version "4.3.0" resolved "https://registry.yarnpkg.com/internal-ip/-/internal-ip-4.3.0.tgz#845452baad9d2ca3b69c635a137acb9a0dad0907" + integrity sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg== dependencies: default-gateway "^4.2.0" ipaddr.js "^1.9.0" -interpret@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.2.0.tgz#d5061a6224be58e8083985f5014d844359576296" - -invert-kv@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-2.0.0.tgz#7393f5afa59ec9ff5f67a27620d11c226e3eec02" +interpret@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.4.0.tgz#665ab8bc4da27a774a40584e812e3e0fa45b1a1e" + integrity sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA== ip-regex@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9" + integrity sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk= ip@^1.1.0, ip@^1.1.5: version "1.1.5" resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" + integrity sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo= ipaddr.js@1.9.1, ipaddr.js@^1.9.0: version "1.9.1" resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" + integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== is-absolute-url@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-3.0.3.tgz#96c6a22b6a23929b11ea0afb1836c36ad4a5d698" + integrity sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q== is-accessor-descriptor@^0.1.6: version "0.1.6" resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" + integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY= dependencies: kind-of "^3.0.2" is-accessor-descriptor@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" + integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ== dependencies: kind-of "^6.0.0" is-arguments@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.0.4.tgz#3faf966c7cba0ff437fb31f6250082fcf0448cf3" + integrity sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA== is-binary-path@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" + integrity sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg= dependencies: binary-extensions "^1.0.0" +is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + dependencies: + binary-extensions "^2.0.0" + is-buffer@^1.1.5: version "1.1.6" resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" + integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== -is-callable@^1.1.4, is-callable@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.5.tgz#f7e46b596890456db74e7f6e976cb3273d06faab" +is-callable@^1.1.4, is-callable@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.0.tgz#83336560b54a38e35e3a2df7afd0454d691468bb" + integrity sha512-pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw== is-data-descriptor@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" + integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y= dependencies: kind-of "^3.0.2" is-data-descriptor@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" + integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ== dependencies: kind-of "^6.0.0" is-date-object@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.2.tgz#bda736f2cd8fd06d32844e7743bfa7494c3bfd7e" + integrity sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g== is-descriptor@^0.1.0: version "0.1.6" resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" + integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg== dependencies: is-accessor-descriptor "^0.1.6" is-data-descriptor "^0.1.4" @@ -2385,6 +2673,7 @@ is-descriptor@^0.1.0: is-descriptor@^1.0.0, is-descriptor@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" + integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg== dependencies: is-accessor-descriptor "^1.0.0" is-data-descriptor "^1.0.0" @@ -2393,26 +2682,24 @@ is-descriptor@^1.0.0, is-descriptor@^1.0.2: is-extendable@^0.1.0, is-extendable@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" + integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= is-extendable@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" + integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA== dependencies: is-plain-object "^2.0.4" is-extglob@^2.1.0, is-extglob@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" - -is-fullwidth-code-point@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" - dependencies: - number-is-nan "^1.0.0" + integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= is-fullwidth-code-point@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" + integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= is-fullwidth-code-point@^3.0.0: version "3.0.0" @@ -2422,79 +2709,88 @@ is-fullwidth-code-point@^3.0.0: is-glob@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" + integrity sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo= dependencies: is-extglob "^2.1.0" -is-glob@^4.0.0, is-glob@^4.0.1: +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" + integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== dependencies: is-extglob "^2.1.1" is-number@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" + integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU= dependencies: kind-of "^3.0.2" is-number@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== is-path-cwd@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-2.2.0.tgz#67d43b82664a7b5191fd9119127eb300048a9fdb" + integrity sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ== is-path-in-cwd@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz#bfe2dca26c69f397265a4009963602935a053acb" + integrity sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ== dependencies: is-path-inside "^2.1.0" is-path-inside@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-2.1.0.tgz#7c9810587d659a40d27bcdb4d5616eab059494b2" + integrity sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg== dependencies: path-is-inside "^1.0.2" is-plain-object@^2.0.3, is-plain-object@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" + integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== dependencies: isobject "^3.0.1" -is-promise@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa" - integrity sha1-eaKp7OfwlugPNtKy87wWwf9L8/o= - -is-regex@^1.0.4, is-regex@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.5.tgz#39d589a358bf18967f726967120b8fc1aed74eae" +is-regex@^1.0.4, is-regex@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.0.tgz#ece38e389e490df0dc21caea2bd596f987f767ff" + integrity sha512-iI97M8KTWID2la5uYXlkbSDQIg4F6o1sYboZKKTDpnDQMLtUL86zxhgDet3Q2SriaYsyGqZ6Mn2SjbRKeLHdqw== dependencies: - has "^1.0.3" + has-symbols "^1.0.1" is-stream@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" + integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= is-symbol@^1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.3.tgz#38e1014b9e6329be0de9d24a414fd7441ec61937" + integrity sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ== dependencies: has-symbols "^1.0.1" is-windows@^1.0.1, is-windows@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" + integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== is-wsl@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" + integrity sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0= isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= isarray@2.0.1: version "2.0.1" @@ -2504,29 +2800,32 @@ isarray@2.0.1: isexe@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= isobject@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" + integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk= dependencies: isarray "1.0.0" isobject@^3.0.0, isobject@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" + integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= -jasmine-core@~3.5.0: - version "3.5.0" - resolved "https://registry.yarnpkg.com/jasmine-core/-/jasmine-core-3.5.0.tgz#132c23e645af96d85c8bca13c8758b18429fc1e4" - integrity sha512-nCeAiw37MIMA9w9IXso7bRaLl+c/ef3wnxsoSAlYrzS+Ot0zTG6nU8G/cIfGkqpkjX2wNaIW9RFG0TwIFnG6bA== +jasmine-core@~3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/jasmine-core/-/jasmine-core-3.6.0.tgz#491f3bb23941799c353ceb7a45b38a950ebc5a20" + integrity sha512-8uQYa7zJN8hq9z+g8z1bqCfdC8eoDAeVnM5sfqs7KHv9/ifoJ500m018fpFc7RDaO6SWCLCXwo/wPSNcdYTgcw== jasmine@^3.5.0: - version "3.5.0" - resolved "https://registry.yarnpkg.com/jasmine/-/jasmine-3.5.0.tgz#7101eabfd043a1fc82ac24e0ab6ec56081357f9e" - integrity sha512-DYypSryORqzsGoMazemIHUfMkXM7I7easFaxAvNM3Mr6Xz3Fy36TupTrAOxZWN8MVKEU5xECv22J4tUQf3uBzQ== + version "3.6.1" + resolved "https://registry.yarnpkg.com/jasmine/-/jasmine-3.6.1.tgz#a20456b309a669b547a3c24bb2120f16f70cfc65" + integrity sha512-Jqp8P6ZWkTVFGmJwBK46p+kJNrZCdqkQ4GL+PGuBXZwK1fM4ST9BizkYgIwCFqYYqnTizAy6+XG2Ej5dFrej9Q== dependencies: - glob "^7.1.4" - jasmine-core "~3.5.0" + fast-glob "^2.2.6" + jasmine-core "~3.6.0" js-tokens@^4.0.0: version "4.0.0" @@ -2534,9 +2833,9 @@ js-tokens@^4.0.0: integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== js-yaml@^3.13.1: - version "3.13.1" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847" - integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw== + version "3.14.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.0.tgz#a7a34170f26a21bb162424d8adacb4113a69e482" + integrity sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A== dependencies: argparse "^1.0.7" esprima "^4.0.0" @@ -2544,10 +2843,12 @@ js-yaml@^3.13.1: json-parse-better-errors@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" + integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== json-schema-traverse@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== json-stable-stringify-without-jsonify@^1.0.1: version "1.0.1" @@ -2557,42 +2858,50 @@ json-stable-stringify-without-jsonify@^1.0.1: json3@^3.3.2: version "3.3.3" resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.3.tgz#7fc10e375fc5ae42c4705a5cc0aa6f62be305b81" + integrity sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA== json5@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" + integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow== dependencies: minimist "^1.2.0" +json5@^2.1.2: + version "2.1.3" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.3.tgz#c9b0f7fa9233bfe5807fe66fcf3a5617ed597d43" + integrity sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA== + dependencies: + minimist "^1.2.5" + killable@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/killable/-/killable-1.0.1.tgz#4c8ce441187a061c7474fb87ca08e2a638194892" + integrity sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg== kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: version "3.2.2" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" + integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= dependencies: is-buffer "^1.1.5" kind-of@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" + integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc= dependencies: is-buffer "^1.1.5" kind-of@^5.0.0: version "5.1.0" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" + integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== kind-of@^6.0.0, kind-of@^6.0.2: version "6.0.3" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" - -lcid@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/lcid/-/lcid-2.0.0.tgz#6ef5d2df60e52f82eb228a4c373e8d1f397253cf" - dependencies: - invert-kv "^2.0.0" + integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== levn@^0.3.0, levn@~0.3.0: version "0.3.0" @@ -2610,37 +2919,43 @@ linked-list-typescript@^1.0.11: loader-runner@^2.4.0: version "2.4.0" resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.4.0.tgz#ed47066bfe534d7e84c4c7b9998c2a75607d9357" + integrity sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw== -loader-utils@1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.2.3.tgz#1ff5dc6911c9f0a062531a4c04b609406108c2c7" - dependencies: - big.js "^5.2.2" - emojis-list "^2.0.0" - json5 "^1.0.1" - -loader-utils@^1.0.2, loader-utils@^1.1.0, loader-utils@^1.2.3: +loader-utils@^1.0.2, loader-utils@^1.2.3, loader-utils@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.4.0.tgz#c579b5e34cb34b1a74edc6c1fb36bfa371d5a613" + integrity sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA== dependencies: big.js "^5.2.2" emojis-list "^3.0.0" json5 "^1.0.1" +loader-utils@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-2.0.0.tgz#e4cace5b816d425a166b5f097e10cd12b36064b0" + integrity sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ== + dependencies: + big.js "^5.2.2" + emojis-list "^3.0.0" + json5 "^2.1.2" + locate-path@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" + integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== dependencies: p-locate "^3.0.0" path-exists "^3.0.0" -lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.15: - version "4.17.15" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" +lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19: + version "4.17.19" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.19.tgz#e48ddedbe30b3321783c5b4301fbd353bc1e4a4b" + integrity sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ== -loglevel@^1.6.6: - version "1.6.7" - resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.6.7.tgz#b3e034233188c68b889f5b862415306f565e2c56" +loglevel@^1.6.8: + version "1.6.8" + resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.6.8.tgz#8a25fb75d092230ecd4457270d80b54e28011171" + integrity sha512-bsU7+gc9AJ2SqpzxwU3+1fedl8zAntbtC5XYlt3s2j1hJcn2PsXSmgN8TaLG/J1/2mod4+cE/3vNL70/c1RNCA== lower-case@^2.0.1: version "2.0.1" @@ -2652,12 +2967,14 @@ lower-case@^2.0.1: lru-cache@^5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" + integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== dependencies: yallist "^3.0.2" make-dir@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" + integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA== dependencies: pify "^4.0.1" semver "^5.6.0" @@ -2667,25 +2984,22 @@ make-error@^1.1.1: resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== -map-age-cleaner@^0.1.1: - version "0.1.3" - resolved "https://registry.yarnpkg.com/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz#7d583a7306434c055fe474b0f45078e6e1b4b92a" - dependencies: - p-defer "^1.0.0" - map-cache@^0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" + integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= map-visit@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" + integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48= dependencies: object-visit "^1.0.0" md5.js@^1.3.4: version "1.3.5" resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" + integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg== dependencies: hash-base "^3.0.0" inherits "^2.0.1" @@ -2694,18 +3008,12 @@ md5.js@^1.3.4: media-typer@0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" + integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= -mem@^4.0.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/mem/-/mem-4.3.0.tgz#461af497bc4ae09608cdb2e60eefb69bff744178" - dependencies: - map-age-cleaner "^0.1.1" - mimic-fn "^2.0.0" - p-is-promise "^2.0.0" - -memory-fs@^0.4.0, memory-fs@^0.4.1: +memory-fs@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552" + integrity sha1-OpoguEYlI+RHz7x+i7gO1me/xVI= dependencies: errno "^0.1.3" readable-stream "^2.0.1" @@ -2713,6 +3021,7 @@ memory-fs@^0.4.0, memory-fs@^0.4.1: memory-fs@^0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.5.0.tgz#324c01288b88652966d161db77838720845a8e3c" + integrity sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA== dependencies: errno "^0.1.3" readable-stream "^2.0.1" @@ -2720,14 +3029,22 @@ memory-fs@^0.5.0: merge-descriptors@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" + integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E= + +merge2@^1.2.3: + version "1.4.1" + resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" + integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== methods@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" + integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= micromatch@^3.0.4, micromatch@^3.1.10, micromatch@^3.1.4: version "3.1.10" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" + integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== dependencies: arr-diff "^4.0.0" array-unique "^0.3.2" @@ -2746,6 +3063,7 @@ micromatch@^3.0.4, micromatch@^3.1.10, micromatch@^3.1.4: micromatch@^4.0.0: version "4.0.2" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.2.tgz#4fcb0999bf9fbc2fcbdd212f6d629b9a56c39259" + integrity sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q== dependencies: braces "^3.0.1" picomatch "^2.0.5" @@ -2753,53 +3071,64 @@ micromatch@^4.0.0: miller-rabin@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" + integrity sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA== dependencies: bn.js "^4.0.0" brorand "^1.0.1" -mime-db@1.43.0, "mime-db@>= 1.43.0 < 2": - version "1.43.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.43.0.tgz#0a12e0502650e473d735535050e7c8f4eb4fae58" +mime-db@1.44.0, "mime-db@>= 1.43.0 < 2": + version "1.44.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.44.0.tgz#fa11c5eb0aca1334b4233cb4d52f10c5a6272f92" + integrity sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg== mime-types@~2.1.17, mime-types@~2.1.24: - version "2.1.26" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.26.tgz#9c921fc09b7e149a65dfdc0da4d20997200b0a06" + version "2.1.27" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.27.tgz#47949f98e279ea53119f5722e0f34e529bec009f" + integrity sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w== dependencies: - mime-db "1.43.0" + mime-db "1.44.0" mime@1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" + integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== mime@^2.4.4: - version "2.4.4" - resolved "https://registry.yarnpkg.com/mime/-/mime-2.4.4.tgz#bd7b91135fc6b01cde3e9bae33d659b63d8857e5" + version "2.4.6" + resolved "https://registry.yarnpkg.com/mime/-/mime-2.4.6.tgz#e5b407c90db442f2beb5b162373d07b69affa4d1" + integrity sha512-RZKhC3EmpBchfTGBVb8fb+RL2cWyw/32lshnsETttkBAyAUXSGHxbEJWWRXc751DrIxG1q04b8QwMbAwkRPpUA== -mimic-fn@^2.0.0, mimic-fn@^2.1.0: +mimic-fn@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" + integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" + integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo= minimatch@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== dependencies: brace-expansion "^1.1.7" minimist@^1.2.0, minimist@^1.2.5: version "1.2.5" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" + integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== mississippi@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-3.0.0.tgz#ea0a3291f97e0b5e8776b363d5f0a12d94c67022" + integrity sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA== dependencies: concat-stream "^1.5.0" duplexify "^3.4.2" @@ -2815,19 +3144,22 @@ mississippi@^3.0.0: mixin-deep@^1.2.0: version "1.3.2" resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566" + integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA== dependencies: for-in "^1.0.2" is-extendable "^1.0.1" -mkdirp@^0.5.1, mkdirp@^0.5.3: - version "0.5.4" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.4.tgz#fd01504a6797ec5c9be81ff43d204961ed64a512" +mkdirp@^0.5.1, mkdirp@^0.5.3, mkdirp@^0.5.5: + version "0.5.5" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" + integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== dependencies: minimist "^1.2.5" move-concurrently@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92" + integrity sha1-viwAX9oy4LKa8fBdfEszIUxwH5I= dependencies: aproba "^1.1.1" copy-concurrently "^1.0.0" @@ -2839,22 +3171,27 @@ move-concurrently@^1.0.1: ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= ms@2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" + integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== ms@^2.1.1: version "2.1.2" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== multicast-dns-service-types@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz#899f11d9686e5e05cb91b35d5f0e63b773cfc901" + integrity sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE= multicast-dns@^6.0.1: version "6.2.3" resolved "https://registry.yarnpkg.com/multicast-dns/-/multicast-dns-6.2.3.tgz#a0ec7bd9055c4282f790c3c82f4e28db3b31b229" + integrity sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g== dependencies: dns-packet "^1.3.1" thunky "^1.0.2" @@ -2865,12 +3202,14 @@ mute-stream@0.0.8: integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== nan@^2.12.1: - version "2.14.0" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.0.tgz#7818f722027b2459a86f0295d434d1fc2336c52c" + version "2.14.1" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.1.tgz#d7be34dfa3105b91494c3147089315eff8874b01" + integrity sha512-isWHgVjnFjh2x2yuJ/tj3JbwoHu3UC2dX5G/88Cm24yB6YopVgxvBObDY7n5xW6ExmFhJpSEQqFPvq9zaXc8Jw== nanomatch@^1.2.9: version "1.2.13" resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" + integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA== dependencies: arr-diff "^4.0.0" array-unique "^0.3.2" @@ -2892,14 +3231,17 @@ natural-compare@^1.4.0: negotiator@0.6.2: version "0.6.2" resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" + integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw== neo-async@^2.5.0, neo-async@^2.6.1: - version "2.6.1" - resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.1.tgz#ac27ada66167fa8849a6addd837f6b189ad2081c" + version "2.6.2" + resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" + integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== nice-try@^1.0.4: version "1.0.5" resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" + integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== no-case@^3.0.3: version "3.0.3" @@ -2912,10 +3254,12 @@ no-case@^3.0.3: node-forge@0.9.0: version "0.9.0" resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.9.0.tgz#d624050edbb44874adca12bb9a52ec63cb782579" + integrity sha512-7ASaDa3pD+lJ3WvXFsxekJQelBKRpne+GOVbLbtHYdd7pFspyeuJHnWfLplGf3SwKGbfs/aYl5V/JCIaHVUKKQ== node-libs-browser@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.2.1.tgz#b64f513d18338625f90346d27b0d235e631f6425" + integrity sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q== dependencies: assert "^1.1.1" browserify-zlib "^0.2.0" @@ -2944,16 +3288,19 @@ node-libs-browser@^2.2.1: normalize-path@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" + integrity sha1-GrKLVW4Zg2Oowab35vogE3/mrtk= dependencies: remove-trailing-separator "^1.0.1" -normalize-path@^3.0.0: +normalize-path@^3.0.0, normalize-path@~3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== npm-run-path@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" + integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8= dependencies: path-key "^2.0.0" @@ -2964,13 +3311,10 @@ nth-check@~1.0.1: dependencies: boolbase "~1.0.0" -number-is-nan@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" - object-assign@^4.0.1, object-assign@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= object-component@0.0.3: version "0.0.3" @@ -2980,32 +3324,41 @@ object-component@0.0.3: object-copy@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" + integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw= dependencies: copy-descriptor "^0.1.0" define-property "^0.2.5" kind-of "^3.0.3" object-inspect@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.7.0.tgz#f4f6bd181ad77f006b5ece60bd0b6f398ff74a67" + version "1.8.0" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.8.0.tgz#df807e5ecf53a609cc6bfe93eac3cc7be5b3a9d0" + integrity sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA== object-is@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.0.2.tgz#6b80eb84fe451498f65007982f035a5b445edec4" + version "1.1.2" + resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.2.tgz#c5d2e87ff9e119f78b7a088441519e2eec1573b6" + integrity sha512-5lHCz+0uufF6wZ7CRFWJN3hp8Jqblpgve06U5CMQ3f//6iDjPr2PEo9MWCjEssDsa+UZEL4PkFpr+BMop6aKzQ== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.5" object-keys@^1.0.11, object-keys@^1.0.12, object-keys@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== object-visit@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" + integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs= dependencies: isobject "^3.0.0" object.assign@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da" + integrity sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w== dependencies: define-properties "^1.1.2" function-bind "^1.1.1" @@ -3023,26 +3376,31 @@ object.getownpropertydescriptors@^2.0.3: object.pick@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" + integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c= dependencies: isobject "^3.0.1" obuf@^1.0.0, obuf@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.2.tgz#09bea3343d41859ebd446292d11c9d4db619084e" + integrity sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg== on-finished@~2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" + integrity sha1-IPEzZIGwg811M3mSoWlxqi2QaUc= dependencies: ee-first "1.1.1" on-headers@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f" + integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA== once@^1.3.0, once@^1.3.1, once@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= dependencies: wrappy "1" @@ -3056,6 +3414,7 @@ onetime@^5.1.0: opn@^5.5.0: version "5.5.0" resolved "https://registry.yarnpkg.com/opn/-/opn-5.5.0.tgz#fc7164fab56d235904c51c3b27da6758ca3b9bfc" + integrity sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA== dependencies: is-wsl "^1.1.0" @@ -3074,71 +3433,65 @@ optionator@^0.8.3: original@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/original/-/original-1.0.2.tgz#e442a61cffe1c5fd20a65f3261c26663b303f25f" + integrity sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg== dependencies: url-parse "^1.4.3" os-browserify@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" - -os-locale@^3.0.0, os-locale@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-3.1.0.tgz#a802a6ee17f24c10483ab9935719cef4ed16bf1a" - dependencies: - execa "^1.0.0" - lcid "^2.0.0" - mem "^4.0.0" + integrity sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc= os-tmpdir@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= -p-defer@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c" - p-finally@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" - -p-is-promise@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-2.1.0.tgz#918cebaea248a62cf7ffab8e3bca8c5f882fc42e" + integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= p-limit@^2.0.0: - version "2.2.2" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.2.2.tgz#61279b67721f5287aa1c13a9a7fbbc48c9291b1e" + version "2.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" + integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== dependencies: p-try "^2.0.0" p-locate@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" + integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== dependencies: p-limit "^2.0.0" p-map@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175" + integrity sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw== p-retry@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/p-retry/-/p-retry-3.0.1.tgz#316b4c8893e2c8dc1cfa891f406c4b422bebf328" + integrity sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w== dependencies: retry "^0.12.0" p-try@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" + integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== pako@~1.0.5: version "1.0.11" resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf" + integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw== parallel-transform@^1.1.0: version "1.2.0" resolved "https://registry.yarnpkg.com/parallel-transform/-/parallel-transform-1.2.0.tgz#9049ca37d6cb2182c3b1d2c720be94d14a5814fc" + integrity sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg== dependencies: cyclist "^1.0.1" inherits "^2.0.3" @@ -3159,9 +3512,10 @@ parent-module@^1.0.0: dependencies: callsites "^3.0.0" -parse-asn1@^5.0.0: +parse-asn1@^5.0.0, parse-asn1@^5.1.5: version "5.1.5" resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.5.tgz#003271343da58dc94cace494faef3d2147ecea0e" + integrity sha512-jkMYn1dcJqF6d5CpU689bq7w/b5ALS9ROVSpQDPrZsqqesUJii9qutvoT5ltGedNXMO2e16YUWIghG9KxaViTQ== dependencies: asn1.js "^4.0.0" browserify-aes "^1.0.0" @@ -3173,6 +3527,7 @@ parse-asn1@^5.0.0: parse-passwd@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6" + integrity sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY= parseqs@0.0.5: version "0.0.5" @@ -3191,6 +3546,7 @@ parseuri@0.0.5: parseurl@~1.3.2, parseurl@~1.3.3: version "1.3.3" resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" + integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== pascal-case@^3.1.1: version "3.1.1" @@ -3203,45 +3559,55 @@ pascal-case@^3.1.1: pascalcase@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" + integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= path-browserify@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.1.tgz#e6c4ddd7ed3aa27c68a20cc4e50e1a4ee83bbc4a" + integrity sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ== path-dirname@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" + integrity sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA= path-exists@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" + integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= path-is-absolute@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= path-is-inside@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" + integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= path-key@^2.0.0, path-key@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" + integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= path-to-regexp@0.1.7: version "0.1.7" resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" + integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w= path@^0.12.7: version "0.12.7" resolved "https://registry.yarnpkg.com/path/-/path-0.12.7.tgz#d4dc2a506c4ce2197eb481ebfcd5b36c0140b10f" + integrity sha1-1NwqUGxM4hl+tIHr/NWzbAFAsQ8= dependencies: process "^0.11.1" util "^0.10.3" pbkdf2@^3.0.3: - version "3.0.17" - resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.17.tgz#976c206530617b14ebb32114239f7b09336e93a6" + version "3.1.1" + resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.1.tgz#cb8724b0fada984596856d1a6ebafd3584654b94" + integrity sha512-4Ejy1OPxi9f2tt1rRV7Go7zmfDQ+ZectEQz3VGUQhgq62HtIRPDyG/JtnwIxs6x3uNMwo2V7q1fMvKjb+Tnpqg== dependencies: create-hash "^1.1.2" create-hmac "^1.1.4" @@ -3250,53 +3616,62 @@ pbkdf2@^3.0.3: sha.js "^2.4.8" phaser@^3.22.0: - version "3.22.0" - resolved "https://registry.yarnpkg.com/phaser/-/phaser-3.22.0.tgz#0007e09116e02f93d46f32dabde7a0c864cedf4d" + version "3.24.1" + resolved "https://registry.yarnpkg.com/phaser/-/phaser-3.24.1.tgz#376e0c965d2a35af37c06ee78627dafbde5be017" + integrity sha512-WbrRMkbpEzarkfrq83akeauc6b8xNxsOTpDygyW7wrU2G2ne6kOYu3hji4UAaGnZaOLrVuj8ycYPjX9P1LxcDw== dependencies: - eventemitter3 "^3.1.0" - exports-loader "^0.7.0" - imports-loader "^0.8.0" + eventemitter3 "^4.0.4" + exports-loader "^1.1.0" + imports-loader "^1.1.0" path "^0.12.7" -picomatch@^2.0.5: +picomatch@^2.0.4, picomatch@^2.0.5, picomatch@^2.2.1: version "2.2.2" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" + integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== pify@^2.0.0: version "2.3.0" resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= pify@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" + integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== pinkie-promise@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" + integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o= dependencies: pinkie "^2.0.0" pinkie@^2.0.0: version "2.0.4" resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" + integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA= pkg-dir@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3" + integrity sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw== dependencies: find-up "^3.0.0" -portfinder@^1.0.25: - version "1.0.25" - resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.25.tgz#254fd337ffba869f4b9d37edc298059cb4d35eca" +portfinder@^1.0.26: + version "1.0.28" + resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.28.tgz#67c4622852bd5374dd1dd900f779f53462fac778" + integrity sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA== dependencies: async "^2.6.2" debug "^3.1.1" - mkdirp "^0.5.1" + mkdirp "^0.5.5" posix-character-classes@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" + integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= prelude-ls@~1.1.2: version "1.1.2" @@ -3314,10 +3689,12 @@ pretty-error@^2.1.1: process-nextick-args@~2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" + integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== process@^0.11.1, process@^0.11.10: version "0.11.10" resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" + integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI= progress@^2.0.0: version "2.0.3" @@ -3327,10 +3704,12 @@ progress@^2.0.0: promise-inflight@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" + integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM= proxy-addr@~2.0.5: version "2.0.6" resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.6.tgz#fdc2336505447d3f2f2c638ed272caf614bbb2bf" + integrity sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw== dependencies: forwarded "~0.1.2" ipaddr.js "1.9.1" @@ -3338,10 +3717,12 @@ proxy-addr@~2.0.5: prr@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" + integrity sha1-0/wRS6BplaRexok/SEzrHXj19HY= public-encrypt@^4.0.0: version "4.0.3" resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.3.tgz#4fcc9d77a07e48ba7527e7cbe0de33d0701331e0" + integrity sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q== dependencies: bn.js "^4.1.0" browserify-rsa "^4.0.0" @@ -3353,6 +3734,7 @@ public-encrypt@^4.0.0: pump@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909" + integrity sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA== dependencies: end-of-stream "^1.1.0" once "^1.3.1" @@ -3360,6 +3742,7 @@ pump@^2.0.0: pump@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" + integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== dependencies: end-of-stream "^1.1.0" once "^1.3.1" @@ -3367,6 +3750,7 @@ pump@^3.0.0: pumpify@^1.3.3: version "1.5.1" resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.5.1.tgz#36513be246ab27570b1a374a5ce278bfd74370ce" + integrity sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ== dependencies: duplexify "^3.6.0" inherits "^2.0.3" @@ -3375,35 +3759,42 @@ pumpify@^1.3.3: punycode@1.3.2: version "1.3.2" resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" + integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0= punycode@^1.2.4: version "1.4.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" + integrity sha1-wNWmOycYgArY4esPpSachN1BhF4= punycode@^2.1.0: version "2.1.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" + integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== qs@6.7.0: version "6.7.0" resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc" + integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ== querystring-es3@^0.2.0: version "0.2.1" resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" + integrity sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM= querystring@0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" + integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA= querystringify@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.1.1.tgz#60e5a5fd64a7f8bfa4d2ab2ed6fdf4c85bad154e" + integrity sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA== queue-microtask@^1.1.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.1.2.tgz#139bf8186db0c545017ec66c2664ac646d5c571e" - integrity sha512-F9wwNePtXrzZenAB3ax0Y8TSKGvuB7Qw16J30hspEUTbfUM+H827XyN3rlpwhVmtm5wuZtbKIHjOnwDn7MUxWQ== + version "1.1.4" + resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.1.4.tgz#40841ace4356b48b35b5ea61a2e1fe0a23c59ce1" + integrity sha512-eY/4Obve9cE5FK8YvC1cJsm5cr7XvAurul8UtBDJ2PR1p5NmAwHtvAt5ftcLtwYRCUKNhxCneZZlxmUDFoSeKA== queue-typescript@^1.0.1: version "1.0.1" @@ -3412,15 +3803,17 @@ queue-typescript@^1.0.1: dependencies: linked-list-typescript "^1.0.11" -randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.3, randombytes@^2.0.5: +randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.3, randombytes@^2.0.5, randombytes@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" + integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== dependencies: safe-buffer "^5.1.0" randomfill@^1.0.3: version "1.0.4" resolved "https://registry.yarnpkg.com/randomfill/-/randomfill-1.0.4.tgz#c92196fc86ab42be983f1bf31778224931d61458" + integrity sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw== dependencies: randombytes "^2.0.5" safe-buffer "^5.1.0" @@ -3428,10 +3821,12 @@ randomfill@^1.0.3: range-parser@^1.2.1, range-parser@~1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" + integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== raw-body@2.4.0: version "2.4.0" resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.0.tgz#a1ce6fb9c9bc356ca52e89256ab59059e13d0332" + integrity sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q== dependencies: bytes "3.1.0" http-errors "1.7.2" @@ -3441,6 +3836,7 @@ raw-body@2.4.0: "readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.6, readable-stream@~2.3.6: version "2.3.7" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" + integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== dependencies: core-util-is "~1.0.0" inherits "~2.0.3" @@ -3450,9 +3846,10 @@ raw-body@2.4.0: string_decoder "~1.1.1" util-deprecate "~1.0.1" -readable-stream@^3.0.6, readable-stream@^3.1.1, readable-stream@^3.4.0: +readable-stream@^3.0.6, readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0: version "3.6.0" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" + integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== dependencies: inherits "^2.0.3" string_decoder "^1.1.1" @@ -3461,14 +3858,23 @@ readable-stream@^3.0.6, readable-stream@^3.1.1, readable-stream@^3.4.0: readdirp@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525" + integrity sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ== dependencies: graceful-fs "^4.1.11" micromatch "^3.1.10" readable-stream "^2.0.2" +readdirp@~3.4.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.4.0.tgz#9fdccdf9e9155805449221ac645e8303ab5b9ada" + integrity sha512-0xe001vZBnJEK+uKcj8qOhyAKPzIT+gStxWr3LCB0DwcXR5NZJ3IaC+yGnHCYzB/S7ov3m3EEbZI2zeNvX+hGQ== + dependencies: + picomatch "^2.2.1" + regex-not@^1.0.0, regex-not@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" + integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A== dependencies: extend-shallow "^3.0.2" safe-regex "^1.1.0" @@ -3476,6 +3882,7 @@ regex-not@^1.0.0, regex-not@^1.0.2: regexp.prototype.flags@^1.2.0: version "1.3.0" resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz#7aba89b3c13a64509dabcf3ca8d9fbb9bdf5cb75" + integrity sha512-2+Q0C5g951OlYlJz6yu5/M33IcsESLlLfsyIaLJaG4FA2r4yP8MvVMJUUP/fVBkSpbbbZlS5gynbEWLipiiXiQ== dependencies: define-properties "^1.1.3" es-abstract "^1.17.0-next.1" @@ -3486,9 +3893,9 @@ regexpp@^2.0.1: integrity sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw== regexpp@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.0.0.tgz#dd63982ee3300e67b41c1956f850aa680d9d330e" - integrity sha512-Z+hNr7RAVWxznLPuA7DIh8UNX1j9CDrUQxskw9IrBE1Dxue2lyXT+shqEIeLUjrokxIP8CMy1WkjgG3rTsd5/g== + version "3.1.0" + resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.1.0.tgz#206d0ad0a5648cffbdb8ae46438f3dc51c9f78e2" + integrity sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q== relateurl@^0.2.7: version "0.2.7" @@ -3498,6 +3905,7 @@ relateurl@^0.2.7: remove-trailing-separator@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" + integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8= renderkid@^2.0.1: version "2.0.3" @@ -3513,36 +3921,39 @@ renderkid@^2.0.1: repeat-element@^1.1.2: version "1.1.3" resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce" + integrity sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g== repeat-string@^1.6.1: version "1.6.1" resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" + integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= require-directory@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" - -require-main-filename@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" + integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= require-main-filename@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" + integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== requires-port@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" + integrity sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8= resolve-cwd@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a" + integrity sha1-AKn3OHVW4nA46uIyyqNypqWbZlo= dependencies: resolve-from "^3.0.0" resolve-dir@^1.0.0, resolve-dir@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/resolve-dir/-/resolve-dir-1.0.1.tgz#79a40644c362be82f26effe739c9bb5382046f43" + integrity sha1-eaQGRMNivoLybv/nOcm7U4IEb0M= dependencies: expand-tilde "^2.0.0" global-modules "^1.0.0" @@ -3550,6 +3961,7 @@ resolve-dir@^1.0.0, resolve-dir@^1.0.1: resolve-from@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" + integrity sha1-six699nWiBvItuZTM17rywoYh0g= resolve-from@^4.0.0: version "4.0.0" @@ -3559,6 +3971,7 @@ resolve-from@^4.0.0: resolve-url@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" + integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= restore-cursor@^3.1.0: version "3.1.0" @@ -3571,10 +3984,12 @@ restore-cursor@^3.1.0: ret@~0.1.10: version "0.1.15" resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" + integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== retry@^0.12.0: version "0.12.0" resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" + integrity sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs= rimraf@2.6.3: version "2.6.3" @@ -3586,83 +4001,108 @@ rimraf@2.6.3: rimraf@^2.5.4, rimraf@^2.6.3: version "2.7.1" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" + integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== dependencies: glob "^7.1.3" ripemd160@^2.0.0, ripemd160@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" + integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA== dependencies: hash-base "^3.0.0" inherits "^2.0.1" run-async@^2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.0.tgz#e59054a5b86876cfae07f431d18cbaddc594f1e8" - integrity sha512-xJTbh/d7Lm7SBhc1tNvTpeCHaEzoyxPrqNlvSdMfBTYwaY++UJFyXUOxAtsRUXjlqOfj8luNaR9vjCh4KeV+pg== - dependencies: - is-promise "^2.1.0" + version "2.4.1" + resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" + integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== run-queue@^1.0.0, run-queue@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/run-queue/-/run-queue-1.0.3.tgz#e848396f057d223f24386924618e25694161ec47" + integrity sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec= dependencies: aproba "^1.1.1" -rxjs@^6.5.3: - version "6.5.5" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.5.5.tgz#c5c884e3094c8cfee31bf27eb87e54ccfc87f9ec" - integrity sha512-WfQI+1gohdf0Dai/Bbmk5L5ItH5tYqm3ki2c5GdWhKjalzjg93N3avFjVStyZZz+A2Em+ZxKH5bNghw9UeylGQ== +rxjs@^6.6.0: + version "6.6.0" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.0.tgz#af2901eedf02e3a83ffa7f886240ff9018bbec84" + integrity sha512-3HMA8z/Oz61DUHe+SdOiQyzIf4tOx5oQHmMir7IZEu6TMqCLHT4LRcmNaUS0NwOz8VLvmmBduMsoaUvMaIiqzg== dependencies: tslib "^1.9.0" safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.2" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== -safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@~5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.0.tgz#b74daec49b1148f88c64b68d49b1e815c1f2f519" +safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@~5.2.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== safe-regex@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" + integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4= dependencies: ret "~0.1.10" "safer-buffer@>= 2.1.2 < 3": version "2.1.2" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== schema-utils@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-1.0.0.tgz#0b79a93204d7b600d4b2850d1f66c2a34951c770" + integrity sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g== dependencies: ajv "^6.1.0" ajv-errors "^1.0.0" ajv-keywords "^3.1.0" +schema-utils@^2.7.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.7.0.tgz#17151f76d8eae67fbbf77960c33c676ad9f4efc7" + integrity sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A== + dependencies: + "@types/json-schema" "^7.0.4" + ajv "^6.12.2" + ajv-keywords "^3.4.1" + select-hose@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca" + integrity sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo= selfsigned@^1.10.7: version "1.10.7" resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-1.10.7.tgz#da5819fd049d5574f28e88a9bcc6dbc6e6f3906b" + integrity sha512-8M3wBCzeWIJnQfl43IKwOmC4H/RAp50S8DF60znzjW5GVqTcSe2vWclt7hmYVPkKPlHWOu5EaWOMZ2Y6W8ZXTA== dependencies: node-forge "0.9.0" semver@^5.5.0, semver@^5.6.0: version "5.7.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" + integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== semver@^6.0.0, semver@^6.1.2, semver@^6.3.0: version "6.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" + integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== + +semver@^7.3.2: + version "7.3.2" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938" + integrity sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ== send@0.17.1: version "0.17.1" resolved "https://registry.yarnpkg.com/send/-/send-0.17.1.tgz#c1d8b059f7900f7466dd4938bdc44e11ddb376c8" + integrity sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg== dependencies: debug "2.6.9" depd "~1.1.2" @@ -3678,13 +4118,17 @@ send@0.17.1: range-parser "~1.2.1" statuses "~1.5.0" -serialize-javascript@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-2.1.2.tgz#ecec53b0e0317bdc95ef76ab7074b7384785fa61" +serialize-javascript@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-3.1.0.tgz#8bf3a9170712664ef2561b44b691eafe399214ea" + integrity sha512-JIJT1DGiWmIKhzRsG91aS6Ze4sFUrYbltlkg2onR5OrnNM02Kl/hnY/T4FN2omvyeBbQmMJv+K4cPOpGzOTFBg== + dependencies: + randombytes "^2.1.0" serve-index@^1.9.1: version "1.9.1" resolved "https://registry.yarnpkg.com/serve-index/-/serve-index-1.9.1.tgz#d3768d69b1e7d82e5ce050fff5b453bea12a9239" + integrity sha1-03aNabHn2C5c4FD/9bRTvqEqkjk= dependencies: accepts "~1.3.4" batch "0.6.1" @@ -3697,6 +4141,7 @@ serve-index@^1.9.1: serve-static@1.14.1: version "1.14.1" resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.14.1.tgz#666e636dc4f010f7ef29970a88a674320898b2f9" + integrity sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg== dependencies: encodeurl "~1.0.2" escape-html "~1.0.3" @@ -3706,10 +4151,12 @@ serve-static@1.14.1: set-blocking@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" + integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= set-value@^2.0.0, set-value@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b" + integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw== dependencies: extend-shallow "^2.0.1" is-extendable "^0.1.1" @@ -3719,18 +4166,22 @@ set-value@^2.0.0, set-value@^2.0.1: setimmediate@^1.0.4: version "1.0.5" resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" + integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU= setprototypeof@1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" + integrity sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ== setprototypeof@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683" + integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw== sha.js@^2.4.0, sha.js@^2.4.8: version "2.4.11" resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" + integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== dependencies: inherits "^2.0.1" safe-buffer "^5.0.1" @@ -3738,21 +4189,24 @@ sha.js@^2.4.0, sha.js@^2.4.8: shebang-command@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" + integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= dependencies: shebang-regex "^1.0.0" shebang-regex@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" + integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= signal-exit@^3.0.0, signal-exit@^3.0.2: version "3.0.3" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" + integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== simple-peer@^9.6.2: - version "9.6.2" - resolved "https://registry.yarnpkg.com/simple-peer/-/simple-peer-9.6.2.tgz#42418e77cf8f9184e4fa22ef1017b195c2bf84d7" - integrity sha512-EOKoImCaqtNvXIntxT1CBBK/3pVi7tMAoJ3shdyd9qk3zLm3QPiRLb/sPC1G2xvKJkJc5fkQjCXqRZ0AknwTig== + version "9.7.2" + resolved "https://registry.yarnpkg.com/simple-peer/-/simple-peer-9.7.2.tgz#8cd9cb156bf456ad9c3d379119f0c39dfb3b20f7" + integrity sha512-xeMyxa9B4V0eA6mf17fVr8nm2QhAYFu+ZZv8zkSFFTjJETGF227CshwobrIYZuspJglMD63egcevQXGOrTIsuA== dependencies: debug "^4.0.1" get-browser-rtc "^1.0.0" @@ -3772,6 +4226,7 @@ slice-ansi@^2.1.0: snapdragon-node@^2.0.1: version "2.1.1" resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" + integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw== dependencies: define-property "^1.0.0" isobject "^3.0.0" @@ -3780,12 +4235,14 @@ snapdragon-node@^2.0.1: snapdragon-util@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" + integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ== dependencies: kind-of "^3.2.0" snapdragon@^0.8.1: version "0.8.2" resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" + integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg== dependencies: base "^0.11.1" debug "^2.2.0" @@ -3828,6 +4285,7 @@ socket.io-parser@~3.3.0: sockjs-client@1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/sockjs-client/-/sockjs-client-1.4.0.tgz#c9f2568e19c8fd8173b4997ea3420e0bb306c7d5" + integrity sha512-5zaLyO8/nri5cua0VtOrFXBPK1jbL4+1cebT/mmKA1E1ZXOvJrII75bPu0l0k843G/+iAbhEqzyKr0w/eCCj7g== dependencies: debug "^3.2.5" eventsource "^1.0.7" @@ -3836,20 +4294,24 @@ sockjs-client@1.4.0: json3 "^3.3.2" url-parse "^1.4.3" -sockjs@0.3.19: - version "0.3.19" - resolved "https://registry.yarnpkg.com/sockjs/-/sockjs-0.3.19.tgz#d976bbe800af7bd20ae08598d582393508993c0d" +sockjs@0.3.20: + version "0.3.20" + resolved "https://registry.yarnpkg.com/sockjs/-/sockjs-0.3.20.tgz#b26a283ec562ef8b2687b44033a4eeceac75d855" + integrity sha512-SpmVOVpdq0DJc0qArhF3E5xsxvaiqGNb73XfgBpK1y3UD5gs8DSo8aCTsuT5pX8rssdc2NDIzANwP9eCAiSdTA== dependencies: faye-websocket "^0.10.0" - uuid "^3.0.1" + uuid "^3.4.0" + websocket-driver "0.6.5" source-list-map@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34" + integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw== source-map-resolve@^0.5.0: version "0.5.3" resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a" + integrity sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw== dependencies: atob "^2.1.2" decode-uri-component "^0.2.0" @@ -3857,7 +4319,7 @@ source-map-resolve@^0.5.0: source-map-url "^0.4.0" urix "^0.1.0" -source-map-support@^0.5.17: +source-map-support@^0.5.17, source-map-support@~0.5.12: version "0.5.19" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61" integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw== @@ -3865,32 +4327,30 @@ source-map-support@^0.5.17: buffer-from "^1.0.0" source-map "^0.6.0" -source-map-support@~0.5.12: - version "0.5.16" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.16.tgz#0ae069e7fe3ba7538c64c98515e35339eac5a042" - dependencies: - buffer-from "^1.0.0" - source-map "^0.6.0" - source-map-url@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" - -source-map@0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.0.tgz#0fe96503ac86a5adb5de63f4e412ae4872cdbe86" + integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM= source-map@^0.5.6: version "0.5.7" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" + integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +source-map@^0.7.3: + version "0.7.3" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383" + integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== spdy-transport@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/spdy-transport/-/spdy-transport-3.0.0.tgz#00d4863a6400ad75df93361a1608605e5dcdcf31" + integrity sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw== dependencies: debug "^4.1.0" detect-node "^2.0.4" @@ -3899,9 +4359,10 @@ spdy-transport@^3.0.0: readable-stream "^3.0.6" wbuf "^1.7.3" -spdy@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/spdy/-/spdy-4.0.1.tgz#6f12ed1c5db7ea4f24ebb8b89ba58c87c08257f2" +spdy@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/spdy/-/spdy-4.0.2.tgz#b74f466203a3eda452c02492b91fb9e84a27677b" + integrity sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA== dependencies: debug "^4.1.0" handle-thing "^2.0.0" @@ -3912,6 +4373,7 @@ spdy@^4.0.1: split-string@^3.0.1, split-string@^3.0.2: version "3.1.0" resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" + integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw== dependencies: extend-shallow "^3.0.0" @@ -3923,12 +4385,14 @@ sprintf-js@~1.0.2: ssri@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/ssri/-/ssri-6.0.1.tgz#2a3c41b28dd45b62b63676ecb74001265ae9edd8" + integrity sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA== dependencies: figgy-pudding "^3.5.1" static-extend@^0.1.1: version "0.1.2" resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" + integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY= dependencies: define-property "^0.2.5" object-copy "^0.1.0" @@ -3936,10 +4400,12 @@ static-extend@^0.1.1: "statuses@>= 1.4.0 < 2", "statuses@>= 1.5.0 < 2", statuses@~1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" + integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= stream-browserify@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.2.tgz#87521d38a44aa7ee91ce1cd2a47df0cb49dd660b" + integrity sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg== dependencies: inherits "~2.0.1" readable-stream "^2.0.2" @@ -3947,6 +4413,7 @@ stream-browserify@^2.0.1: stream-each@^1.1.0: version "1.2.3" resolved "https://registry.yarnpkg.com/stream-each/-/stream-each-1.2.3.tgz#ebe27a0c389b04fbcc233642952e10731afa9bae" + integrity sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw== dependencies: end-of-stream "^1.1.0" stream-shift "^1.0.0" @@ -3954,6 +4421,7 @@ stream-each@^1.1.0: stream-http@^2.7.2: version "2.8.3" resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.8.3.tgz#b2d242469288a5a27ec4fe8933acf623de6514fc" + integrity sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw== dependencies: builtin-status-codes "^3.0.0" inherits "^2.0.1" @@ -3964,25 +4432,12 @@ stream-http@^2.7.2: stream-shift@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d" - -string-width@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" - dependencies: - code-point-at "^1.0.0" - is-fullwidth-code-point "^1.0.0" - strip-ansi "^3.0.0" - -string-width@^2.0.0, string-width@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" - dependencies: - is-fullwidth-code-point "^2.0.0" - strip-ansi "^4.0.0" + integrity sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ== string-width@^3.0.0, string-width@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" + integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== dependencies: emoji-regex "^7.0.1" is-fullwidth-code-point "^2.0.0" @@ -3997,32 +4452,18 @@ string-width@^4.1.0: is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.0" -string.prototype.trimend@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.0.tgz#ee497fd29768646d84be2c9b819e292439614373" +string.prototype.trimend@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz#85812a6b847ac002270f5808146064c995fb6913" + integrity sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g== dependencies: define-properties "^1.1.3" es-abstract "^1.17.5" -string.prototype.trimleft@^2.1.1: - version "2.1.2" - resolved "https://registry.yarnpkg.com/string.prototype.trimleft/-/string.prototype.trimleft-2.1.2.tgz#4408aa2e5d6ddd0c9a80739b087fbc067c03b3cc" - dependencies: - define-properties "^1.1.3" - es-abstract "^1.17.5" - string.prototype.trimstart "^1.0.0" - -string.prototype.trimright@^2.1.1: - version "2.1.2" - resolved "https://registry.yarnpkg.com/string.prototype.trimright/-/string.prototype.trimright-2.1.2.tgz#c76f1cef30f21bbad8afeb8db1511496cfb0f2a3" - dependencies: - define-properties "^1.1.3" - es-abstract "^1.17.5" - string.prototype.trimend "^1.0.0" - -string.prototype.trimstart@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.0.tgz#afe596a7ce9de905496919406c9734845f01a2f2" +string.prototype.trimstart@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz#14af6d9f34b053f7cfc89b72f8f2ee14b9039a54" + integrity sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw== dependencies: define-properties "^1.1.3" es-abstract "^1.17.5" @@ -4030,30 +4471,28 @@ string.prototype.trimstart@^1.0.0: string_decoder@^1.0.0, string_decoder@^1.1.1: version "1.3.0" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== dependencies: safe-buffer "~5.2.0" string_decoder@~1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== dependencies: safe-buffer "~5.1.0" strip-ansi@^3.0.0, strip-ansi@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" + integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= dependencies: ansi-regex "^2.0.0" -strip-ansi@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" - dependencies: - ansi-regex "^3.0.0" - strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" + integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== dependencies: ansi-regex "^4.1.0" @@ -4064,24 +4503,32 @@ strip-ansi@^6.0.0: dependencies: ansi-regex "^5.0.0" +strip-comments@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/strip-comments/-/strip-comments-2.0.1.tgz#4ad11c3fbcac177a67a40ac224ca339ca1c1ba9b" + integrity sha512-ZprKx+bBLXv067WTCALv8SSz5l2+XhpYCsVtSqlMnkAXMWDq+/ekVbl1ghqP9rUHTzv6sm/DwCOiYutU/yp1fw== + strip-eof@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" + integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= strip-json-comments@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.0.1.tgz#85713975a91fb87bf1b305cca77395e40d2a64a7" - integrity sha512-VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw== - -supports-color@6.1.0, supports-color@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3" - dependencies: - has-flag "^3.0.0" + version "3.1.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== supports-color@^5.3.0: version "5.5.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + +supports-color@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3" + integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ== dependencies: has-flag "^3.0.0" @@ -4105,33 +4552,27 @@ table@^5.2.3: tapable@^1.0.0, tapable@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" + integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== terser-webpack-plugin@^1.4.3: - version "1.4.3" - resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.4.3.tgz#5ecaf2dbdc5fb99745fd06791f46fc9ddb1c9a7c" + version "1.4.4" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.4.4.tgz#2c63544347324baafa9a56baaddf1634c8abfc2f" + integrity sha512-U4mACBHIegmfoEe5fdongHESNJWqsGU+W0S/9+BmYGVQDw1+c2Ow05TpMhxjPK1sRb7cuYq1BPl1e5YHJMTCqA== dependencies: cacache "^12.0.2" find-cache-dir "^2.1.0" is-wsl "^1.1.0" schema-utils "^1.0.0" - serialize-javascript "^2.1.2" + serialize-javascript "^3.1.0" source-map "^0.6.1" terser "^4.1.2" webpack-sources "^1.4.0" worker-farm "^1.7.0" -terser@^4.1.2: - version "4.6.10" - resolved "https://registry.yarnpkg.com/terser/-/terser-4.6.10.tgz#90f5bd069ff456ddbc9503b18e52f9c493d3b7c2" - dependencies: - commander "^2.20.0" - source-map "~0.6.1" - source-map-support "~0.5.12" - -terser@^4.6.3: - version "4.7.0" - resolved "https://registry.yarnpkg.com/terser/-/terser-4.7.0.tgz#15852cf1a08e3256a80428e865a2fa893ffba006" - integrity sha512-Lfb0RiZcjRDXCC3OSHJpEkxJ9Qeqs6mp2v4jf2MHfy8vGERmVDuvjXdd/EnP5Deme5F2yBRBymKmKHCBg2echw== +terser@^4.1.2, terser@^4.6.3: + version "4.8.0" + resolved "https://registry.yarnpkg.com/terser/-/terser-4.8.0.tgz#63056343d7c70bb29f3af665865a46fe03a0df17" + integrity sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw== dependencies: commander "^2.20.0" source-map "~0.6.1" @@ -4145,6 +4586,7 @@ text-table@^0.2.0: through2@^2.0.0: version "2.0.5" resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" + integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== dependencies: readable-stream "~2.3.6" xtend "~4.0.1" @@ -4157,10 +4599,12 @@ through@^2.3.6: thunky@^1.0.2: version "1.1.0" resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.1.0.tgz#5abaf714a9405db0504732bbccd2cedd9ef9537d" + integrity sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA== timers-browserify@^2.0.4: version "2.0.11" resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.11.tgz#800b1f3eee272e5bc53ee465a04d0e804c31211f" + integrity sha512-60aV6sgJ5YEbzUdn9c8kYGIqOubPoUdqQCul3SBAsRCZ40s6Y5cMcrW4dt3/k/EsbLVJNl9n6Vz3fTc+k2GeKQ== dependencies: setimmediate "^1.0.4" @@ -4179,16 +4623,19 @@ to-array@0.1.4: to-arraybuffer@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" + integrity sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M= to-object-path@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" + integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68= dependencies: kind-of "^3.0.2" to-regex-range@^2.1.0: version "2.1.1" resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" + integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg= dependencies: is-number "^3.0.0" repeat-string "^1.6.1" @@ -4196,12 +4643,14 @@ to-regex-range@^2.1.0: to-regex-range@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== dependencies: is-number "^7.0.0" to-regex@^3.0.1, to-regex@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" + integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw== dependencies: define-property "^2.0.2" extend-shallow "^3.0.2" @@ -4211,10 +4660,12 @@ to-regex@^3.0.1, to-regex@^3.0.2: toidentifier@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" + integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw== ts-loader@^6.2.2: version "6.2.2" resolved "https://registry.yarnpkg.com/ts-loader/-/ts-loader-6.2.2.tgz#dffa3879b01a1a1e0a4b85e2b8421dc0dfff1c58" + integrity sha512-HDo5kXZCBml3EUPcc7RlZOV/JGlLHwppTLEHb3SHnr5V7NXD4klMEkrhJe5wgRbaWsSXi+Y1SIBN/K9B6zWGWQ== dependencies: chalk "^2.3.0" enhanced-resolve "^4.0.0" @@ -4233,15 +4684,11 @@ ts-node@^8.10.2: source-map-support "^0.5.17" yn "3.1.1" -tslib@^1.10.0: +tslib@^1.10.0, tslib@^1.8.1, tslib@^1.9.0: version "1.13.0" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.13.0.tgz#c881e13cc7015894ed914862d276436fa9a47043" integrity sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q== -tslib@^1.8.1, tslib@^1.9.0: - version "1.11.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.11.1.tgz#eb15d128827fbee2841549e171f45ed338ac7e35" - tsutils@^3.17.1: version "3.17.1" resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.17.1.tgz#ed719917f11ca0dee586272b2ac49e015a2dd759" @@ -4252,6 +4699,7 @@ tsutils@^3.17.1: tty-browserify@0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6" + integrity sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY= type-check@~0.3.2: version "0.3.2" @@ -4273,6 +4721,7 @@ type-fest@^0.8.1: type-is@~1.6.17, type-is@~1.6.18: version "1.6.18" resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" + integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== dependencies: media-typer "0.3.0" mime-types "~2.1.24" @@ -4280,14 +4729,17 @@ type-is@~1.6.17, type-is@~1.6.18: typedarray@^0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" + integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= typescript@^3.8.3: - version "3.8.3" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.8.3.tgz#409eb8544ea0335711205869ec458ab109ee1061" + version "3.9.7" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.9.7.tgz#98d600a5ebdc38f40cb277522f12dc800e9e25fa" + integrity sha512-BLbiRkiBzAwsjut4x/dsibSTB6yWpwT5qWmC2OfuCg3GgVQCSgMs4vEctYPhsaGtd0AeuuHMkjZ2h2WG8MSzRw== union-value@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" + integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg== dependencies: arr-union "^3.1.0" get-value "^2.0.6" @@ -4297,22 +4749,26 @@ union-value@^1.0.0: unique-filename@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230" + integrity sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ== dependencies: unique-slug "^2.0.0" unique-slug@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.2.tgz#baabce91083fc64e945b0f3ad613e264f7cd4e6c" + integrity sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w== dependencies: imurmurhash "^0.1.4" unpipe@1.0.0, unpipe@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= unset-value@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" + integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk= dependencies: has-value "^0.3.1" isobject "^3.0.0" @@ -4320,20 +4776,24 @@ unset-value@^1.0.0: upath@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" + integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== uri-js@^4.2.2: version "4.2.2" resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" + integrity sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ== dependencies: punycode "^2.1.0" urix@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" + integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= url-parse@^1.4.3: version "1.4.7" resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.4.7.tgz#a8a83535e8c00a316e403a5db4ac1b9b853ae278" + integrity sha512-d3uaVyzDB9tQoSXFvuSUNFibTd9zxd2bkVrDRvF5TmvWWQwqE4lgYJ5m+x1DbecWkw+LK4RNl2CU1hHuOKPVlg== dependencies: querystringify "^2.1.1" requires-port "^1.0.0" @@ -4341,6 +4801,7 @@ url-parse@^1.4.3: url@^0.11.0: version "0.11.0" resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" + integrity sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE= dependencies: punycode "1.3.2" querystring "0.2.0" @@ -4348,10 +4809,12 @@ url@^0.11.0: use@^3.1.0: version "3.1.1" resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" + integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== util-deprecate@^1.0.1, util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= util.promisify@1.0.0: version "1.0.0" @@ -4364,18 +4827,21 @@ util.promisify@1.0.0: util@0.10.3: version "0.10.3" resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9" + integrity sha1-evsa/lCAUkZInj23/g7TeTNqwPk= dependencies: inherits "2.0.1" util@^0.10.3: version "0.10.4" resolved "https://registry.yarnpkg.com/util/-/util-0.10.4.tgz#3aa0125bfe668a4672de58857d3ace27ecb76901" + integrity sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A== dependencies: inherits "2.0.3" util@^0.11.0: version "0.11.1" resolved "https://registry.yarnpkg.com/util/-/util-0.11.1.tgz#3236733720ec64bb27f6e26f421aaa2e1b588d61" + integrity sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ== dependencies: inherits "2.0.3" @@ -4387,61 +4853,74 @@ utila@^0.4.0, utila@~0.4: utils-merge@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" + integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= -uuid@^3.0.1, uuid@^3.3.2: +uuid@^3.3.2, uuid@^3.4.0: version "3.4.0" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" + integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== -v8-compile-cache@2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.0.3.tgz#00f7494d2ae2b688cfe2899df6ed2c54bef91dbe" - -v8-compile-cache@^2.0.3: - version "2.1.0" - resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.1.0.tgz#e14de37b31a6d194f5690d67efc4e7f6fc6ab30e" - integrity sha512-usZBT3PW+LOjM25wbqIlZwPeJV+3OSz3M1k1Ws8snlW39dZyYL9lOGC5FgPVHfk0jKmjiDV8Z0mIbVQPiwFs7g== +v8-compile-cache@^2.0.3, v8-compile-cache@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.1.1.tgz#54bc3cdd43317bca91e35dcaf305b1a7237de745" + integrity sha512-8OQ9CL+VWyt3JStj7HX7/ciTL2V3Rl1Wf5OL+SNTm0yK1KvtReVulksyeRnCANHHuUxHlQig+JJDlUhBt1NQDQ== vary@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" + integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= vm-browserify@^1.0.1: version "1.1.2" resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0" + integrity sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ== -watchpack@^1.6.0: - version "1.6.1" - resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.6.1.tgz#280da0a8718592174010c078c7585a74cd8cd0e2" +watchpack-chokidar2@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/watchpack-chokidar2/-/watchpack-chokidar2-2.0.0.tgz#9948a1866cbbd6cb824dea13a7ed691f6c8ddff0" + integrity sha512-9TyfOyN/zLUbA288wZ8IsMZ+6cbzvsNyEzSBp6e/zkifi6xxbl8SmQ/CxQq32k8NNqrdVEVUVSEf56L4rQ/ZxA== dependencies: chokidar "^2.1.8" + +watchpack@^1.7.4: + version "1.7.4" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.7.4.tgz#6e9da53b3c80bb2d6508188f5b200410866cd30b" + integrity sha512-aWAgTW4MoSJzZPAicljkO1hsi1oKj/RRq/OJQh2PKI2UKL04c2Bs+MBOB+BBABHTXJpf9mCwHN7ANCvYsvY2sg== + dependencies: graceful-fs "^4.1.2" neo-async "^2.5.0" + optionalDependencies: + chokidar "^3.4.1" + watchpack-chokidar2 "^2.0.0" wbuf@^1.1.0, wbuf@^1.7.3: version "1.7.3" resolved "https://registry.yarnpkg.com/wbuf/-/wbuf-1.7.3.tgz#c1d8d149316d3ea852848895cb6a0bfe887b87df" + integrity sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA== dependencies: minimalistic-assert "^1.0.0" webpack-cli@^3.3.11: - version "3.3.11" - resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-3.3.11.tgz#3bf21889bf597b5d82c38f215135a411edfdc631" + version "3.3.12" + resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-3.3.12.tgz#94e9ada081453cd0aa609c99e500012fd3ad2d4a" + integrity sha512-NVWBaz9k839ZH/sinurM+HcDvJOTXwSjYp1ku+5XKeOC03z8v5QitnK/x+lAxGXFyhdayoIf/GOpv85z3/xPag== dependencies: - chalk "2.4.2" - cross-spawn "6.0.5" - enhanced-resolve "4.1.0" - findup-sync "3.0.0" - global-modules "2.0.0" - import-local "2.0.0" - interpret "1.2.0" - loader-utils "1.2.3" - supports-color "6.1.0" - v8-compile-cache "2.0.3" - yargs "13.2.4" + chalk "^2.4.2" + cross-spawn "^6.0.5" + enhanced-resolve "^4.1.1" + findup-sync "^3.0.0" + global-modules "^2.0.0" + import-local "^2.0.0" + interpret "^1.4.0" + loader-utils "^1.4.0" + supports-color "^6.1.0" + v8-compile-cache "^2.1.1" + yargs "^13.3.2" webpack-dev-middleware@^3.7.2: version "3.7.2" resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-3.7.2.tgz#0019c3db716e3fa5cecbf64f2ab88a74bab331f3" + integrity sha512-1xC42LxbYoqLNAhV6YzTYacicgMZQTqRd27Sim9wn5hJrX3I5nxYy1SxSd4+gjUFsz1dQFj+yEe6zEVmSkeJjw== dependencies: memory-fs "^0.4.1" mime "^2.4.4" @@ -4450,8 +4929,9 @@ webpack-dev-middleware@^3.7.2: webpack-log "^2.0.0" webpack-dev-server@^3.10.3: - version "3.10.3" - resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-3.10.3.tgz#f35945036813e57ef582c2420ef7b470e14d3af0" + version "3.11.0" + resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-3.11.0.tgz#8f154a3bce1bcfd1cc618ef4e703278855e7ff8c" + integrity sha512-PUxZ+oSTxogFQgkTtFndEtJIPNmml7ExwufBZ9L2/Xyyd5PnOL5UreWe5ZT7IU25DSdykL9p1MLQzmLh2ljSeg== dependencies: ansi-html "0.0.7" bonjour "^3.5.0" @@ -4461,35 +4941,36 @@ webpack-dev-server@^3.10.3: debug "^4.1.1" del "^4.1.1" express "^4.17.1" - html-entities "^1.2.1" + html-entities "^1.3.1" http-proxy-middleware "0.19.1" import-local "^2.0.0" internal-ip "^4.3.0" ip "^1.1.5" is-absolute-url "^3.0.3" killable "^1.0.1" - loglevel "^1.6.6" + loglevel "^1.6.8" opn "^5.5.0" p-retry "^3.0.1" - portfinder "^1.0.25" + portfinder "^1.0.26" schema-utils "^1.0.0" selfsigned "^1.10.7" semver "^6.3.0" serve-index "^1.9.1" - sockjs "0.3.19" + sockjs "0.3.20" sockjs-client "1.4.0" - spdy "^4.0.1" + spdy "^4.0.2" strip-ansi "^3.0.1" supports-color "^6.1.0" url "^0.11.0" webpack-dev-middleware "^3.7.2" webpack-log "^2.0.0" ws "^6.2.1" - yargs "12.0.5" + yargs "^13.3.2" webpack-log@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/webpack-log/-/webpack-log-2.0.0.tgz#5b7928e0637593f119d32f6227c1e0ac31e1b47f" + integrity sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg== dependencies: ansi-colors "^3.0.0" uuid "^3.3.2" @@ -4504,23 +4985,25 @@ webpack-merge@^4.2.2: webpack-sources@^1.4.0, webpack-sources@^1.4.1: version "1.4.3" resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.4.3.tgz#eedd8ec0b928fbf1cbfe994e22d2d890f330a933" + integrity sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ== dependencies: source-list-map "^2.0.0" source-map "~0.6.1" webpack@^4.42.1: - version "4.42.1" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.42.1.tgz#ae707baf091f5ca3ef9c38b884287cfe8f1983ef" + version "4.44.0" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.44.0.tgz#3b08f88a89470175f036f4a9496b8a0428668802" + integrity sha512-wAuJxK123sqAw31SpkPiPW3iKHgFUiKvO7E7UZjtdExcsRe3fgav4mvoMM7vvpjLHVoJ6a0Mtp2fzkoA13e0Zw== dependencies: "@webassemblyjs/ast" "1.9.0" "@webassemblyjs/helper-module-context" "1.9.0" "@webassemblyjs/wasm-edit" "1.9.0" "@webassemblyjs/wasm-parser" "1.9.0" - acorn "^6.2.1" + acorn "^6.4.1" ajv "^6.10.2" ajv-keywords "^3.4.1" chrome-trace-event "^1.0.2" - enhanced-resolve "^4.1.0" + enhanced-resolve "^4.3.0" eslint-scope "^4.0.3" json-parse-better-errors "^1.0.2" loader-runner "^2.4.0" @@ -4533,28 +5016,39 @@ webpack@^4.42.1: schema-utils "^1.0.0" tapable "^1.1.3" terser-webpack-plugin "^1.4.3" - watchpack "^1.6.0" + watchpack "^1.7.4" webpack-sources "^1.4.1" -websocket-driver@>=0.5.1: - version "0.7.3" - resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.3.tgz#a2d4e0d4f4f116f1e6297eba58b05d430100e9f9" +websocket-driver@0.6.5: + version "0.6.5" + resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.6.5.tgz#5cb2556ceb85f4373c6d8238aa691c8454e13a36" + integrity sha1-XLJVbOuF9Dc8bYI4qmkchFThOjY= dependencies: - http-parser-js ">=0.4.0 <0.4.11" + websocket-extensions ">=0.1.1" + +websocket-driver@>=0.5.1: + version "0.7.4" + resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.4.tgz#89ad5295bbf64b480abcba31e4953aca706f5760" + integrity sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg== + dependencies: + http-parser-js ">=0.5.1" safe-buffer ">=5.1.0" websocket-extensions ">=0.1.1" websocket-extensions@>=0.1.1: - version "0.1.3" - resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.3.tgz#5d2ff22977003ec687a4b87073dfbbac146ccf29" + version "0.1.4" + resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.4.tgz#7f8473bc839dfd87608adb95d7eb075211578a42" + integrity sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg== which-module@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" + integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= which@^1.2.14, which@^1.2.9, which@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" + integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== dependencies: isexe "^2.0.0" @@ -4566,19 +5060,14 @@ word-wrap@~1.2.3: worker-farm@^1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.7.0.tgz#26a94c5391bbca926152002f69b84a4bf772e5a8" + integrity sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw== dependencies: errno "~0.1.7" -wrap-ansi@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" - dependencies: - string-width "^1.0.1" - strip-ansi "^3.0.1" - wrap-ansi@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09" + integrity sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q== dependencies: ansi-styles "^3.2.0" string-width "^3.0.0" @@ -4587,6 +5076,7 @@ wrap-ansi@^5.1.0: wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= write@1.0.3: version "1.0.3" @@ -4598,6 +5088,7 @@ write@1.0.3: ws@^6.2.1: version "6.2.1" resolved "https://registry.yarnpkg.com/ws/-/ws-6.2.1.tgz#442fdf0a47ed64f59b6a5d8ff130f4748ed524fb" + integrity sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA== dependencies: async-limiter "~1.0.0" @@ -4616,61 +5107,41 @@ xmlhttprequest-ssl@~1.5.4: xtend@^4.0.0, xtend@~4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" + integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== -"y18n@^3.2.1 || ^4.0.0", y18n@^4.0.0: +y18n@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" + integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w== yallist@^3.0.2: version "3.1.1" resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" + integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== -yargs-parser@^11.1.1: - version "11.1.1" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-11.1.1.tgz#879a0865973bca9f6bab5cbdf3b1c67ec7d3bcf4" - dependencies: - camelcase "^5.0.0" - decamelize "^1.2.0" - -yargs-parser@^13.1.0: +yargs-parser@^13.1.2: version "13.1.2" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38" + integrity sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg== dependencies: camelcase "^5.0.0" decamelize "^1.2.0" -yargs@12.0.5: - version "12.0.5" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-12.0.5.tgz#05f5997b609647b64f66b81e3b4b10a368e7ad13" - dependencies: - cliui "^4.0.0" - decamelize "^1.2.0" - find-up "^3.0.0" - get-caller-file "^1.0.1" - os-locale "^3.0.0" - require-directory "^2.1.1" - require-main-filename "^1.0.1" - set-blocking "^2.0.0" - string-width "^2.0.0" - which-module "^2.0.0" - y18n "^3.2.1 || ^4.0.0" - yargs-parser "^11.1.1" - -yargs@13.2.4: - version "13.2.4" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.2.4.tgz#0b562b794016eb9651b98bd37acf364aa5d6dc83" +yargs@^13.3.2: + version "13.3.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.2.tgz#ad7ffefec1aa59565ac915f82dccb38a9c31a2dd" + integrity sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw== dependencies: cliui "^5.0.0" find-up "^3.0.0" get-caller-file "^2.0.1" - os-locale "^3.1.0" require-directory "^2.1.1" require-main-filename "^2.0.0" set-blocking "^2.0.0" string-width "^3.0.0" which-module "^2.0.0" y18n "^4.0.0" - yargs-parser "^13.1.0" + yargs-parser "^13.1.2" yeast@0.1.2: version "0.1.2" From bc929615d16b2a48eeb880d1f6ecc126917705ed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20N=C3=A9grier?= Date: Wed, 29 Jul 2020 11:40:05 +0200 Subject: [PATCH 074/313] Fixing problem when switching scenes with container --- front/src/Phaser/Entity/Character.ts | 7 +++++-- front/src/Phaser/Entity/body_character.ts | 14 ++++++++++++++ front/src/Phaser/Game/GameScene.ts | 3 +++ front/src/Phaser/Login/CustomizeScene.ts | 14 ++------------ 4 files changed, 24 insertions(+), 14 deletions(-) diff --git a/front/src/Phaser/Entity/Character.ts b/front/src/Phaser/Entity/Character.ts index c3c4def4..6edb0e36 100644 --- a/front/src/Phaser/Entity/Character.ts +++ b/front/src/Phaser/Entity/Character.ts @@ -62,6 +62,7 @@ export abstract class Character extends Container { for (const texture of textures) { const sprite = new Sprite(scene, 0, 0, texture, frame); + this.add(sprite); this.getPlayerAnimations(texture).forEach(d => { this.scene.anims.create({ key: d.key, @@ -70,9 +71,8 @@ export abstract class Character extends Container { repeat: d.repeat }); }) - this.add(sprite); + // Needed, otherwise, animations are not handled correctly. this.scene.sys.updateList.add(sprite); - this.scene.sys.displayList.add(sprite); this.sprites.set(texture, sprite); } @@ -212,6 +212,9 @@ export abstract class Character extends Container { if (this.scene) { this.scene.events.removeListener('postupdate', this.postupdate.bind(this)); } + for (const sprite of this.sprites.values()) { + this.scene.sys.updateList.remove(sprite); + } super.destroy(fromScene); this.playerName.destroy(); } diff --git a/front/src/Phaser/Entity/body_character.ts b/front/src/Phaser/Entity/body_character.ts index efa82c15..3d9d5a5f 100644 --- a/front/src/Phaser/Entity/body_character.ts +++ b/front/src/Phaser/Entity/body_character.ts @@ -1,3 +1,5 @@ +import LoaderPlugin = Phaser.Loader.LoaderPlugin; + export interface BodyResourceDescriptionInterface { name: string, img: string @@ -296,3 +298,15 @@ export const LAYERS: Array> = [ HATS_RESOURCES, ACCESSORIES_RESOURCES ]; + +export const loadAllLayers = (load: LoaderPlugin) => { + for (let j = 0; j < LAYERS.length; j++) { + for (let i = 0; i < LAYERS[j].length; i++) { + load.spritesheet( + LAYERS[j][i].name, + LAYERS[j][i].img, + {frameWidth: 32, frameHeight: 32} + ) + } + } +} diff --git a/front/src/Phaser/Game/GameScene.ts b/front/src/Phaser/Game/GameScene.ts index 8034bfbe..1a3cd9b7 100644 --- a/front/src/Phaser/Game/GameScene.ts +++ b/front/src/Phaser/Game/GameScene.ts @@ -28,6 +28,7 @@ import {SimplePeer} from "../../WebRtc/SimplePeer"; import {ReconnectingSceneName} from "../Reconnecting/ReconnectingScene"; import FILE_LOAD_ERROR = Phaser.Loader.Events.FILE_LOAD_ERROR; import {FourOFourSceneName} from "../Reconnecting/FourOFourScene"; +import {LAYERS, loadAllLayers} from "../Entity/body_character"; export enum Textures { @@ -158,6 +159,8 @@ export class GameScene extends Phaser.Scene { ); }); + loadAllLayers(this.load); + this.load.bitmapFont('main_font', 'resources/fonts/arcade.png', 'resources/fonts/arcade.xml'); this.connectionPromise = Connection.createConnection(gameManager.getPlayerName(), gameManager.getCharacterSelected()).then((connection : Connection) => { diff --git a/front/src/Phaser/Login/CustomizeScene.ts b/front/src/Phaser/Login/CustomizeScene.ts index 7a1dd12e..a4c4282f 100644 --- a/front/src/Phaser/Login/CustomizeScene.ts +++ b/front/src/Phaser/Login/CustomizeScene.ts @@ -2,7 +2,7 @@ import {EnableCameraSceneName} from "./EnableCameraScene"; import {TextField} from "../Components/TextField"; import Image = Phaser.GameObjects.Image; import Rectangle = Phaser.GameObjects.Rectangle; -import {LAYERS} from "../Entity/body_character"; +import {LAYERS, loadAllLayers} from "../Entity/body_character"; import Sprite = Phaser.GameObjects.Sprite; import Container = Phaser.GameObjects.Container; import {gameManager} from "../Game/GameManager"; @@ -50,15 +50,7 @@ export class CustomizeScene extends Phaser.Scene { this.load.bitmapFont(CustomizeTextures.mainFont, 'resources/fonts/arcade.png', 'resources/fonts/arcade.xml'); //load all the png files - for (let j = 0; j < LAYERS.length; j++) { - for (let i = 0; i < LAYERS[j].length; i++) { - this.load.spritesheet( - LAYERS[j][i].name, - LAYERS[j][i].img, - {frameWidth: 32, frameHeight: 32} - ) - } - } + loadAllLayers(this.load); } create() { @@ -105,14 +97,12 @@ export class CustomizeScene extends Phaser.Scene { const layers: string[] = []; let i = 0; for (const layerItem of this.selectedLayers) { - console.log(i, layerItem, LAYERS); if (layerItem !== undefined) { layers.push(LAYERS[i][layerItem].name); } i++; } - console.log(layers); gameManager.setCharacterLayers(layers); return this.scene.start(EnableCameraSceneName); From 24fb605f50c823ee8d9347d6c4dc8255d6bc6b7f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20N=C3=A9grier?= Date: Fri, 7 Aug 2020 23:39:06 +0200 Subject: [PATCH 075/313] Switching to definitely assigned parameters This allows us to go in "full strict mode" (yeah!) See https://www.typescriptlang.org/docs/handbook/release-notes/typescript-2-7.html#strict-class-initialization --- front/src/Phaser/Entity/RemotePlayer.ts | 2 -- front/src/Phaser/Game/GameManager.ts | 4 +-- front/src/Phaser/Game/GameScene.ts | 28 +++++++++---------- front/src/Phaser/Login/CustomizeScene.ts | 18 ++++++------ front/src/Phaser/Login/EnableCameraScene.ts | 22 +++++++-------- .../src/Phaser/Login/SelectCharacterScene.ts | 14 +++++----- front/src/Phaser/Player/Player.ts | 4 +-- .../src/Phaser/Reconnecting/FourOFourScene.ts | 12 ++++---- .../Phaser/Reconnecting/ReconnectingScene.ts | 5 ++-- front/tsconfig.json | 4 +-- 10 files changed, 55 insertions(+), 58 deletions(-) diff --git a/front/src/Phaser/Entity/RemotePlayer.ts b/front/src/Phaser/Entity/RemotePlayer.ts index 18785331..6764ff59 100644 --- a/front/src/Phaser/Entity/RemotePlayer.ts +++ b/front/src/Phaser/Entity/RemotePlayer.ts @@ -7,8 +7,6 @@ import {Character} from "../Entity/Character"; */ export class RemotePlayer extends Character { userId: string; - previousDirection: string; - wasMoving: boolean; constructor( userId: string, diff --git a/front/src/Phaser/Game/GameManager.ts b/front/src/Phaser/Game/GameManager.ts index 3dcf3474..db119a13 100644 --- a/front/src/Phaser/Game/GameManager.ts +++ b/front/src/Phaser/Game/GameManager.ts @@ -13,8 +13,8 @@ export interface HasMovedEvent { } export class GameManager { - private playerName: string; - private characterLayers: string[]; + private playerName!: string; + private characterLayers!: string[]; public setPlayerName(name: string): void { this.playerName = name; diff --git a/front/src/Phaser/Game/GameScene.ts b/front/src/Phaser/Game/GameScene.ts index 1a3cd9b7..487f3fb1 100644 --- a/front/src/Phaser/Game/GameScene.ts +++ b/front/src/Phaser/Game/GameScene.ts @@ -73,31 +73,31 @@ interface DeleteGroupEventInterface { export class GameScene extends Phaser.Scene { GameManager : GameManager; Terrains : Array; - CurrentPlayer: CurrentGamerInterface; - MapPlayers : Phaser.Physics.Arcade.Group; + CurrentPlayer!: CurrentGamerInterface; + MapPlayers!: Phaser.Physics.Arcade.Group; MapPlayersByKey : Map = new Map(); - Map: Phaser.Tilemaps.Tilemap; - Layers : Array; - Objects : Array; - mapFile: ITiledMap; + Map!: Phaser.Tilemaps.Tilemap; + Layers!: Array; + Objects!: Array; + mapFile!: ITiledMap; groups: Map; - startX: number; - startY: number; - circleTexture: CanvasTexture; + startX!: number; + startY!: number; + circleTexture!: CanvasTexture; pendingEvents: Queue = new Queue(); private initPosition: PositionInterface|null = null; private playersPositionInterpolator = new PlayersPositionInterpolator(); - private connection: Connection; - private simplePeer : SimplePeer; - private connectionPromise: Promise + private connection!: Connection; + private simplePeer!: SimplePeer; + private connectionPromise!: Promise MapKey: string; MapUrlFile: string; RoomId: string; instance: string; - currentTick: number; - lastSentTick: number; // The last tick at which a position was sent. + currentTick!: number; + lastSentTick!: number; // The last tick at which a position was sent. lastMoveEventSent: HasMovedEvent = { direction: '', moving: false, diff --git a/front/src/Phaser/Login/CustomizeScene.ts b/front/src/Phaser/Login/CustomizeScene.ts index a4c4282f..50834bd1 100644 --- a/front/src/Phaser/Login/CustomizeScene.ts +++ b/front/src/Phaser/Login/CustomizeScene.ts @@ -18,24 +18,24 @@ enum CustomizeTextures{ export class CustomizeScene extends Phaser.Scene { - private textField: TextField; - private enterField: TextField; + private textField!: TextField; + private enterField!: TextField; - private arrowRight: Image; - private arrowLeft: Image; + private arrowRight!: Image; + private arrowLeft!: Image; - private arrowDown: Image; - private arrowUp: Image; + private arrowDown!: Image; + private arrowUp!: Image; - private Rectangle: Rectangle; + private Rectangle!: Rectangle; - private logo: Image; + private logo!: Image; private selectedLayers: Array = [0]; private containersRow: Array> = new Array>(); private activeRow = 0; - private repositionCallback: (this: Window, ev: UIEvent) => void; + private repositionCallback!: (this: Window, ev: UIEvent) => void; constructor() { super({ diff --git a/front/src/Phaser/Login/EnableCameraScene.ts b/front/src/Phaser/Login/EnableCameraScene.ts index 6d96459e..7e631b6b 100644 --- a/front/src/Phaser/Login/EnableCameraScene.ts +++ b/front/src/Phaser/Login/EnableCameraScene.ts @@ -21,22 +21,22 @@ enum LoginTextures { } export class EnableCameraScene extends Phaser.Scene { - private textField: TextField; - private pressReturnField: TextField; - private cameraNameField: TextField; - private logo: Image; - private arrowLeft: Image; - private arrowRight: Image; - private arrowDown: Image; - private arrowUp: Image; + private textField!: TextField; + private pressReturnField!: TextField; + private cameraNameField!: TextField; + private logo!: Image; + private arrowLeft!: Image; + private arrowRight!: Image; + private arrowDown!: Image; + private arrowUp!: Image; private microphonesList: MediaDeviceInfo[] = new Array(); private camerasList: MediaDeviceInfo[] = new Array(); private cameraSelected: number = 0; private microphoneSelected: number = 0; private soundMeter: SoundMeter; - private soundMeterSprite: SoundMeterSprite; - private microphoneNameField: TextField; - private repositionCallback: (this: Window, ev: UIEvent) => void; + private soundMeterSprite!: SoundMeterSprite; + private microphoneNameField!: TextField; + private repositionCallback!: (this: Window, ev: UIEvent) => void; constructor() { super({ diff --git a/front/src/Phaser/Login/SelectCharacterScene.ts b/front/src/Phaser/Login/SelectCharacterScene.ts index 535529ee..64285766 100644 --- a/front/src/Phaser/Login/SelectCharacterScene.ts +++ b/front/src/Phaser/Login/SelectCharacterScene.ts @@ -21,16 +21,16 @@ enum LoginTextures { export class SelectCharacterScene extends Phaser.Scene { private readonly nbCharactersPerRow = 4; - private textField: TextField; - private pressReturnField: TextField; - private logo: Image; - private customizeButton: Image; - private customizeButtonSelected: Image; + private textField!: TextField; + private pressReturnField!: TextField; + private logo!: Image; + private customizeButton!: Image; + private customizeButtonSelected!: Image; - private selectedRectangle: Rectangle; + private selectedRectangle!: Rectangle; private selectedRectangleXPos = 0; // Number of the character selected in the rows private selectedRectangleYPos = 0; // Number of the character selected in the columns - private selectedPlayer: Phaser.Physics.Arcade.Sprite|null; // null if we are selecting the "customize" option + private selectedPlayer!: Phaser.Physics.Arcade.Sprite|null; // null if we are selecting the "customize" option private players: Array = new Array(); constructor() { diff --git a/front/src/Phaser/Player/Player.ts b/front/src/Phaser/Player/Player.ts index b9490c8d..cfd6cc6e 100644 --- a/front/src/Phaser/Player/Player.ts +++ b/front/src/Phaser/Player/Player.ts @@ -13,8 +13,8 @@ export interface CurrentGamerInterface extends Character{ export class Player extends Character implements CurrentGamerInterface { userInputManager: UserInputManager; - previousDirection: string; - wasMoving: boolean; + previousDirection: string = PlayerAnimationNames.WalkDown; + wasMoving: boolean = false; constructor( Scene: GameScene, diff --git a/front/src/Phaser/Reconnecting/FourOFourScene.ts b/front/src/Phaser/Reconnecting/FourOFourScene.ts index 8c71ae65..0c91a5bc 100644 --- a/front/src/Phaser/Reconnecting/FourOFourScene.ts +++ b/front/src/Phaser/Reconnecting/FourOFourScene.ts @@ -10,12 +10,12 @@ enum Textures { } export class FourOFourScene extends Phaser.Scene { - private mapNotFoundField: TextField; - private couldNotFindField: TextField; - private fileNameField: Text; - private logo: Image; - private cat: Sprite; - private file: string; + private mapNotFoundField!: TextField; + private couldNotFindField!: TextField; + private fileNameField!: Text; + private logo!: Image; + private cat!: Sprite; + private file!: string; constructor() { super({ diff --git a/front/src/Phaser/Reconnecting/ReconnectingScene.ts b/front/src/Phaser/Reconnecting/ReconnectingScene.ts index 7a377b66..07d2b858 100644 --- a/front/src/Phaser/Reconnecting/ReconnectingScene.ts +++ b/front/src/Phaser/Reconnecting/ReconnectingScene.ts @@ -9,9 +9,8 @@ enum ReconnectingTextures { } export class ReconnectingScene extends Phaser.Scene { - private reconnectingField: TextField; - private logo: Image; - private cat: Sprite; + private reconnectingField!: TextField; + private logo!: Image; constructor() { super({ diff --git a/front/tsconfig.json b/front/tsconfig.json index 1661efa2..e56a6ee7 100644 --- a/front/tsconfig.json +++ b/front/tsconfig.json @@ -10,12 +10,12 @@ "jsx": "react", "allowJs": true, - "strict": false, /* Enable all strict type-checking options. */ + "strict": true, /* Enable all strict type-checking options. */ "noImplicitAny": true, /* Raise error on expressions and declarations with an implied 'any' type. */ "strictNullChecks": true, /* Enable strict null checks. */ "strictFunctionTypes": true, /* Enable strict checking of function types. */ "strictBindCallApply": true, /* Enable strict 'bind', 'call', and 'apply' methods on functions. */ - "strictPropertyInitialization": false, /* Enable strict checking of property initialization in classes. */ + "strictPropertyInitialization": true, /* Enable strict checking of property initialization in classes. */ "noImplicitThis": true, /* Raise error on 'this' expressions with an implied 'any' type. */ "alwaysStrict": true, /* Parse in strict mode and emit "use strict" for each source file. */ From 7232bbaef9adedd5244ff5c88777dd73898dc017 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20N=C3=A9grier?= Date: Tue, 11 Aug 2020 22:32:55 +0200 Subject: [PATCH 076/313] Adding LayoutManager to position videos as cleverly as possible --- front/src/WebRtc/HtmlUtils.ts | 10 ++++ front/src/WebRtc/LayoutManager.ts | 94 +++++++++++++++++++++++++++++++ front/src/index.ts | 2 +- 3 files changed, 105 insertions(+), 1 deletion(-) create mode 100644 front/src/WebRtc/HtmlUtils.ts create mode 100644 front/src/WebRtc/LayoutManager.ts diff --git a/front/src/WebRtc/HtmlUtils.ts b/front/src/WebRtc/HtmlUtils.ts new file mode 100644 index 00000000..c2e6ff6d --- /dev/null +++ b/front/src/WebRtc/HtmlUtils.ts @@ -0,0 +1,10 @@ +export class HtmlUtils { + public static getElementByIdOrFail(id: string): T { + const elem = document.getElementById(id); + if (elem === null) { + throw new Error("Cannot find HTML element with id '"+id+"'"); + } + // FIXME: does not check the type of the returned type + return elem as T; + } +} diff --git a/front/src/WebRtc/LayoutManager.ts b/front/src/WebRtc/LayoutManager.ts new file mode 100644 index 00000000..cf986d0c --- /dev/null +++ b/front/src/WebRtc/LayoutManager.ts @@ -0,0 +1,94 @@ +import {HtmlUtils} from "./HtmlUtils"; + +export enum LayoutMode { + // All videos are displayed on the right side of the screen. If there is a screen sharing, it is displayed in the middle. + Presentation = "Presentation", + // Videos take the whole page. + VideoChat = "VideoChat", +} + +export enum DivImportance { + // For screen sharing + Important = "Important", + // For normal video + Normal = "Normal", +} + +/** + * This class is in charge of the video-conference layout. + * It receives positioning requests for videos and does its best to place them on the screen depending on the active layout mode. + */ +export class LayoutManager { + private mode: LayoutMode = LayoutMode.Presentation; + + private importantDivs: Map = new Map(); + private normalDivs: Map = new Map(); + + public add(importance: DivImportance, userId: string, html: string): void { + const div = document.createElement('div'); + div.append(html); + div.id = "user-"+userId; + + if (importance === DivImportance.Important) { + this.importantDivs.set(userId, div); + + // If this is the first video with high importance, let's switch mode automatically. + if (this.importantDivs.size === 1 && this.mode === LayoutMode.VideoChat) { + this.switchLayoutMode(LayoutMode.Presentation); + } + } else if (importance === DivImportance.Normal) { + this.normalDivs.set(userId, div); + } else { + throw new Error('Unexpected importance'); + } + + this.positionDiv(div, importance); + } + + private positionDiv(elem: HTMLDivElement, importance: DivImportance): void { + if (this.mode === LayoutMode.VideoChat) { + const chatModeDiv = HtmlUtils.getElementByIdOrFail('chat-mode'); + chatModeDiv.appendChild(elem); + } else { + if (importance === DivImportance.Important) { + const mainSectionDiv = HtmlUtils.getElementByIdOrFail('main-section'); + mainSectionDiv.appendChild(elem); + } else if (importance === DivImportance.Normal) { + const sideBarDiv = HtmlUtils.getElementByIdOrFail('sidebar'); + sideBarDiv.appendChild(elem); + } + } + } + + /** + * Removes the DIV matching userId. + */ + public remove(userId: string): void { + let div = this.importantDivs.get(userId); + if (div !== undefined) { + div.remove(); + this.importantDivs.delete(userId); + return; + } + + div = this.normalDivs.get(userId); + if (div !== undefined) { + div.remove(); + this.normalDivs.delete(userId); + return; + } + + throw new Error('Could not find user ID "'+userId+'"'); + } + + private switchLayoutMode(layoutMode: LayoutMode) { + this.mode = layoutMode; + + for (let div of this.importantDivs.values()) { + this.positionDiv(div, DivImportance.Important); + } + for (let div of this.normalDivs.values()) { + this.positionDiv(div, DivImportance.Normal); + } + } +} diff --git a/front/src/index.ts b/front/src/index.ts index 7634351f..d64a8f2e 100644 --- a/front/src/index.ts +++ b/front/src/index.ts @@ -11,7 +11,7 @@ import {FourOFourScene} from "./Phaser/Reconnecting/FourOFourScene"; import {CustomizeScene} from "./Phaser/Login/CustomizeScene"; const config: GameConfig = { - title: "Office game", + title: "WorkAdventure", width: window.innerWidth / RESOLUTION, height: window.innerHeight / RESOLUTION, parent: "game", From 83fe024c452f207b3c8154cb55fec07242066aa7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20N=C3=A9grier?= Date: Tue, 11 Aug 2020 22:40:54 +0200 Subject: [PATCH 077/313] Adjusting class in chat mode based on number of divs displayed. --- front/src/WebRtc/LayoutManager.ts | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/front/src/WebRtc/LayoutManager.ts b/front/src/WebRtc/LayoutManager.ts index cf986d0c..63a02356 100644 --- a/front/src/WebRtc/LayoutManager.ts +++ b/front/src/WebRtc/LayoutManager.ts @@ -43,6 +43,7 @@ export class LayoutManager { } this.positionDiv(div, importance); + this.adjustVideoChatClass(); } private positionDiv(elem: HTMLDivElement, importance: DivImportance): void { @@ -68,6 +69,7 @@ export class LayoutManager { if (div !== undefined) { div.remove(); this.importantDivs.delete(userId); + this.adjustVideoChatClass(); return; } @@ -75,12 +77,30 @@ export class LayoutManager { if (div !== undefined) { div.remove(); this.normalDivs.delete(userId); + this.adjustVideoChatClass(); return; } throw new Error('Could not find user ID "'+userId+'"'); } + private adjustVideoChatClass(): void { + const chatModeDiv = HtmlUtils.getElementByIdOrFail('chat-mode'); + chatModeDiv.classList.remove('one-col', 'two-col', 'three-col', 'four-col'); + + const nbUsers = this.importantDivs.size + this.normalDivs.size; + + if (nbUsers <= 1) { + chatModeDiv.classList.add('one-col'); + } else if (nbUsers <= 4) { + chatModeDiv.classList.add('two-col'); + } else if (nbUsers <= 9) { + chatModeDiv.classList.add('three-col'); + } else { + chatModeDiv.classList.add('four-col'); + } + } + private switchLayoutMode(layoutMode: LayoutMode) { this.mode = layoutMode; From 9f6c6e0ce18172b5c57c4a391bc4c275a55978ec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20N=C3=A9grier?= Date: Thu, 13 Aug 2020 18:21:48 +0200 Subject: [PATCH 078/313] Adding CoWebsiteManager + first working version of flex video --- front/dist/index.html | 52 ++++++- front/dist/resources/style/style.css | 196 ++++++++++++++++++++++----- front/src/WebRtc/CoWebsiteManager.ts | 56 ++++++++ front/src/WebRtc/LayoutManager.ts | 22 ++- front/src/WebRtc/MediaManager.ts | 31 ++++- front/src/index.ts | 20 ++- 6 files changed, 326 insertions(+), 51 deletions(-) create mode 100644 front/src/WebRtc/CoWebsiteManager.ts diff --git a/front/dist/index.html b/front/dist/index.html index a680c59a..92a7bf3c 100644 --- a/front/dist/index.html +++ b/front/dist/index.html @@ -39,7 +39,53 @@ WorkAdventure -

    +
    +
    +
    +
    + +
    + + + + +
    +
    + +
    +
    +
    + + +
    +
    + + +
    +
    +
    + +
    +
    +
    +
    +

    Z=4^VCLKhW?FPh3=uTkQ($#Tq^pR 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 literal 0 HcmV?d00001 diff --git a/doc/images/tiled_screenshot_1.png b/website/dist/docs/tiled_screenshot_1.png similarity index 100% rename from doc/images/tiled_screenshot_1.png rename to website/dist/docs/tiled_screenshot_1.png diff --git a/website/dist/docs/use_this_template.png b/website/dist/docs/use_this_template.png new file mode 100644 index 0000000000000000000000000000000000000000..6ed83ab9047089fa7b90e1beb078bcdff284c8d3 GIT binary patch literal 33179 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

    + -->
    diff --git a/front/dist/resources/style/style.css b/front/dist/resources/style/style.css index 5f0e1cab..45b61679 100644 --- a/front/dist/resources/style/style.css +++ b/front/dist/resources/style/style.css @@ -27,7 +27,7 @@ video{ -webkit-transform: scaleX(-1); transform: scaleX(-1); } -.webrtc{ +/*.webrtc{ display: none; position: absolute; right: 0px; @@ -36,21 +36,22 @@ video{ } .webrtc.active{ display: block; -} +}*/ -.webrtc, .activeCam{} -.activeCam .video-container{ - position: absolute; - height: 25%; +/*.webrtc, .activeCam{}*/ +/*.activeCam*/ .video-container{ + position: relative; + /*height: 25%; top: 10px; margin: 5px; right: -100px; - transition: all 0.2s ease; - border-color: black; + transition: all 0.2s ease;*/ + /*border-color: black; border-style: solid; - border-width: 0.2px; + border-width: 0.2px;*/ + background-color: #00000099; } -.activeCam .video-container i{ +/*.activeCam*/ .video-container i{ position: absolute; width: 100px; height: 65px; @@ -63,10 +64,10 @@ video{ font-size: 28px; color: white; } -.activeCam .video-container img.active{ +/*.activeCam*/ .video-container img.active{ display: block; } -.activeCam .video-container img{ +/*.activeCam*/ .video-container img{ position: absolute; display: none; width: 15px; @@ -78,34 +79,28 @@ video{ padding: 10px; z-index: 2; } -.activeCam .video-container video{ +/*.activeCam*/ .video-container video{ height: 100%; } -.webrtc:hover .activeCam .video-container{ +/*.webrtc:hover .activeCam .video-container{ right: 10px; -} -.activeCam .video-container#div-myCamVideo{ +}*/ +/*.activeCam*/ .video-container#div-myCamVideo{ border: none; } -.activeCam .video-container video#myCamVideo{ - width: 200px; - height: 113px; +/*.activeCam*/ + +#div-myCamVideo { + position: fixed; + right: 0; + bottom: 0; } -/*CSS size for 2 - 3 elements*/ -.activeCam .video-container:nth-child(1){ - /*this is for camera of user*/ - top: 75%; -} -.activeCam .video-container:nth-child(2){ - top: 0%; -} -.activeCam .video-container:nth-child(3){ - top: 25%; -} -.activeCam .video-container:nth-child(4) { - top: 50%; +video#myCamVideo{ + width: 15vw; + /*width: 200px;*/ + /*height: 113px;*/ } /*btn animation*/ @@ -122,7 +117,7 @@ video{ transition-timing-function: ease-in-out; bottom: 20px; } -.webrtc:hover .btn-cam-action div{ +#activeCam:hover .btn-cam-action div{ transform: translateY(0); } .btn-cam-action div:hover{ @@ -237,3 +232,138 @@ video{ .webrtcsetup.active{ display: block; } + + +/* New layout */ +body { + margin: 0; + height: 100vh; + width: 100vw; +} +.main-container { + height: 100vh; + width: 100vw; + display: flex; + align-items: stretch; +} + +@media (min-aspect-ratio: 1/1) { + .main-container { + flex-direction: row + } + + .game-overlay { + flex-direction: row + } + + .sidebar { + flex-direction: column + } +} +@media (max-aspect-ratio: 1/1) { + .main-container { + flex-direction: column + } + + .game-overlay { + flex-direction: column + } + + .sidebar { + flex-direction: row + } +} + +.game { + flex-basis: 100%; + position: relative; /* Position relative is needed for the game-overlay. */ +} + +/* A potentially shared website could appear in an iframe in the cowebsite space. */ +.cowebsite { + flex-basis: 100%; + transition: flex-basis 0.5s; +} + +/*.cowebsite:hover { + flex-basis: 100%; +}*/ + +.cowebsite iframe { + width: 100%; + height: 100%; +} + + +.game-overlay { + display: none; + position: absolute; + width: 100%; + height: 100%; + /* TODO: DO WE NEED FLEX HERE???? WE WANT A SIDEBAR OF EXACTLY 25% (note: flex useful for direction!!!) */ +} + +.game-overlay.active { + display: flex; +} + +.game-overlay video { + width: 100% +} + +.main-section { + flex: 0 0 75%; + display: flex; + justify-content: start; + /*align-items: flex-start;*/ + flex-wrap: wrap; +} + +.main-section div { + margin: 5%; + flex-basis: 90%; + /*flex-shrink: 2;*/ +} + +.sidebar { + flex: 0 0 25%; + display: flex; +} + +.sidebar > div { + height: 15%; + margin: 5%; +} + +.chat-mode { + display: flex; + width: 100%; + + flex-wrap: wrap; + + padding: 1%; +} + +.chat-mode div { + margin: 1%; +} + +.chat-mode.one-col div { + flex-basis: 98%; +} + +.chat-mode.two-col div { + flex-basis: 48%; +} + +.chat-mode.three-col div { + flex-basis: 31.333333%; +} + +.chat-mode.four-col div { + flex-basis: 23%; +} + +.chat-mode div:last-child { + flex-grow: 5; +} diff --git a/front/src/WebRtc/CoWebsiteManager.ts b/front/src/WebRtc/CoWebsiteManager.ts new file mode 100644 index 00000000..0150760c --- /dev/null +++ b/front/src/WebRtc/CoWebsiteManager.ts @@ -0,0 +1,56 @@ +import {HtmlUtils} from "./HtmlUtils"; + +export type CoWebsiteStateChangedCallback = () => void; + +export class CoWebsiteManager { + + private static observers = new Array(); + + public static loadCoWebsite(url: string): void { + const cowebsiteDiv = HtmlUtils.getElementByIdOrFail("cowebsite"); + cowebsiteDiv.innerHTML = ''; + + const iframe = document.createElement('iframe'); + iframe.id = 'cowebsite-iframe'; + iframe.src = url; + cowebsiteDiv.appendChild(iframe); + CoWebsiteManager.fire(); + } + + public static closeCoWebsite(): void { + const cowebsiteDiv = HtmlUtils.getElementByIdOrFail("cowebsite"); + cowebsiteDiv.innerHTML = ''; + CoWebsiteManager.fire(); + } + + public static getGameSize(): {width: number, height: number} { + const iframe = document.getElementById('cowebsite-iframe'); + if (iframe === null) { + return { + width: window.innerWidth, + height: window.innerHeight + } + } + if (window.innerWidth >= window.innerHeight) { + return { + width: window.innerWidth / 2, + height: window.innerHeight + } + } else { + return { + width: window.innerWidth, + height: window.innerHeight / 2 + } + } + } + + public static onStateChange(observer: CoWebsiteStateChangedCallback) { + CoWebsiteManager.observers.push(observer); + } + + private static fire(): void { + for (const callback of CoWebsiteManager.observers) { + callback(); + } + } +} diff --git a/front/src/WebRtc/LayoutManager.ts b/front/src/WebRtc/LayoutManager.ts index 63a02356..670e05bd 100644 --- a/front/src/WebRtc/LayoutManager.ts +++ b/front/src/WebRtc/LayoutManager.ts @@ -18,7 +18,7 @@ export enum DivImportance { * This class is in charge of the video-conference layout. * It receives positioning requests for videos and does its best to place them on the screen depending on the active layout mode. */ -export class LayoutManager { +class LayoutManager { private mode: LayoutMode = LayoutMode.Presentation; private importantDivs: Map = new Map(); @@ -26,7 +26,7 @@ export class LayoutManager { public add(importance: DivImportance, userId: string, html: string): void { const div = document.createElement('div'); - div.append(html); + div.innerHTML = html; div.id = "user-"+userId; if (importance === DivImportance.Important) { @@ -65,6 +65,7 @@ export class LayoutManager { * Removes the DIV matching userId. */ public remove(userId: string): void { + console.log('Removing video for userID '+userId+'.'); let div = this.importantDivs.get(userId); if (div !== undefined) { div.remove(); @@ -81,7 +82,8 @@ export class LayoutManager { return; } - throw new Error('Could not find user ID "'+userId+'"'); + console.log('Cannot remove userID '+userId+'. Already removed?'); + //throw new Error('Could not find user ID "'+userId+'"'); } private adjustVideoChatClass(): void { @@ -104,6 +106,16 @@ export class LayoutManager { private switchLayoutMode(layoutMode: LayoutMode) { this.mode = layoutMode; + if (layoutMode === LayoutMode.Presentation) { + HtmlUtils.getElementByIdOrFail('sidebar').style.display = 'block'; + HtmlUtils.getElementByIdOrFail('main-section').style.display = 'block'; + HtmlUtils.getElementByIdOrFail('chat-mode').style.display = 'none'; + } else { + HtmlUtils.getElementByIdOrFail('sidebar').style.display = 'none'; + HtmlUtils.getElementByIdOrFail('main-section').style.display = 'none'; + HtmlUtils.getElementByIdOrFail('chat-mode').style.display = 'block'; + } + for (let div of this.importantDivs.values()) { this.positionDiv(div, DivImportance.Important); } @@ -112,3 +124,7 @@ export class LayoutManager { } } } + +const layoutManager = new LayoutManager(); + +export { layoutManager }; diff --git a/front/src/WebRtc/MediaManager.ts b/front/src/WebRtc/MediaManager.ts index e69850a2..fb7c34f1 100644 --- a/front/src/WebRtc/MediaManager.ts +++ b/front/src/WebRtc/MediaManager.ts @@ -1,3 +1,5 @@ +import {DivImportance, layoutManager} from "./LayoutManager"; + const videoConstraint: boolean|MediaTrackConstraints = { width: { ideal: 1280 }, height: { ideal: 720 }, @@ -73,8 +75,8 @@ export class MediaManager { } activeVisio(){ - const webRtc = this.getElementByIdOrFail('webRtc'); - webRtc.classList.add('active'); + const gameOverlay = this.getElementByIdOrFail('game-overlay'); + gameOverlay.classList.add('active'); } enabledCamera() { @@ -184,10 +186,11 @@ export class MediaManager { */ addActiveVideo(userId : string, userName: string = ""){ this.webrtcInAudio.play(); - const elementRemoteVideo = this.getElementByIdOrFail("activeCam"); + + //const elementRemoteVideo = this.getElementByIdOrFail("activeCam"); userName = userName.toUpperCase(); const color = this.getColorByString(userName); - elementRemoteVideo.insertAdjacentHTML('beforeend', ` + /*elementRemoteVideo.insertAdjacentHTML('beforeend', `
    @@ -195,7 +198,20 @@ export class MediaManager {
    - `); + `);*/ + + const html = ` +
    +
    + + ${userName} + + +
    + `; + + layoutManager.add(DivImportance.Normal, userId, html); + this.remoteVideo.set(userId, this.getElementByIdOrFail(userId)); } @@ -274,11 +290,12 @@ export class MediaManager { * @param userId */ removeActiveVideo(userId : string){ - const element = document.getElementById(`div-${userId}`); + /*const element = document.getElementById(`div-${userId}`); if(!element){ return; } - element.remove(); + element.remove();*/ + layoutManager.remove(userId); this.remoteVideo.delete(userId); } diff --git a/front/src/index.ts b/front/src/index.ts index d64a8f2e..75ad0fe6 100644 --- a/front/src/index.ts +++ b/front/src/index.ts @@ -4,16 +4,21 @@ import {DEBUG_MODE, RESOLUTION} from "./Enum/EnvironmentVariable"; import {cypressAsserter} from "./Cypress/CypressAsserter"; import {LoginScene} from "./Phaser/Login/LoginScene"; import {ReconnectingScene} from "./Phaser/Reconnecting/ReconnectingScene"; -import {gameManager} from "./Phaser/Game/GameManager"; import {SelectCharacterScene} from "./Phaser/Login/SelectCharacterScene"; import {EnableCameraScene} from "./Phaser/Login/EnableCameraScene"; import {FourOFourScene} from "./Phaser/Reconnecting/FourOFourScene"; import {CustomizeScene} from "./Phaser/Login/CustomizeScene"; +import {HtmlUtils} from "./WebRtc/HtmlUtils"; +import {CoWebsiteManager} from "./WebRtc/CoWebsiteManager"; + +//CoWebsiteManager.loadCoWebsite('https://thecodingmachine.com'); + +const {width, height} = CoWebsiteManager.getGameSize(); const config: GameConfig = { title: "WorkAdventure", - width: window.innerWidth / RESOLUTION, - height: window.innerHeight / RESOLUTION, + width: width / RESOLUTION, + height: height / RESOLUTION, parent: "game", scene: [LoginScene, SelectCharacterScene, EnableCameraScene, ReconnectingScene, FourOFourScene, CustomizeScene], zoom: RESOLUTION, @@ -30,5 +35,12 @@ cypressAsserter.gameStarted(); const game = new Phaser.Game(config); window.addEventListener('resize', function (event) { - game.scale.resize(window.innerWidth / RESOLUTION, window.innerHeight / RESOLUTION); + const {width, height} = CoWebsiteManager.getGameSize(); + + game.scale.resize(width / RESOLUTION, height / RESOLUTION); +}); +CoWebsiteManager.onStateChange(() => { + const {width, height} = CoWebsiteManager.getGameSize(); + + game.scale.resize(width / RESOLUTION, height / RESOLUTION); }); From 0041e088a4289b2517326d8284bfcd5f83e8f21c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20N=C3=A9grier?= Date: Thu, 13 Aug 2020 18:28:22 +0200 Subject: [PATCH 079/313] Fixing position of self webcam in CoWebsite mode --- front/dist/resources/style/style.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/front/dist/resources/style/style.css b/front/dist/resources/style/style.css index 45b61679..9fe4c9ea 100644 --- a/front/dist/resources/style/style.css +++ b/front/dist/resources/style/style.css @@ -92,7 +92,7 @@ video{ /*.activeCam*/ #div-myCamVideo { - position: fixed; + position: absolute; right: 0; bottom: 0; } From 88c099fc1390ab9d2c9354caf9accb13f3c641fe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20N=C3=A9grier?= Date: Sun, 16 Aug 2020 23:19:04 +0200 Subject: [PATCH 080/313] Improving layout Fixing left-right switch on all cameras (except current player camera) --- front/dist/resources/style/style.css | 45 ++++++++++++++++------------ front/src/Phaser/Game/GameScene.ts | 41 +++++++++++++++---------- front/src/WebRtc/LayoutManager.ts | 6 +++- front/src/WebRtc/MediaManager.ts | 16 +++++----- 4 files changed, 63 insertions(+), 45 deletions(-) diff --git a/front/dist/resources/style/style.css b/front/dist/resources/style/style.css index 9fe4c9ea..8f188cca 100644 --- a/front/dist/resources/style/style.css +++ b/front/dist/resources/style/style.css @@ -23,10 +23,6 @@ body .message-info.info{ body .message-info.warning{ background: #ffa500d6; } -video{ - -webkit-transform: scaleX(-1); - transform: scaleX(-1); -} /*.webrtc{ display: none; position: absolute; @@ -99,10 +95,13 @@ video{ video#myCamVideo{ width: 15vw; + -webkit-transform: scaleX(-1); + transform: scaleX(-1); /*width: 200px;*/ /*height: 113px;*/ } + /*btn animation*/ .btn-cam-action div{ cursor: pointer; @@ -113,7 +112,7 @@ video#myCamVideo{ background: #666; box-shadow: 2px 2px 24px #444; border-radius: 48px; - transform: translateY(12vw); + transform: translateY(12vh); transition-timing-function: ease-in-out; bottom: 20px; } @@ -249,28 +248,37 @@ body { @media (min-aspect-ratio: 1/1) { .main-container { - flex-direction: row + flex-direction: row; } .game-overlay { - flex-direction: row + flex-direction: row; } .sidebar { - flex-direction: column + flex-direction: column; + } + + .sidebar > div { + height: 15%; } } @media (max-aspect-ratio: 1/1) { .main-container { - flex-direction: column + flex-direction: column; } .game-overlay { - flex-direction: column + flex-direction: column; } .sidebar { - flex-direction: row + flex-direction: row; + align-items: flex-end; + } + + .sidebar > div { + width: 15%; } } @@ -319,7 +327,7 @@ body { flex-wrap: wrap; } -.main-section div { +.main-section > div { margin: 5%; flex-basis: 90%; /*flex-shrink: 2;*/ @@ -331,8 +339,7 @@ body { } .sidebar > div { - height: 15%; - margin: 5%; + margin: 2%; } .chat-mode { @@ -348,22 +355,22 @@ body { margin: 1%; } -.chat-mode.one-col div { +.chat-mode.one-col > div { flex-basis: 98%; } -.chat-mode.two-col div { +.chat-mode.two-col > div { flex-basis: 48%; } -.chat-mode.three-col div { +.chat-mode.three-col > div { flex-basis: 31.333333%; } -.chat-mode.four-col div { +.chat-mode.four-col > div { flex-basis: 23%; } -.chat-mode div:last-child { +.chat-mode > div:last-child { flex-grow: 5; } diff --git a/front/src/Phaser/Game/GameScene.ts b/front/src/Phaser/Game/GameScene.ts index 487f3fb1..6505ad11 100644 --- a/front/src/Phaser/Game/GameScene.ts +++ b/front/src/Phaser/Game/GameScene.ts @@ -1,34 +1,33 @@ import {GameManager, gameManager, HasMovedEvent} from "./GameManager"; import { Connection, - GroupCreatedUpdatedMessageInterface, MessageUserJoined, + GroupCreatedUpdatedMessageInterface, + MessageUserJoined, MessageUserMovedInterface, - MessageUserPositionInterface, PointInterface, PositionInterface + MessageUserPositionInterface, + PointInterface, + PositionInterface } from "../../Connection"; import {CurrentGamerInterface, hasMovedEventName, Player} from "../Player/Player"; -import { DEBUG_MODE, ZOOM_LEVEL, POSITION_DELAY } from "../../Enum/EnvironmentVariable"; -import { - ITiledMap, - ITiledMapLayer, - ITiledMapLayerProperty, - ITiledTileSet -} from "../Map/ITiledMap"; +import {DEBUG_MODE, POSITION_DELAY, ZOOM_LEVEL} from "../../Enum/EnvironmentVariable"; +import {ITiledMap, ITiledMapLayer, ITiledMapLayerProperty, ITiledTileSet} from "../Map/ITiledMap"; import {PLAYER_RESOURCES, PlayerResourceDescriptionInterface} from "../Entity/Character"; -import Texture = Phaser.Textures.Texture; -import Sprite = Phaser.GameObjects.Sprite; -import CanvasTexture = Phaser.Textures.CanvasTexture; import {AddPlayerInterface} from "./AddPlayerInterface"; import {PlayerAnimationNames} from "../Player/Animation"; import {PlayerMovement} from "./PlayerMovement"; import {PlayersPositionInterpolator} from "./PlayersPositionInterpolator"; import {RemotePlayer} from "../Entity/RemotePlayer"; -import GameObject = Phaser.GameObjects.GameObject; -import { Queue } from 'queue-typescript'; +import {Queue} from 'queue-typescript'; import {SimplePeer} from "../../WebRtc/SimplePeer"; import {ReconnectingSceneName} from "../Reconnecting/ReconnectingScene"; -import FILE_LOAD_ERROR = Phaser.Loader.Events.FILE_LOAD_ERROR; import {FourOFourSceneName} from "../Reconnecting/FourOFourScene"; -import {LAYERS, loadAllLayers} from "../Entity/body_character"; +import {loadAllLayers} from "../Entity/body_character"; +import {layoutManager, LayoutMode} from "../../WebRtc/LayoutManager"; +import Texture = Phaser.Textures.Texture; +import Sprite = Phaser.GameObjects.Sprite; +import CanvasTexture = Phaser.Textures.CanvasTexture; +import GameObject = Phaser.GameObjects.GameObject; +import FILE_LOAD_ERROR = Phaser.Loader.Events.FILE_LOAD_ERROR; export enum Textures { @@ -364,6 +363,16 @@ export class GameScene extends Phaser.Scene { } }, 500); } + + // FIXME: change this to use the class for input + this.input.keyboard.on('keyup-' + 'M', function () { + const mode = layoutManager.getLayoutMode(); + if (mode === LayoutMode.Presentation) { + layoutManager.switchLayoutMode(LayoutMode.VideoChat); + } else { + layoutManager.switchLayoutMode(LayoutMode.Presentation); + } + }); } private getExitSceneUrl(layer: ITiledMapLayer): string|undefined { diff --git a/front/src/WebRtc/LayoutManager.ts b/front/src/WebRtc/LayoutManager.ts index 670e05bd..7e99d496 100644 --- a/front/src/WebRtc/LayoutManager.ts +++ b/front/src/WebRtc/LayoutManager.ts @@ -103,7 +103,7 @@ class LayoutManager { } } - private switchLayoutMode(layoutMode: LayoutMode) { + public switchLayoutMode(layoutMode: LayoutMode) { this.mode = layoutMode; if (layoutMode === LayoutMode.Presentation) { @@ -123,6 +123,10 @@ class LayoutManager { this.positionDiv(div, DivImportance.Normal); } } + + public getLayoutMode(): LayoutMode { + return this.mode; + } } const layoutManager = new LayoutManager(); diff --git a/front/src/WebRtc/MediaManager.ts b/front/src/WebRtc/MediaManager.ts index fb7c34f1..9804317b 100644 --- a/front/src/WebRtc/MediaManager.ts +++ b/front/src/WebRtc/MediaManager.ts @@ -204,7 +204,7 @@ export class MediaManager {
    - ${userName} + ${userName}
    @@ -248,11 +248,10 @@ export class MediaManager { if (element) { element.style.opacity = "0"; } - element = document.getElementById(`div-${userId}`); - if (!element) { - return; + element = document.getElementById(`name-${userId}`); + if (element) { + element.style.display = "block"; } - element.style.borderStyle = "solid"; } /** @@ -264,11 +263,10 @@ export class MediaManager { if(element){ element.style.opacity = "1"; } - element = document.getElementById(`div-${userId}`); - if(!element){ - return; + element = document.getElementById(`name-${userId}`); + if(element){ + element.style.display = "none"; } - element.style.borderStyle = "none"; } /** From 15097779454ae03493a706faa7b81feb79e93b01 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20N=C3=A9grier?= Date: Sun, 16 Aug 2020 23:45:03 +0200 Subject: [PATCH 081/313] Improving video CSS (work on overlay) --- front/dist/resources/style/style.css | 12 ++++++++++-- front/src/WebRtc/LayoutManager.ts | 1 + 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/front/dist/resources/style/style.css b/front/dist/resources/style/style.css index 8f188cca..d7a9a560 100644 --- a/front/dist/resources/style/style.css +++ b/front/dist/resources/style/style.css @@ -260,7 +260,7 @@ body { } .sidebar > div { - height: 15%; + max-height: 21%; } } @media (max-aspect-ratio: 1/1) { @@ -278,7 +278,7 @@ body { } .sidebar > div { - width: 15%; + max-width: 21%; } } @@ -342,6 +342,14 @@ body { margin: 2%; } +/* Let's make sure videos are vertically centered if they need to be cropped */ +.media-container { + display: flex; + justify-content: center; + flex-direction: column; + overflow: hidden; +} + .chat-mode { display: flex; width: 100%; diff --git a/front/src/WebRtc/LayoutManager.ts b/front/src/WebRtc/LayoutManager.ts index 7e99d496..98c20b4c 100644 --- a/front/src/WebRtc/LayoutManager.ts +++ b/front/src/WebRtc/LayoutManager.ts @@ -28,6 +28,7 @@ class LayoutManager { const div = document.createElement('div'); div.innerHTML = html; div.id = "user-"+userId; + div.className = "media-container" if (importance === DivImportance.Important) { this.importantDivs.set(userId, div); From 05ca8c813e727b86e172682f5656989695fe0c70 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20N=C3=A9grier?= Date: Sun, 16 Aug 2020 23:49:31 +0200 Subject: [PATCH 082/313] Fixing chat mode canceling flex display --- front/src/WebRtc/LayoutManager.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/front/src/WebRtc/LayoutManager.ts b/front/src/WebRtc/LayoutManager.ts index 98c20b4c..a0001693 100644 --- a/front/src/WebRtc/LayoutManager.ts +++ b/front/src/WebRtc/LayoutManager.ts @@ -108,13 +108,13 @@ class LayoutManager { this.mode = layoutMode; if (layoutMode === LayoutMode.Presentation) { - HtmlUtils.getElementByIdOrFail('sidebar').style.display = 'block'; - HtmlUtils.getElementByIdOrFail('main-section').style.display = 'block'; + HtmlUtils.getElementByIdOrFail('sidebar').style.display = 'flex'; + HtmlUtils.getElementByIdOrFail('main-section').style.display = 'flex'; HtmlUtils.getElementByIdOrFail('chat-mode').style.display = 'none'; } else { HtmlUtils.getElementByIdOrFail('sidebar').style.display = 'none'; HtmlUtils.getElementByIdOrFail('main-section').style.display = 'none'; - HtmlUtils.getElementByIdOrFail('chat-mode').style.display = 'block'; + HtmlUtils.getElementByIdOrFail('chat-mode').style.display = 'flex'; } for (let div of this.importantDivs.values()) { From 7fe2cc19c35209852b65a4d647ed473800b0cb34 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20N=C3=A9grier?= Date: Mon, 17 Aug 2020 15:20:03 +0200 Subject: [PATCH 083/313] Adding buttons to switch mode --- front/dist/resources/objects/layout_modes.png | Bin 0 -> 297 bytes front/dist/resources/style/style.css | 2 + front/src/Phaser/Game/GameScene.ts | 54 +++++++++++++++--- 3 files changed, 49 insertions(+), 7 deletions(-) create mode 100644 front/dist/resources/objects/layout_modes.png diff --git a/front/dist/resources/objects/layout_modes.png b/front/dist/resources/objects/layout_modes.png new file mode 100644 index 0000000000000000000000000000000000000000..abd9adaf5336965b6a87b6af603dae1d24d9c43b GIT binary patch literal 297 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=A3R+gLn`LHy>XDM*+7K#Vok-r zyX&M(QYJ3b&(APEv_@o)46C=d=2I)18U|UrhIKJlKFS4VyH+uzoc_*m^SeBgi`~tc zpa0G{p>ACq$H2%UkRW~FRJelBf%Oc3**Fv$7}A-4h|aM1e?7l}VLyk!O)iHNrV9+l z4%Uom4J-l<42)6?g?Ek%m^K_f%zoh^^NSCRB|jLfz;>Ox&)9Dm`4wnO{4aNnU$g4Y zZ2$kIrmB~L31sfy8Ef1aX6Dv1hcPaiw+ div { diff --git a/front/src/Phaser/Game/GameScene.ts b/front/src/Phaser/Game/GameScene.ts index 6505ad11..2ef7d630 100644 --- a/front/src/Phaser/Game/GameScene.ts +++ b/front/src/Phaser/Game/GameScene.ts @@ -106,6 +106,9 @@ export class GameScene extends Phaser.Scene { private PositionNextScene: Array> = new Array>(); private startLayerName: string|undefined; + private presentationModeSprite!: Sprite; + private chatModeSprite!: Sprite; + private repositionCallback!: (this: Window, ev: UIEvent) => void; static createFromUrl(mapUrlFile: string, instance: string, key: string|null = null): GameScene { const mapKey = GameScene.getMapKeyByUrl(mapUrlFile); @@ -158,6 +161,12 @@ export class GameScene extends Phaser.Scene { ); }); + this.load.spritesheet( + 'layout_modes', + 'resources/objects/layout_modes.png', + {frameWidth: 32, frameHeight: 32} + ); + loadAllLayers(this.load); this.load.bitmapFont('main_font', 'resources/fonts/arcade.png', 'resources/fonts/arcade.xml'); @@ -213,6 +222,7 @@ export class GameScene extends Phaser.Scene { this.scene.stop(this.scene.key); this.scene.remove(this.scene.key); + window.removeEventListener('resize', this.repositionCallback); }) // When connection is performed, let's connect SimplePeer @@ -364,15 +374,39 @@ export class GameScene extends Phaser.Scene { }, 500); } + // FIXME: handle display / hide based on number of cameras connected + this.presentationModeSprite = this.add.sprite(2, this.game.renderer.height - 2, 'layout_modes', 0); + this.presentationModeSprite.setScrollFactor(0, 0); + this.presentationModeSprite.setOrigin(0, 1); + this.presentationModeSprite.setInteractive(); + this.presentationModeSprite.on('pointerup', this.switchLayoutMode.bind(this)); + this.chatModeSprite = this.add.sprite(36, this.game.renderer.height - 2, 'layout_modes', 3); + this.chatModeSprite.setScrollFactor(0, 0); + this.chatModeSprite.setOrigin(0, 1); + this.chatModeSprite.setInteractive(); + this.chatModeSprite.on('pointerup', this.switchLayoutMode.bind(this)); + // FIXME: change this to use the class for input - this.input.keyboard.on('keyup-' + 'M', function () { - const mode = layoutManager.getLayoutMode(); - if (mode === LayoutMode.Presentation) { - layoutManager.switchLayoutMode(LayoutMode.VideoChat); - } else { - layoutManager.switchLayoutMode(LayoutMode.Presentation); - } + this.input.keyboard.on('keyup-' + 'M', () => { + this.switchLayoutMode(); }); + + this.repositionCallback = this.reposition.bind(this); + window.addEventListener('resize', this.repositionCallback); + this.reposition(); + } + + private switchLayoutMode(): void { + const mode = layoutManager.getLayoutMode(); + if (mode === LayoutMode.Presentation) { + layoutManager.switchLayoutMode(LayoutMode.VideoChat); + this.presentationModeSprite.setFrame(1); + this.chatModeSprite.setFrame(2); + } else { + layoutManager.switchLayoutMode(LayoutMode.Presentation); + this.presentationModeSprite.setFrame(0); + this.chatModeSprite.setFrame(3); + } } private getExitSceneUrl(layer: ITiledMapLayer): string|undefined { @@ -634,6 +668,7 @@ export class GameScene extends Phaser.Scene { this.simplePeer.unregister(); this.scene.stop(); this.scene.remove(this.scene.key); + window.removeEventListener('resize', this.repositionCallback); this.scene.start(nextSceneKey.key, { startLayerName: nextSceneKey.hash }); @@ -821,4 +856,9 @@ export class GameScene extends Phaser.Scene { const endPos = mapUrlStart.indexOf(".json"); return mapUrlStart.substring(startPos, endPos); } + + private reposition(): void { + this.presentationModeSprite.setY(this.game.renderer.height - 2); + this.chatModeSprite.setY(this.game.renderer.height - 2); + } } From 6516e621b04b08dce54788774fd296d6712bc32d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20N=C3=A9grier?= Date: Mon, 17 Aug 2020 16:12:53 +0200 Subject: [PATCH 084/313] Adding display / hide of layout buttons when a meet start / ends --- front/src/Phaser/Game/GameScene.ts | 22 ++++++++++++++++++---- front/src/WebRtc/SimplePeer.ts | 22 ++++++++++++++++++++++ 2 files changed, 40 insertions(+), 4 deletions(-) diff --git a/front/src/Phaser/Game/GameScene.ts b/front/src/Phaser/Game/GameScene.ts index 2ef7d630..c4517545 100644 --- a/front/src/Phaser/Game/GameScene.ts +++ b/front/src/Phaser/Game/GameScene.ts @@ -18,7 +18,7 @@ import {PlayerMovement} from "./PlayerMovement"; import {PlayersPositionInterpolator} from "./PlayersPositionInterpolator"; import {RemotePlayer} from "../Entity/RemotePlayer"; import {Queue} from 'queue-typescript'; -import {SimplePeer} from "../../WebRtc/SimplePeer"; +import {SimplePeer, UserSimplePeer} from "../../WebRtc/SimplePeer"; import {ReconnectingSceneName} from "../Reconnecting/ReconnectingScene"; import {FourOFourSceneName} from "../Reconnecting/FourOFourScene"; import {loadAllLayers} from "../Entity/body_character"; @@ -227,6 +227,19 @@ export class GameScene extends Phaser.Scene { // When connection is performed, let's connect SimplePeer this.simplePeer = new SimplePeer(this.connection); + const self = this; + this.simplePeer.registerPeerConnectionListener({ + onConnect(user: UserSimplePeer) { + self.presentationModeSprite.setVisible(true); + self.chatModeSprite.setVisible(true); + }, + onDisconnect(userId: string) { + if (self.simplePeer.getNbConnections() === 0) { + self.presentationModeSprite.setVisible(false); + self.chatModeSprite.setVisible(false); + } + } + }) this.scene.wake(); this.scene.sleep(ReconnectingSceneName); @@ -374,19 +387,20 @@ export class GameScene extends Phaser.Scene { }, 500); } - // FIXME: handle display / hide based on number of cameras connected this.presentationModeSprite = this.add.sprite(2, this.game.renderer.height - 2, 'layout_modes', 0); this.presentationModeSprite.setScrollFactor(0, 0); this.presentationModeSprite.setOrigin(0, 1); this.presentationModeSprite.setInteractive(); + this.presentationModeSprite.setVisible(false); this.presentationModeSprite.on('pointerup', this.switchLayoutMode.bind(this)); this.chatModeSprite = this.add.sprite(36, this.game.renderer.height - 2, 'layout_modes', 3); this.chatModeSprite.setScrollFactor(0, 0); this.chatModeSprite.setOrigin(0, 1); this.chatModeSprite.setInteractive(); + this.chatModeSprite.setVisible(false); this.chatModeSprite.on('pointerup', this.switchLayoutMode.bind(this)); - - // FIXME: change this to use the class for input + + // FIXME: change this to use the UserInputManager class for input this.input.keyboard.on('keyup-' + 'M', () => { this.switchLayoutMode(); }); diff --git a/front/src/WebRtc/SimplePeer.ts b/front/src/WebRtc/SimplePeer.ts index 553c9307..acb52059 100644 --- a/front/src/WebRtc/SimplePeer.ts +++ b/front/src/WebRtc/SimplePeer.ts @@ -14,6 +14,12 @@ export interface UserSimplePeer{ initiator?: boolean; } +export interface PeerConnectionListener { + onConnect(user: UserSimplePeer): void; + + onDisconnect(userId: string): void; +} + /** * This class manages connections to all the peers in the same group as me. */ @@ -24,6 +30,7 @@ export class SimplePeer { private PeerConnectionArray: Map = new Map(); private readonly updateLocalStreamCallback: (media: MediaStream) => void; + private readonly peerConnectionListeners: Array = new Array(); constructor(Connection: Connection, WebRtcRoomId: string = "test-webrtc") { this.Connection = Connection; @@ -34,6 +41,14 @@ export class SimplePeer { this.initialise(); } + public registerPeerConnectionListener(peerConnectionListener: PeerConnectionListener) { + this.peerConnectionListeners.push(peerConnectionListener); + } + + public getNbConnections(): number { + return this.PeerConnectionArray.size; + } + /** * permit to listen when user could start visio */ @@ -182,6 +197,10 @@ export class SimplePeer { }); this.addMedia(user.userId); + + for (let peerConnectionListener of this.peerConnectionListeners) { + peerConnectionListener.onConnect(user); + } } /** @@ -203,6 +222,9 @@ export class SimplePeer { peer.destroy(); this.PeerConnectionArray.delete(userId) //console.log('Nb users in peerConnectionArray '+this.PeerConnectionArray.size); + for (let peerConnectionListener of this.peerConnectionListeners) { + peerConnectionListener.onDisconnect(userId); + } } catch (err) { console.error("closeConnection", err) } From beb0d1ef0aaf0dffeba8bbacf35c73ea5762e00f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20N=C3=A9grier?= Date: Mon, 17 Aug 2020 16:18:39 +0200 Subject: [PATCH 085/313] Linter fix --- front/src/WebRtc/LayoutManager.ts | 4 ++-- front/src/WebRtc/SimplePeer.ts | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/front/src/WebRtc/LayoutManager.ts b/front/src/WebRtc/LayoutManager.ts index a0001693..6695fe7f 100644 --- a/front/src/WebRtc/LayoutManager.ts +++ b/front/src/WebRtc/LayoutManager.ts @@ -117,10 +117,10 @@ class LayoutManager { HtmlUtils.getElementByIdOrFail('chat-mode').style.display = 'flex'; } - for (let div of this.importantDivs.values()) { + for (const div of this.importantDivs.values()) { this.positionDiv(div, DivImportance.Important); } - for (let div of this.normalDivs.values()) { + for (const div of this.normalDivs.values()) { this.positionDiv(div, DivImportance.Normal); } } diff --git a/front/src/WebRtc/SimplePeer.ts b/front/src/WebRtc/SimplePeer.ts index acb52059..fdc2d0c2 100644 --- a/front/src/WebRtc/SimplePeer.ts +++ b/front/src/WebRtc/SimplePeer.ts @@ -198,7 +198,7 @@ export class SimplePeer { this.addMedia(user.userId); - for (let peerConnectionListener of this.peerConnectionListeners) { + for (const peerConnectionListener of this.peerConnectionListeners) { peerConnectionListener.onConnect(user); } } @@ -222,7 +222,7 @@ export class SimplePeer { peer.destroy(); this.PeerConnectionArray.delete(userId) //console.log('Nb users in peerConnectionArray '+this.PeerConnectionArray.size); - for (let peerConnectionListener of this.peerConnectionListeners) { + for (const peerConnectionListener of this.peerConnectionListeners) { peerConnectionListener.onDisconnect(userId); } } catch (err) { From 0f305b0c1224fb5792878e68412db80d103e8982 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20N=C3=A9grier?= Date: Mon, 17 Aug 2020 21:59:26 +0200 Subject: [PATCH 086/313] CSS cleanup --- front/dist/resources/style/style.css | 37 ++++++---------------------- 1 file changed, 7 insertions(+), 30 deletions(-) diff --git a/front/dist/resources/style/style.css b/front/dist/resources/style/style.css index b3d98539..30e099ef 100644 --- a/front/dist/resources/style/style.css +++ b/front/dist/resources/style/style.css @@ -23,31 +23,12 @@ body .message-info.info{ body .message-info.warning{ background: #ffa500d6; } -/*.webrtc{ - display: none; - position: absolute; - right: 0px; - height: 100%; - width: 300px; -} -.webrtc.active{ - display: block; -}*/ - -/*.webrtc, .activeCam{}*/ -/*.activeCam*/ .video-container{ +.video-container{ position: relative; - /*height: 25%; - top: 10px; - margin: 5px; - right: -100px; - transition: all 0.2s ease;*/ - /*border-color: black; - border-style: solid; - border-width: 0.2px;*/ + transition: all 0.2s ease; background-color: #00000099; } -/*.activeCam*/ .video-container i{ +.video-container i{ position: absolute; width: 100px; height: 65px; @@ -60,10 +41,10 @@ body .message-info.warning{ font-size: 28px; color: white; } -/*.activeCam*/ .video-container img.active{ +.video-container img.active{ display: block; } -/*.activeCam*/ .video-container img{ +.video-container img{ position: absolute; display: none; width: 15px; @@ -75,17 +56,13 @@ body .message-info.warning{ padding: 10px; z-index: 2; } -/*.activeCam*/ .video-container video{ +.video-container video{ height: 100%; } -/*.webrtc:hover .activeCam .video-container{ - right: 10px; -}*/ -/*.activeCam*/ .video-container#div-myCamVideo{ +.video-container#div-myCamVideo{ border: none; } -/*.activeCam*/ #div-myCamVideo { position: absolute; From fc78249eaeb53c1f00e13af77ea26a9b41693969 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20N=C3=A9grier?= Date: Mon, 17 Aug 2020 22:03:08 +0200 Subject: [PATCH 087/313] Code cleanup --- front/src/WebRtc/MediaManager.ts | 15 --------------- 1 file changed, 15 deletions(-) diff --git a/front/src/WebRtc/MediaManager.ts b/front/src/WebRtc/MediaManager.ts index 9804317b..39a61738 100644 --- a/front/src/WebRtc/MediaManager.ts +++ b/front/src/WebRtc/MediaManager.ts @@ -187,18 +187,8 @@ export class MediaManager { addActiveVideo(userId : string, userName: string = ""){ this.webrtcInAudio.play(); - //const elementRemoteVideo = this.getElementByIdOrFail("activeCam"); userName = userName.toUpperCase(); const color = this.getColorByString(userName); - /*elementRemoteVideo.insertAdjacentHTML('beforeend', ` -
    -
    - - ${userName} - - -
    - `);*/ const html = `
    @@ -288,11 +278,6 @@ export class MediaManager { * @param userId */ removeActiveVideo(userId : string){ - /*const element = document.getElementById(`div-${userId}`); - if(!element){ - return; - } - element.remove();*/ layoutManager.remove(userId); this.remoteVideo.delete(userId); } From 208b91e52a476869e6dca7b917ae976f6152f4d6 Mon Sep 17 00:00:00 2001 From: Gregoire Parant Date: Sat, 6 Jun 2020 17:03:10 +0200 Subject: [PATCH 088/313] Feature screen sharing - Send stream of screen sharing in peer connexion - Add button for share your screen --- front/dist/index.html | 11 +++ front/dist/resources/logos/monitor-close.svg | 44 ++++++++++++ front/dist/resources/logos/monitor.svg | 15 ++++ front/dist/resources/style/style.css | 4 ++ front/src/WebRtc/MediaManager.ts | 73 ++++++++++++++++++++ front/src/WebRtc/SimplePeer.ts | 58 ++++++++-------- 6 files changed, 174 insertions(+), 31 deletions(-) create mode 100644 front/dist/resources/logos/monitor-close.svg create mode 100644 front/dist/resources/logos/monitor.svg diff --git a/front/dist/index.html b/front/dist/index.html index 92a7bf3c..360d5a9a 100644 --- a/front/dist/index.html +++ b/front/dist/index.html @@ -77,6 +77,10 @@
    +
    + + +
    @@ -100,6 +104,13 @@ +
    + + +
    + --> diff --git a/front/dist/resources/logos/monitor-close.svg b/front/dist/resources/logos/monitor-close.svg new file mode 100644 index 00000000..80056e2d --- /dev/null +++ b/front/dist/resources/logos/monitor-close.svg @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/front/dist/resources/logos/monitor.svg b/front/dist/resources/logos/monitor.svg new file mode 100644 index 00000000..d4b586c6 --- /dev/null +++ b/front/dist/resources/logos/monitor.svg @@ -0,0 +1,15 @@ + + + + + + diff --git a/front/dist/resources/style/style.css b/front/dist/resources/style/style.css index 30e099ef..413bce71 100644 --- a/front/dist/resources/style/style.css +++ b/front/dist/resources/style/style.css @@ -109,6 +109,10 @@ video#myCamVideo{ transition: all .2s; right: 134px; } +.btn-monitor{ + transition: all .2s; + right: 224px; +} /*.btn-call{ transition: all .1s; left: 0px; diff --git a/front/src/WebRtc/MediaManager.ts b/front/src/WebRtc/MediaManager.ts index 39a61738..a11532ac 100644 --- a/front/src/WebRtc/MediaManager.ts +++ b/front/src/WebRtc/MediaManager.ts @@ -5,6 +5,9 @@ const videoConstraint: boolean|MediaTrackConstraints = { height: { ideal: 720 }, facingMode: "user" }; +interface MediaServiceInterface extends MediaDevices{ + getDisplayMedia(constrain: any) : Promise; +} type UpdatedLocalStreamCallback = (media: MediaStream) => void; @@ -12,10 +15,13 @@ type UpdatedLocalStreamCallback = (media: MediaStream) => void; // TODO: verify that microphone event listeners are not triggered plenty of time NOW (since MediaManager is created many times!!!!) export class MediaManager { localStream: MediaStream|null = null; + localScreenCapture: MediaStream|null = null; private remoteVideo: Map = new Map(); myCamVideo: HTMLVideoElement; cinemaClose: HTMLImageElement; cinema: HTMLImageElement; + monitorClose: HTMLImageElement; + monitor: HTMLImageElement; microphoneClose: HTMLImageElement; microphone: HTMLImageElement; webrtcInAudio: HTMLAudioElement; @@ -57,6 +63,21 @@ export class MediaManager { this.disabledCamera(); //update tracking }); + + this.monitorClose = document.getElementById('monitor-close'); + this.monitorClose.style.display = "block"; + this.monitorClose.addEventListener('click', (e: any) => { + e.preventDefault(); + this.enabledMonitor(); + //update tracking + }); + this.monitor = document.getElementById('monitor'); + this.monitor.style.display = "none"; + this.monitor.addEventListener('click', (e: any) => { + e.preventDefault(); + this.disabledMonitor(); + //update tracking + }); } onUpdateLocalStream(callback: UpdatedLocalStreamCallback): void { @@ -126,6 +147,58 @@ export class MediaManager { }); } + enabledMonitor() { + this.monitorClose.style.display = "none"; + this.monitor.style.display = "block"; + this.getScreenMedia().then((stream) => { + this.updatedLocalStreamCallBack(stream); + }); + } + + disabledMonitor() { + this.monitorClose.style.display = "block"; + this.monitor.style.display = "none"; + this.localScreenCapture?.getTracks().forEach((track: MediaStreamTrack) => { + track.stop(); + }); + this.localScreenCapture = null; + this.getCamera().then((stream) => { + this.updatedLocalStreamCallBack(stream); + }); + } + + //get screen + getScreenMedia() : Promise{ + try { + return this._startScreenCapture() + .then((stream: MediaStream) => { + this.localScreenCapture = stream; + return stream; + }) + .catch((err: any) => { + console.error("Error => getScreenMedia => " + err); + throw err; + }); + }catch (err) { + return new Promise((resolve, reject) => { // eslint-disable-line no-unused-vars + reject(err); + }); + } + } + + private _startScreenCapture() { + if ((navigator as any).getDisplayMedia) { + return (navigator as any).getDisplayMedia({video: true}); + } else if ((navigator.mediaDevices as any).getDisplayMedia) { + return (navigator.mediaDevices as any).getDisplayMedia({video: true}); + } else { + //return navigator.mediaDevices.getUserMedia(({video: {mediaSource: 'screen'}} as any)); + return new Promise((resolve, reject) => { // eslint-disable-line no-unused-vars + reject("error sharing screen"); + }); + } + } + //get camera async getCamera(): Promise { if (navigator.mediaDevices === undefined) { diff --git a/front/src/WebRtc/SimplePeer.ts b/front/src/WebRtc/SimplePeer.ts index fdc2d0c2..96f047b7 100644 --- a/front/src/WebRtc/SimplePeer.ts +++ b/front/src/WebRtc/SimplePeer.ts @@ -156,22 +156,11 @@ export class SimplePeer { videoActive = true; } }); - if(microphoneActive){ - mediaManager.enabledMicrophoneByUserId(user.userId); - }else{ - mediaManager.disabledMicrophoneByUserId(user.userId); - } - if(videoActive){ - mediaManager.enabledVideoByUserId(user.userId); - }else{ - mediaManager.disabledVideoByUserId(user.userId); - } this.stream(user.userId, stream); }); /*peer.on('track', (track: MediaStreamTrack, stream: MediaStream) => { - this.stream(user.userId, stream); });*/ peer.on('close', () => { @@ -190,9 +179,19 @@ export class SimplePeer { }); peer.on('data', (chunk: Buffer) => { - const data = JSON.parse(chunk.toString('utf8')); - if(data.type === "stream"){ - this.stream(user.userId, data.stream); + let constraint = JSON.parse(chunk.toString('utf8')); + + if (constraint.audio) { + mediaManager.enabledMicrophoneByUserId(user.userId); + } else { + mediaManager.disabledMicrophoneByUserId(user.userId); + } + + if (constraint.video) { + mediaManager.enabledVideoByUserId(user.userId); + } else { + this.stream(user.userId); + mediaManager.disabledVideoByUserId(user.userId); } }); @@ -279,7 +278,7 @@ export class SimplePeer { * @param userId * @param stream */ - private stream(userId : string, stream: MediaStream) { + private stream(userId : string, stream?: MediaStream) { if(!stream){ mediaManager.disabledVideoByUserId(userId); mediaManager.disabledMicrophoneByUserId(userId); @@ -294,24 +293,21 @@ export class SimplePeer { */ private addMedia (userId : string) { try { - const localStream: MediaStream|null = mediaManager.localStream; - const peer = this.PeerConnectionArray.get(userId); - if(localStream === null) { - //send fake signal - if(peer === undefined){ - return; - } - peer.write(new Buffer(JSON.stringify({ - type: "stream", - stream: null - }))); - return; - } + let localStream: MediaStream | null = mediaManager.localStream; + let localScreenCapture: MediaStream | null = mediaManager.localScreenCapture; + let peer = this.PeerConnectionArray.get(userId); if (peer === undefined) { - throw new Error('While adding media, cannot find user with ID '+userId); + throw new Error('While adding media, cannot find user with ID ' + userId); } - for (const track of localStream.getTracks()) { - peer.addTrack(track, localStream); + peer.write(new Buffer(JSON.stringify(mediaManager.constraintsMedia))); + if (localScreenCapture !== null) { + for (const track of localScreenCapture.getTracks()) { + peer.addTrack(track, localScreenCapture); + } + } else if (localStream) { + for (const track of localStream.getTracks()) { + peer.addTrack(track, localStream); + } } }catch (e) { console.error(`addMedia => addMedia => ${userId}`, e); From eed5333d693d57183f0895d81109b1c21fdeba1f Mon Sep 17 00:00:00 2001 From: Gregoire Parant Date: Sat, 6 Jun 2020 19:52:34 +0200 Subject: [PATCH 089/313] Stability simple peer --- front/src/WebRtc/SimplePeer.ts | 25 ++++++++++++++++++------- 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/front/src/WebRtc/SimplePeer.ts b/front/src/WebRtc/SimplePeer.ts index 96f047b7..78dc41f9 100644 --- a/front/src/WebRtc/SimplePeer.ts +++ b/front/src/WebRtc/SimplePeer.ts @@ -180,14 +180,13 @@ export class SimplePeer { peer.on('data', (chunk: Buffer) => { let constraint = JSON.parse(chunk.toString('utf8')); - if (constraint.audio) { mediaManager.enabledMicrophoneByUserId(user.userId); } else { mediaManager.disabledMicrophoneByUserId(user.userId); } - if (constraint.video) { + if (constraint.video || constraint.screen) { mediaManager.enabledVideoByUserId(user.userId); } else { this.stream(user.userId); @@ -295,18 +294,30 @@ export class SimplePeer { try { let localStream: MediaStream | null = mediaManager.localStream; let localScreenCapture: MediaStream | null = mediaManager.localScreenCapture; - let peer = this.PeerConnectionArray.get(userId); - if (peer === undefined) { + let PeerConnection : any = this.PeerConnectionArray.get(userId); + if (PeerConnection === undefined) { throw new Error('While adding media, cannot find user with ID ' + userId); } - peer.write(new Buffer(JSON.stringify(mediaManager.constraintsMedia))); + PeerConnection.write(new Buffer(JSON.stringify(Object.assign(mediaManager.constraintsMedia, {screen: localScreenCapture !== null})))); + + //remove current stream + try { + if (PeerConnection._pc) { + PeerConnection._pc.getRemoteStreams().forEach((stream: MediaStream) => { + stream.getTracks().forEach((track: MediaStreamTrack) => { + PeerConnection.removeTrack(track, stream); + }); + }); + } + }catch (e) {} + if (localScreenCapture !== null) { for (const track of localScreenCapture.getTracks()) { - peer.addTrack(track, localScreenCapture); + PeerConnection.addTrack(track, localScreenCapture); } } else if (localStream) { for (const track of localStream.getTracks()) { - peer.addTrack(track, localStream); + PeerConnection.addTrack(track, localStream); } } }catch (e) { From 6c1b8122ef739b5be04deaf773331ae932e13264 Mon Sep 17 00:00:00 2001 From: Gregoire Parant Date: Sat, 6 Jun 2020 20:13:30 +0200 Subject: [PATCH 090/313] Fix CI --- front/src/WebRtc/SimplePeer.ts | 16 +++------------- 1 file changed, 3 insertions(+), 13 deletions(-) diff --git a/front/src/WebRtc/SimplePeer.ts b/front/src/WebRtc/SimplePeer.ts index 78dc41f9..825bc612 100644 --- a/front/src/WebRtc/SimplePeer.ts +++ b/front/src/WebRtc/SimplePeer.ts @@ -294,23 +294,13 @@ export class SimplePeer { try { let localStream: MediaStream | null = mediaManager.localStream; let localScreenCapture: MediaStream | null = mediaManager.localScreenCapture; - let PeerConnection : any = this.PeerConnectionArray.get(userId); - if (PeerConnection === undefined) { + let PeerConnection = this.PeerConnectionArray.get(userId); + + if (!PeerConnection || PeerConnection === undefined) { throw new Error('While adding media, cannot find user with ID ' + userId); } PeerConnection.write(new Buffer(JSON.stringify(Object.assign(mediaManager.constraintsMedia, {screen: localScreenCapture !== null})))); - //remove current stream - try { - if (PeerConnection._pc) { - PeerConnection._pc.getRemoteStreams().forEach((stream: MediaStream) => { - stream.getTracks().forEach((track: MediaStreamTrack) => { - PeerConnection.removeTrack(track, stream); - }); - }); - } - }catch (e) {} - if (localScreenCapture !== null) { for (const track of localScreenCapture.getTracks()) { PeerConnection.addTrack(track, localScreenCapture); From 209057e3fc1a5823f9db68e9b7e9e05a2e96fdf4 Mon Sep 17 00:00:00 2001 From: Gregoire Parant Date: Mon, 8 Jun 2020 09:20:36 +0200 Subject: [PATCH 091/313] New fictive user screen sharing - Create new fictive user - Add new fictive user in WebRtc group - Add screen sharing video on left side --- front/src/Connection.ts | 4 +- front/src/WebRtc/MediaManager.ts | 29 ++++++++++++-- front/src/WebRtc/SimplePeer.ts | 67 ++++++++++++++++++++++++-------- 3 files changed, 79 insertions(+), 21 deletions(-) diff --git a/front/src/Connection.ts b/front/src/Connection.ts index 04715df6..69121837 100644 --- a/front/src/Connection.ts +++ b/front/src/Connection.ts @@ -6,7 +6,7 @@ import {SetPlayerDetailsMessage} from "./Messages/SetPlayerDetailsMessage"; const SocketIo = require('socket.io-client'); import Socket = SocketIOClient.Socket; import {PlayerAnimationNames} from "./Phaser/Player/Animation"; -import {UserSimplePeer} from "./WebRtc/SimplePeer"; +import {UserSimplePeerInterface} from "./WebRtc/SimplePeer"; import {SignalData} from "simple-peer"; @@ -72,7 +72,7 @@ export interface GroupCreatedUpdatedMessageInterface { export interface WebRtcStartMessageInterface { roomId: string, - clients: UserSimplePeer[] + clients: UserSimplePeerInterface[] } export interface WebRtcDisconnectMessageInterface { diff --git a/front/src/WebRtc/MediaManager.ts b/front/src/WebRtc/MediaManager.ts index a11532ac..cfe4843a 100644 --- a/front/src/WebRtc/MediaManager.ts +++ b/front/src/WebRtc/MediaManager.ts @@ -1,3 +1,4 @@ +import * as SimplePeerNamespace from "simple-peer"; import {DivImportance, layoutManager} from "./LayoutManager"; const videoConstraint: boolean|MediaTrackConstraints = { @@ -30,8 +31,12 @@ export class MediaManager { video: videoConstraint }; updatedLocalStreamCallBacks : Set = new Set(); + // TODO: updatedScreenSharingCallBack should have same signature as updatedLocalStreamCallBacks + updatedScreenSharingCallBack : Function; + + constructor(updatedScreenSharingCallBack : Function) { + this.updatedScreenSharingCallBack = updatedScreenSharingCallBack; - constructor() { this.myCamVideo = this.getElementByIdOrFail('myCamVideo'); this.webrtcInAudio = this.getElementByIdOrFail('audio-webrtc-in'); this.webrtcInAudio.volume = 0.2; @@ -151,7 +156,7 @@ export class MediaManager { this.monitorClose.style.display = "none"; this.monitor.style.display = "block"; this.getScreenMedia().then((stream) => { - this.updatedLocalStreamCallBack(stream); + this.updatedScreenSharingCallBack(stream); }); } @@ -163,7 +168,7 @@ export class MediaManager { }); this.localScreenCapture = null; this.getCamera().then((stream) => { - this.updatedLocalStreamCallBack(stream); + this.updatedScreenSharingCallBack(stream); }); } @@ -278,6 +283,24 @@ export class MediaManager { this.remoteVideo.set(userId, this.getElementByIdOrFail(userId)); } + /** + * + * @param userId + */ + addScreenSharingActiveVideo(userId : string, userName: string = ""){ + this.webrtcInAudio.play(); + // FIXME: switch to DisplayManager! + let elementRemoteVideo = this.getElementByIdOrFail("activeScreenSharing"); + userName = userName.toUpperCase(); + let color = this.getColorByString(userName); + elementRemoteVideo.insertAdjacentHTML('beforeend', ` +
    + +
    + `); + this.remoteVideo.set(userId, document.getElementById(userId)); + } + /** * * @param userId diff --git a/front/src/WebRtc/SimplePeer.ts b/front/src/WebRtc/SimplePeer.ts index 825bc612..6d39444e 100644 --- a/front/src/WebRtc/SimplePeer.ts +++ b/front/src/WebRtc/SimplePeer.ts @@ -8,7 +8,7 @@ import { mediaManager } from "./MediaManager"; import * as SimplePeerNamespace from "simple-peer"; const Peer: SimplePeerNamespace.SimplePeer = require('simple-peer'); -export interface UserSimplePeer{ +export interface UserSimplePeerInterface{ userId: string; name?: string; initiator?: boolean; @@ -26,10 +26,11 @@ export interface PeerConnectionListener { export class SimplePeer { private Connection: Connection; private WebRtcRoomId: string; - private Users: Array = new Array(); + private Users: Array = new Array(); private PeerConnectionArray: Map = new Map(); private readonly updateLocalStreamCallback: (media: MediaStream) => void; + private readonly updateScreenSharingCallback: (media: MediaStream) => void; private readonly peerConnectionListeners: Array = new Array(); constructor(Connection: Connection, WebRtcRoomId: string = "test-webrtc") { @@ -37,7 +38,9 @@ export class SimplePeer { this.WebRtcRoomId = WebRtcRoomId; // We need to go through this weird bound function pointer in order to be able to "free" this reference later. this.updateLocalStreamCallback = this.updatedLocalStream.bind(this); + this.updateScreenSharingCallback = this.updatedScreenSharing.bind(this); mediaManager.onUpdateLocalStream(this.updateLocalStreamCallback); + mediaManager.onUpdateScreenSharing(this.updateScreenSharingCallback); this.initialise(); } @@ -93,7 +96,7 @@ export class SimplePeer { * server has two people connected, start the meet */ private startWebRtc() { - this.Users.forEach((user: UserSimplePeer) => { + this.Users.forEach((user: UserSimplePeerInterface) => { //if it's not an initiator, peer connection will be created when gamer will receive offer signal if(!user.initiator){ return; @@ -105,22 +108,24 @@ export class SimplePeer { /** * create peer connection to bind users */ - private createPeerConnection(user : UserSimplePeer) { + private createPeerConnection(user : UserSimplePeerInterface) : SimplePeerNamespace.Instance | null{ if(this.PeerConnectionArray.has(user.userId)) { - return; + return null; } - //console.log("Creating connection with peer "+user.userId); - let name = user.name; if(!name){ - const userSearch = this.Users.find((userSearch: UserSimplePeer) => userSearch.userId === user.userId); + const userSearch = this.Users.find((userSearch: UserSimplePeerInterface) => userSearch.userId === user.userId); if(userSearch) { name = userSearch.name; } } - mediaManager.removeActiveVideo(user.userId); - mediaManager.addActiveVideo(user.userId, name); + + let screenSharing : boolean = name !== undefined && name.indexOf("screenSharing") > -1; + if(!screenSharing) { + mediaManager.removeActiveVideo(user.userId); + mediaManager.addActiveVideo(user.userId, name); + } const peer : SimplePeerNamespace.Instance = new Peer({ initiator: user.initiator ? user.initiator : false, @@ -146,6 +151,11 @@ export class SimplePeer { }); peer.on('stream', (stream: MediaStream) => { + if(screenSharing){ + //add stream video on + return; + } + let videoActive = false; let microphoneActive = false; stream.getTracks().forEach((track : MediaStreamTrack) => { @@ -199,6 +209,7 @@ export class SimplePeer { for (const peerConnectionListener of this.peerConnectionListeners) { peerConnectionListener.onConnect(user); } + return peer; } /** @@ -301,11 +312,10 @@ export class SimplePeer { } PeerConnection.write(new Buffer(JSON.stringify(Object.assign(mediaManager.constraintsMedia, {screen: localScreenCapture !== null})))); - if (localScreenCapture !== null) { - for (const track of localScreenCapture.getTracks()) { - PeerConnection.addTrack(track, localScreenCapture); - } - } else if (localStream) { + if(!localStream){ + return; + } + if (localStream) { for (const track of localStream.getTracks()) { PeerConnection.addTrack(track, localStream); } @@ -316,8 +326,33 @@ export class SimplePeer { } updatedLocalStream(){ - this.Users.forEach((user: UserSimplePeer) => { + this.Users.forEach((user: UserSimplePeerInterface) => { this.addMedia(user.userId); }) } + + updatedScreenSharing() { + if (this.MediaManager.localScreenCapture) { + let screenSharingUser: UserSimplePeerInterface = { + userId: `screenSharing-${this.Connection.userId}`, + initiator: true + }; + let PeerConnectionScreenSharing = this.createPeerConnection(screenSharingUser); + if (!PeerConnectionScreenSharing) { + return; + } + for (const track of this.MediaManager.localScreenCapture.getTracks()) { + PeerConnectionScreenSharing.addTrack(track, this.MediaManager.localScreenCapture); + } + } else { + if (!this.PeerConnectionArray.has(`screenSharing-${this.Connection.userId}`)) { + return; + } + let PeerConnectionScreenSharing = this.PeerConnectionArray.get(`screenSharing-${this.Connection.userId}`); + if (!PeerConnectionScreenSharing) { + return; + } + PeerConnectionScreenSharing.destroy(); + } + } } From 3e2c5049f2e633ce6357da46df629d379e9b3da6 Mon Sep 17 00:00:00 2001 From: Gregoire Parant Date: Mon, 8 Jun 2020 09:36:07 +0200 Subject: [PATCH 092/313] Fix to add special screen sharing --- front/src/WebRtc/MediaManager.ts | 6 +++++- front/src/WebRtc/SimplePeer.ts | 20 +++----------------- 2 files changed, 8 insertions(+), 18 deletions(-) diff --git a/front/src/WebRtc/MediaManager.ts b/front/src/WebRtc/MediaManager.ts index cfe4843a..4341c52e 100644 --- a/front/src/WebRtc/MediaManager.ts +++ b/front/src/WebRtc/MediaManager.ts @@ -298,7 +298,11 @@ export class MediaManager { `); - this.remoteVideo.set(userId, document.getElementById(userId)); + let activeHTMLVideoElement : HTMLElement|null = document.getElementById(userId); + if(!activeHTMLVideoElement){ + return; + } + this.remoteVideo.set(userId, (activeHTMLVideoElement as HTMLVideoElement)); } /** diff --git a/front/src/WebRtc/SimplePeer.ts b/front/src/WebRtc/SimplePeer.ts index 6d39444e..f24cc31d 100644 --- a/front/src/WebRtc/SimplePeer.ts +++ b/front/src/WebRtc/SimplePeer.ts @@ -122,9 +122,11 @@ export class SimplePeer { } let screenSharing : boolean = name !== undefined && name.indexOf("screenSharing") > -1; + mediaManager.removeActiveVideo(user.userId); if(!screenSharing) { - mediaManager.removeActiveVideo(user.userId); mediaManager.addActiveVideo(user.userId, name); + }else{ + mediaManager.addScreenSharingActiveVideo(user.userId, name); } const peer : SimplePeerNamespace.Instance = new Peer({ @@ -151,22 +153,6 @@ export class SimplePeer { }); peer.on('stream', (stream: MediaStream) => { - if(screenSharing){ - //add stream video on - return; - } - - let videoActive = false; - let microphoneActive = false; - stream.getTracks().forEach((track : MediaStreamTrack) => { - if(track.kind === "audio"){ - microphoneActive = true; - } - if(track.kind === "video"){ - videoActive = true; - } - }); - this.stream(user.userId, stream); }); From 0bbed7717a57f317a1f9efde5173f8bada37034f Mon Sep 17 00:00:00 2001 From: Gregoire Parant Date: Mon, 8 Jun 2020 22:52:25 +0200 Subject: [PATCH 093/313] Continue screen sharing --- front/dist/index.html | 5 ++--- front/dist/resources/style/style.css | 30 ++++++++++++++++++++++++++++ front/src/WebRtc/SimplePeer.ts | 28 +++++++++++++++++++------- 3 files changed, 53 insertions(+), 10 deletions(-) diff --git a/front/dist/index.html b/front/dist/index.html index 360d5a9a..02ec0205 100644 --- a/front/dist/index.html +++ b/front/dist/index.html @@ -108,12 +108,11 @@ - --> +
    +
    diff --git a/front/dist/resources/style/style.css b/front/dist/resources/style/style.css index 413bce71..d0dc2cd4 100644 --- a/front/dist/resources/style/style.css +++ b/front/dist/resources/style/style.css @@ -365,3 +365,33 @@ body { .chat-mode > div:last-child { flex-grow: 5; } + +/*SCREEN SHARING*/ +.active-screen-sharing video{ + transform: scaleX(1); +} +.active-screen-sharing .screen-sharing-video-container video:hover{ + width: 50%; +} +.active-screen-sharing .screen-sharing-video-container video{ + position: absolute; + width: 25%; + height: auto; + left: 0; + top: 0; + transition: all 0.2s ease; +} + +.active-screen-sharing .screen-sharing-video-container video:nth-child(1){ + /*this is for camera of user*/ + top: 0%; +} +.active-screen-sharing .screen-sharing-video-container video:nth-child(2){ + top: 25%; +} +.active-screen-sharing .screen-sharing-video-container video:nth-child(3){ + top: 50%; +} +.active-screen-sharing .screen-sharing-video-container video:nth-child(4) { + top: 75%; +} diff --git a/front/src/WebRtc/SimplePeer.ts b/front/src/WebRtc/SimplePeer.ts index f24cc31d..6f5fd69a 100644 --- a/front/src/WebRtc/SimplePeer.ts +++ b/front/src/WebRtc/SimplePeer.ts @@ -289,14 +289,22 @@ export class SimplePeer { */ private addMedia (userId : string) { try { - let localStream: MediaStream | null = mediaManager.localStream; - let localScreenCapture: MediaStream | null = mediaManager.localScreenCapture; let PeerConnection = this.PeerConnectionArray.get(userId); - - if (!PeerConnection || PeerConnection === undefined) { + if (!PeerConnection) { throw new Error('While adding media, cannot find user with ID ' + userId); } - PeerConnection.write(new Buffer(JSON.stringify(Object.assign(mediaManager.constraintsMedia, {screen: localScreenCapture !== null})))); + + if(userId.indexOf("screenSharing") > -1 && mediaManager.localScreenCapture){ + for (const track of mediaManager.localScreenCapture.getTracks()) { + PeerConnection.addTrack(track, mediaManager.localScreenCapture); + } + return; + } + + let localStream: MediaStream | null = mediaManager.localStream; + let localScreenCapture: MediaStream | null = mediaManager.localScreenCapture; + + PeerConnection.write(new Buffer(JSON.stringify(Object.assign(this.MediaManager.constraintsMedia, {screen: localScreenCapture !== null})))); if(!localStream){ return; @@ -321,15 +329,21 @@ export class SimplePeer { if (this.MediaManager.localScreenCapture) { let screenSharingUser: UserSimplePeerInterface = { userId: `screenSharing-${this.Connection.userId}`, + name: 'screenSharing', initiator: true }; let PeerConnectionScreenSharing = this.createPeerConnection(screenSharingUser); if (!PeerConnectionScreenSharing) { return; } - for (const track of this.MediaManager.localScreenCapture.getTracks()) { - PeerConnectionScreenSharing.addTrack(track, this.MediaManager.localScreenCapture); + try { + for (const track of this.MediaManager.localScreenCapture.getTracks()) { + PeerConnectionScreenSharing.addTrack(track, this.MediaManager.localScreenCapture); + } + }catch (e) { + console.error("updatedScreenSharing => ", e); } + this.MediaManager.addStreamRemoteVideo(screenSharingUser.userId, this.MediaManager.localScreenCapture); } else { if (!this.PeerConnectionArray.has(`screenSharing-${this.Connection.userId}`)) { return; From a4f42111d7543a0bb87bcdc18ca0c4126b62ba48 Mon Sep 17 00:00:00 2001 From: Gregoire Parant Date: Thu, 11 Jun 2020 23:18:06 +0200 Subject: [PATCH 094/313] Update screen sharing feature --- back/src/Controller/IoSocketController.ts | 33 +++-- front/src/Connection.ts | 28 ++++- front/src/WebRtc/MediaManager.ts | 14 ++- front/src/WebRtc/SimplePeer.ts | 140 +++++++++++++++++----- 4 files changed, 171 insertions(+), 44 deletions(-) diff --git a/back/src/Controller/IoSocketController.ts b/back/src/Controller/IoSocketController.ts index 28dd2da2..2f99f1e6 100644 --- a/back/src/Controller/IoSocketController.ts +++ b/back/src/Controller/IoSocketController.ts @@ -28,6 +28,7 @@ enum SockerIoEvent { USER_MOVED = "user-moved", // From server to client USER_LEFT = "user-left", // From server to client WEBRTC_SIGNAL = "webrtc-signal", + WEBRTC_SCREEN_SHARING_SIGNAL = "webrtc-screen-sharing-signal", WEBRTC_START = "webrtc-start", WEBRTC_DISCONNECT = "webrtc-disconect", MESSAGE_ERROR = "message-error", @@ -226,18 +227,11 @@ export class IoSocketController { }); socket.on(SockerIoEvent.WEBRTC_SIGNAL, (data: unknown) => { - if (!isWebRtcSignalMessageInterface(data)) { - socket.emit(SockerIoEvent.MESSAGE_ERROR, {message: 'Invalid WEBRTC_SIGNAL message.'}); - console.warn('Invalid WEBRTC_SIGNAL message received: ', data); - return; - } - //send only at user - const client = this.sockets.get(data.receiverId); - if (client === undefined) { - console.warn("While exchanging a WebRTC signal: client with id ", data.receiverId, " does not exist. This might be a race condition."); - return; - } - return client.emit(SockerIoEvent.WEBRTC_SIGNAL, data); + this.emit((socket as ExSocketInterface), data, SockerIoEvent.WEBRTC_SIGNAL); + }); + + socket.on(SockerIoEvent.WEBRTC_SCREEN_SHARING_SIGNAL, (data: unknown) => { + this.emit((socket as ExSocketInterface), data, SockerIoEvent.WEBRTC_SCREEN_SHARING_SIGNAL); }); socket.on(SockerIoEvent.DISCONNECT, () => { @@ -284,6 +278,21 @@ export class IoSocketController { }); } + emit(socket: ExSocketInterface, data: unknown, event: SockerIoEvent){ + if (!isWebRtcSignalMessageInterface(data)) { + socket.emit(SockerIoEvent.MESSAGE_ERROR, {message: 'Invalid WEBRTC_SIGNAL message.'}); + console.warn('Invalid WEBRTC_SIGNAL message received: ', data); + return; + } + //send only at user + const client = this.sockets.get(data.receiverId); + if (client === undefined) { + console.warn("While exchanging a WebRTC signal: client with id ", data.receiverId, " does not exist. This might be a race condition."); + return; + } + return client.emit(event, data); + } + searchClientByIdOrFail(userId: string): ExSocketInterface { const client: ExSocketInterface|undefined = this.sockets.get(userId); if (client === undefined) { diff --git a/front/src/Connection.ts b/front/src/Connection.ts index 69121837..bceef68a 100644 --- a/front/src/Connection.ts +++ b/front/src/Connection.ts @@ -9,9 +9,9 @@ import {PlayerAnimationNames} from "./Phaser/Player/Animation"; import {UserSimplePeerInterface} from "./WebRtc/SimplePeer"; import {SignalData} from "simple-peer"; - enum EventMessage{ WEBRTC_SIGNAL = "webrtc-signal", + WEBRTC_SCREEN_SHARING_SIGNAL = "webrtc-screen-sharing-signal", WEBRTC_START = "webrtc-start", JOIN_ROOM = "join-room", // bi-directional USER_POSITION = "user-position", // bi-directional @@ -197,6 +197,15 @@ export class Connection implements Connection { }); } + sendWebrtcScreenSharingSignal(signal: any, roomId: string, userId? : string|null, receiverId? : string) { + return this.getSocket().emit(EventMessage.WEBRTC_SCREEN_SHARING_SIGNAL, { + userId: userId ? userId : this.userId, + receiverId: receiverId ? receiverId : this.userId, + roomId: roomId, + signal: signal + }); + } + public receiveWebrtcStart(callback: (message: WebRtcStartMessageInterface) => void) { this.socket.on(EventMessage.WEBRTC_START, callback); } @@ -205,6 +214,23 @@ export class Connection implements Connection { return this.socket.on(EventMessage.WEBRTC_SIGNAL, callback); } + receiveWebrtcScreenSharingSignal(callback: Function) { + return this.getSocket().on(EventMessage.WEBRTC_SCREEN_SHARING_SIGNAL, callback); + } + + private errorMessage(): void { + this.getSocket().on(EventMessage.MESSAGE_ERROR, (message: string) => { + console.error(EventMessage.MESSAGE_ERROR, message); + }) + } + + private disconnectServer(): void { + this.getSocket().on(EventMessage.CONNECT_ERROR, () => { + this.GameManager.switchToDisconnectedScene(); + }); + + } + public onServerDisconnected(callback: (reason: string) => void): void { this.socket.on('disconnect', (reason: string) => { if (reason === 'io client disconnect') { diff --git a/front/src/WebRtc/MediaManager.ts b/front/src/WebRtc/MediaManager.ts index 4341c52e..706b9f49 100644 --- a/front/src/WebRtc/MediaManager.ts +++ b/front/src/WebRtc/MediaManager.ts @@ -287,14 +287,13 @@ export class MediaManager { * * @param userId */ - addScreenSharingActiveVideo(userId : string, userName: string = ""){ + addScreenSharingActiveVideo(userId : string){ + userId = `screen-sharing-${userId}`; this.webrtcInAudio.play(); // FIXME: switch to DisplayManager! let elementRemoteVideo = this.getElementByIdOrFail("activeScreenSharing"); - userName = userName.toUpperCase(); - let color = this.getColorByString(userName); elementRemoteVideo.insertAdjacentHTML('beforeend', ` -
    +
    `); @@ -302,6 +301,7 @@ export class MediaManager { if(!activeHTMLVideoElement){ return; } + console.log(userId, (activeHTMLVideoElement as HTMLVideoElement)); this.remoteVideo.set(userId, (activeHTMLVideoElement as HTMLVideoElement)); } @@ -372,6 +372,9 @@ export class MediaManager { } remoteVideo.srcObject = stream; } + addStreamRemoteScreenSharing(userId : string, stream : MediaStream){ + this.addStreamRemoteVideo(`screen-sharing-${userId}`, stream); + } /** * @@ -381,6 +384,9 @@ export class MediaManager { layoutManager.remove(userId); this.remoteVideo.delete(userId); } + removeActiveScreenSharingVideo(userId : string) { + this.removeActiveVideo(`screen-sharing-${userId}`) + } isConnecting(userId : string): void { const connectingSpinnerDiv = this.getSpinner(userId); diff --git a/front/src/WebRtc/SimplePeer.ts b/front/src/WebRtc/SimplePeer.ts index 6f5fd69a..81bffd6d 100644 --- a/front/src/WebRtc/SimplePeer.ts +++ b/front/src/WebRtc/SimplePeer.ts @@ -28,6 +28,7 @@ export class SimplePeer { private WebRtcRoomId: string; private Users: Array = new Array(); + private PeerScreenSharingConnectionArray: Map = new Map(); private PeerConnectionArray: Map = new Map(); private readonly updateLocalStreamCallback: (media: MediaStream) => void; private readonly updateScreenSharingCallback: (media: MediaStream) => void; @@ -62,6 +63,11 @@ export class SimplePeer { this.receiveWebrtcSignal(message); }); + //receive signal by gemer + this.Connection.receiveWebrtcScreenSharingSignal((message: any) => { + this.receiveWebrtcScreenSharingSignal(message); + }); + mediaManager.activeVisio(); mediaManager.getCamera().then(() => { @@ -108,7 +114,8 @@ export class SimplePeer { /** * create peer connection to bind users */ - private createPeerConnection(user : UserSimplePeerInterface) : SimplePeerNamespace.Instance | null{ + private createPeerConnection(user : UserSimplePeerInterface, screenSharing: boolean = false) : SimplePeerNamespace.Instance | null{ + console.log("createPeerConnection => screenSharing", screenSharing) if(this.PeerConnectionArray.has(user.userId)) { return null; } @@ -121,12 +128,11 @@ export class SimplePeer { } } - let screenSharing : boolean = name !== undefined && name.indexOf("screenSharing") > -1; mediaManager.removeActiveVideo(user.userId); - if(!screenSharing) { - mediaManager.addActiveVideo(user.userId, name); + if(screenSharing) { + mediaManager.addScreenSharingActiveVideo(user.userId); }else{ - mediaManager.addScreenSharingActiveVideo(user.userId, name); + mediaManager.addActiveVideo(user.userId, name); } const peer : SimplePeerNamespace.Instance = new Peer({ @@ -145,10 +151,19 @@ export class SimplePeer { ] }, }); - this.PeerConnectionArray.set(user.userId, peer); + if(screenSharing){ + this.PeerScreenSharingConnectionArray.set(user.userId, peer); + }else { + this.PeerConnectionArray.set(user.userId, peer); + } //start listen signal for the peer connection peer.on('signal', (data: unknown) => { + console.log("screenSharing", screenSharing); + if(screenSharing){ + this.sendWebrtcScreenSharingSignal(data, user.userId); + return; + } this.sendWebrtcSignal(data, user.userId); }); @@ -160,6 +175,9 @@ export class SimplePeer { });*/ peer.on('close', () => { + if(screenSharing){ + this.closeScreenSharingConnection(user.userId); + } this.closeConnection(user.userId); }); @@ -190,7 +208,11 @@ export class SimplePeer { } }); - this.addMedia(user.userId); + if(screenSharing){ + this.addMediaScreenSharing(user.userId); + }else { + this.addMedia(user.userId); + } for (const peerConnectionListener of this.peerConnectionListeners) { peerConnectionListener.onConnect(user); @@ -225,6 +247,30 @@ export class SimplePeer { } } + /** + * This is triggered twice. Once by the server, and once by a remote client disconnecting + * + * @param userId + */ + private closeScreenSharingConnection(userId : string) { + try { + mediaManager.removeActiveScreenSharingVideo(userId); + let peer = this.PeerScreenSharingConnectionArray.get(userId); + if (peer === undefined) { + console.warn("Tried to close connection for user "+userId+" but could not find user") + return; + } + // FIXME: I don't understand why "Closing connection with" message is displayed TWICE before "Nb users in peerConnectionArray" + // I do understand the method closeConnection is called twice, but I don't understand how they manage to run in parallel. + //console.log('Closing connection with '+userId); + peer.destroy(); + this.PeerScreenSharingConnectionArray.delete(userId) + //console.log('Nb users in peerConnectionArray '+this.PeerConnectionArray.size); + } catch (err) { + console.error("closeConnection", err) + } + } + public closeAllConnections() { for (const userId of this.PeerConnectionArray.keys()) { this.closeConnection(userId); @@ -244,6 +290,7 @@ export class SimplePeer { * @param data */ private sendWebrtcSignal(data: unknown, userId : string) { + console.log("sendWebrtcSignal", data); try { this.Connection.sendWebrtcSignal(data, this.WebRtcRoomId, null, userId); }catch (e) { @@ -251,6 +298,20 @@ export class SimplePeer { } } + /** + * + * @param userId + * @param data + */ + private sendWebrtcScreenSharingSignal(data: any, userId : string) { + console.log("sendWebrtcScreenSharingSignal", data); + try { + this.Connection.sendWebrtcScreenSharingSignal(data, this.WebRtcRoomId, null, userId); + }catch (e) { + console.error(`sendWebrtcSignal => ${userId}`, e); + } + } + // eslint-disable-next-line @typescript-eslint/no-explicit-any private receiveWebrtcSignal(data: WebRtcSignalMessageInterface) { try { @@ -269,6 +330,24 @@ export class SimplePeer { } } + private receiveWebrtcScreenSharingSignal(data: any) { + console.log("receiveWebrtcScreenSharingSignal", data); + try { + //if offer type, create peer connection + if(data.signal.type === "offer"){ + this.createPeerConnection(data, true); + } + let peer = this.PeerConnectionArray.get(data.userId); + if (peer !== undefined) { + peer.signal(data.signal); + } else { + console.error('Could not find peer whose ID is "'+data.userId+'" in PeerConnectionArray'); + } + } catch (e) { + console.error(`receiveWebrtcSignal => ${data.userId}`, e); + } + } + /** * * @param userId @@ -293,18 +372,8 @@ export class SimplePeer { if (!PeerConnection) { throw new Error('While adding media, cannot find user with ID ' + userId); } - - if(userId.indexOf("screenSharing") > -1 && mediaManager.localScreenCapture){ - for (const track of mediaManager.localScreenCapture.getTracks()) { - PeerConnection.addTrack(track, mediaManager.localScreenCapture); - } - return; - } - let localStream: MediaStream | null = mediaManager.localStream; - let localScreenCapture: MediaStream | null = mediaManager.localScreenCapture; - - PeerConnection.write(new Buffer(JSON.stringify(Object.assign(this.MediaManager.constraintsMedia, {screen: localScreenCapture !== null})))); + PeerConnection.write(new Buffer(JSON.stringify(mediaManager.constraintsMedia))); if(!localStream){ return; @@ -319,6 +388,21 @@ export class SimplePeer { } } + private addMediaScreenSharing (userId : any = null) { + let PeerConnection = this.PeerScreenSharingConnectionArray.get(userId); + if (!PeerConnection) { + throw new Error('While adding media, cannot find user with ID ' + userId); + } + let localScreenCapture: MediaStream | null = mediaManager.localScreenCapture; + if(!localScreenCapture){ + return; + } + /*for (const track of localScreenCapture.getTracks()) { + PeerConnection.addTrack(track, localScreenCapture); + }*/ + return; + } + updatedLocalStream(){ this.Users.forEach((user: UserSimplePeerInterface) => { this.addMedia(user.userId); @@ -326,29 +410,31 @@ export class SimplePeer { } updatedScreenSharing() { - if (this.MediaManager.localScreenCapture) { + if (mediaManager.localScreenCapture) { + if(!this.Connection.userId){ + return; + } let screenSharingUser: UserSimplePeerInterface = { - userId: `screenSharing-${this.Connection.userId}`, - name: 'screenSharing', + userId: this.Connection.userId, initiator: true }; - let PeerConnectionScreenSharing = this.createPeerConnection(screenSharingUser); + let PeerConnectionScreenSharing = this.createPeerConnection(screenSharingUser, true); if (!PeerConnectionScreenSharing) { return; } try { - for (const track of this.MediaManager.localScreenCapture.getTracks()) { - PeerConnectionScreenSharing.addTrack(track, this.MediaManager.localScreenCapture); + for (const track of mediaManager.localScreenCapture.getTracks()) { + PeerConnectionScreenSharing.addTrack(track, mediaManager.localScreenCapture); } }catch (e) { console.error("updatedScreenSharing => ", e); } - this.MediaManager.addStreamRemoteVideo(screenSharingUser.userId, this.MediaManager.localScreenCapture); + mediaManager.addStreamRemoteScreenSharing(screenSharingUser.userId, mediaManager.localScreenCapture); } else { - if (!this.PeerConnectionArray.has(`screenSharing-${this.Connection.userId}`)) { + if (!this.Connection.userId || !this.PeerScreenSharingConnectionArray.has(this.Connection.userId)) { return; } - let PeerConnectionScreenSharing = this.PeerConnectionArray.get(`screenSharing-${this.Connection.userId}`); + let PeerConnectionScreenSharing = this.PeerScreenSharingConnectionArray.get(this.Connection.userId); if (!PeerConnectionScreenSharing) { return; } From a8f27e60844fd80257434a0725fb0c3a1e0da2bf Mon Sep 17 00:00:00 2001 From: Gregoire Parant Date: Sun, 14 Jun 2020 14:47:16 +0200 Subject: [PATCH 095/313] Create event to start webrtc screen charing --- back/src/Controller/IoSocketController.ts | 25 ++++- .../Model/Websocket/WebRtcSignalMessage.ts | 11 ++ front/src/Connection.ts | 17 ++- front/src/WebRtc/MediaManager.ts | 5 + front/src/WebRtc/SimplePeer.ts | 103 ++++++++++++------ 5 files changed, 123 insertions(+), 38 deletions(-) diff --git a/back/src/Controller/IoSocketController.ts b/back/src/Controller/IoSocketController.ts index 2f99f1e6..81a7b16b 100644 --- a/back/src/Controller/IoSocketController.ts +++ b/back/src/Controller/IoSocketController.ts @@ -17,7 +17,7 @@ import os from 'os'; import {TokenInterface} from "../Controller/AuthenticateController"; import {isJoinRoomMessageInterface} from "../Model/Websocket/JoinRoomMessage"; import {isPointInterface, PointInterface} from "../Model/Websocket/PointInterface"; -import {isWebRtcSignalMessageInterface} from "../Model/Websocket/WebRtcSignalMessage"; +import {isWebRtcSignalMessageInterface, isWebRtcScreenSharingSignalMessageInterface, isWebRtcScreenSharingStartMessageInterface} from "../Model/Websocket/WebRtcSignalMessage"; import {UserInGroupInterface} from "../Model/Websocket/UserInGroupInterface"; enum SockerIoEvent { @@ -30,6 +30,7 @@ enum SockerIoEvent { WEBRTC_SIGNAL = "webrtc-signal", WEBRTC_SCREEN_SHARING_SIGNAL = "webrtc-screen-sharing-signal", WEBRTC_START = "webrtc-start", + WEBRTC_SCREEN_SHARING_START = "webrtc-screen-sharing-start", WEBRTC_DISCONNECT = "webrtc-disconect", MESSAGE_ERROR = "message-error", GROUP_CREATE_UPDATE = "group-create-update", @@ -231,7 +232,17 @@ export class IoSocketController { }); socket.on(SockerIoEvent.WEBRTC_SCREEN_SHARING_SIGNAL, (data: unknown) => { - this.emit((socket as ExSocketInterface), data, SockerIoEvent.WEBRTC_SCREEN_SHARING_SIGNAL); + this.emitScreenSharing((socket as ExSocketInterface), data, SockerIoEvent.WEBRTC_SCREEN_SHARING_SIGNAL); + }); + + socket.on(SockerIoEvent.WEBRTC_SCREEN_SHARING_START, (data: unknown) => { + console.log(SockerIoEvent.WEBRTC_SCREEN_SHARING_START, data); + if (!isWebRtcScreenSharingStartMessageInterface(data)) { + socket.emit(SockerIoEvent.MESSAGE_ERROR, {message: 'Invalid WEBRTC_SIGNAL message.'}); + console.warn('Invalid WEBRTC_SIGNAL message received: ', data); + return; + } + this.Io.in(data.roomId).emit(SockerIoEvent.WEBRTC_SCREEN_SHARING_START, data); }); socket.on(SockerIoEvent.DISCONNECT, () => { @@ -293,6 +304,16 @@ export class IoSocketController { return client.emit(event, data); } + emitScreenSharing(socket: ExSocketInterface, data: unknown, event: SockerIoEvent){ + if (!isWebRtcScreenSharingSignalMessageInterface(data)) { + socket.emit(SockerIoEvent.MESSAGE_ERROR, {message: 'Invalid WEBRTC_SIGNAL message.'}); + console.warn('Invalid WEBRTC_SIGNAL message received: ', data); + return; + } + //share at all others clients send only at user + return socket.broadcast.emit(event, data); + } + searchClientByIdOrFail(userId: string): ExSocketInterface { const client: ExSocketInterface|undefined = this.sockets.get(userId); if (client === undefined) { diff --git a/back/src/Model/Websocket/WebRtcSignalMessage.ts b/back/src/Model/Websocket/WebRtcSignalMessage.ts index 7edffdfa..8236d338 100644 --- a/back/src/Model/Websocket/WebRtcSignalMessage.ts +++ b/back/src/Model/Websocket/WebRtcSignalMessage.ts @@ -7,4 +7,15 @@ export const isWebRtcSignalMessageInterface = roomId: tg.isString, signal: tg.isUnknown }).get(); +export const isWebRtcScreenSharingSignalMessageInterface = + new tg.IsInterface().withProperties({ + userId: tg.isString, + roomId: tg.isString, + signal: tg.isUnknown + }).get(); +export const isWebRtcScreenSharingStartMessageInterface = + new tg.IsInterface().withProperties({ + userId: tg.isString, + roomId: tg.isString + }).get(); export type WebRtcSignalMessageInterface = tg.GuardedType; diff --git a/front/src/Connection.ts b/front/src/Connection.ts index bceef68a..50750c59 100644 --- a/front/src/Connection.ts +++ b/front/src/Connection.ts @@ -13,6 +13,7 @@ enum EventMessage{ WEBRTC_SIGNAL = "webrtc-signal", WEBRTC_SCREEN_SHARING_SIGNAL = "webrtc-screen-sharing-signal", WEBRTC_START = "webrtc-start", + WEBRTC_SCREEN_SHARING_START = "webrtc-screen-sharing-start", JOIN_ROOM = "join-room", // bi-directional USER_POSITION = "user-position", // bi-directional USER_MOVED = "user-moved", // From server to client @@ -197,10 +198,16 @@ export class Connection implements Connection { }); } - sendWebrtcScreenSharingSignal(signal: any, roomId: string, userId? : string|null, receiverId? : string) { + sendWebrtcScreenSharingStart(roomId: string) { + return this.getSocket().emit(EventMessage.WEBRTC_SCREEN_SHARING_START, { + userId: this.userId, + roomId: roomId + }); + } + + sendWebrtcScreenSharingSignal(signal: any, roomId: string, userId? : string|null) { return this.getSocket().emit(EventMessage.WEBRTC_SCREEN_SHARING_SIGNAL, { - userId: userId ? userId : this.userId, - receiverId: receiverId ? receiverId : this.userId, + userId: userId, roomId: roomId, signal: signal }); @@ -210,6 +217,10 @@ export class Connection implements Connection { this.socket.on(EventMessage.WEBRTC_START, callback); } + public receiveWebrtcScreenSharingStart(callback: (message: WebRtcDisconnectMessageInterface) => void) { + this.socket.on(EventMessage.WEBRTC_SCREEN_SHARING_START, callback); + } + public receiveWebrtcSignal(callback: (message: WebRtcSignalMessageInterface) => void) { return this.socket.on(EventMessage.WEBRTC_SIGNAL, callback); } diff --git a/front/src/WebRtc/MediaManager.ts b/front/src/WebRtc/MediaManager.ts index 706b9f49..167faded 100644 --- a/front/src/WebRtc/MediaManager.ts +++ b/front/src/WebRtc/MediaManager.ts @@ -405,6 +405,7 @@ export class MediaManager { } isError(userId : string): void { + console.log("isError", `div-${userId}`); const element = document.getElementById(`div-${userId}`); if(!element){ return; @@ -415,6 +416,10 @@ export class MediaManager { } errorDiv.style.display = 'block'; } + isErrorScreenSharing(userId : string): void { + this.isError(`screen-sharing-${userId}`); + } + private getSpinner(userId : string): HTMLDivElement|null { const element = document.getElementById(`div-${userId}`); diff --git a/front/src/WebRtc/SimplePeer.ts b/front/src/WebRtc/SimplePeer.ts index 81bffd6d..0377ea1a 100644 --- a/front/src/WebRtc/SimplePeer.ts +++ b/front/src/WebRtc/SimplePeer.ts @@ -63,8 +63,16 @@ export class SimplePeer { this.receiveWebrtcSignal(message); }); + this.Connection.receiveWebrtcScreenSharingStart((message: WebRtcDisconnectMessageInterface) => { + console.log("receiveWebrtcScreenSharingStart => initiator", message.userId === this.Connection.userId); + if(message.userId === this.Connection.userId) { + console.log("receiveWebrtcScreenSharingStart => initiator => create peer connexion"); + this.receiveWebrtcScreenSharingStart(message); + } + }); + //receive signal by gemer - this.Connection.receiveWebrtcScreenSharingSignal((message: any) => { + this.Connection.receiveWebrtcScreenSharingSignal((message: WebRtcDisconnectMessageInterface) => { this.receiveWebrtcScreenSharingSignal(message); }); @@ -98,6 +106,31 @@ export class SimplePeer { this.startWebRtc(); } + private receiveWebrtcScreenSharingStart(data: WebRtcDisconnectMessageInterface) { + console.log("receiveWebrtcScreenSharingStart", data); + let screenSharingUser: UserSimplePeerInterface = { + userId: data.userId, + initiator: this.Connection.userId === data.userId + }; + let PeerConnectionScreenSharing = this.createPeerConnection(screenSharingUser, true); + if (!PeerConnectionScreenSharing) { + console.error("receiveWebrtcScreenSharingStart => cannot create peer connexion", PeerConnectionScreenSharing); + return; + } + console.log(`receiveWebrtcScreenSharingStart => ${screenSharingUser.initiator}`, mediaManager.localScreenCapture) + if (!mediaManager.localScreenCapture) { + return; + } + try { + for (const track of mediaManager.localScreenCapture.getTracks()) { + PeerConnectionScreenSharing.addTrack(track, mediaManager.localScreenCapture); + } + } catch (e) { + console.error("updatedScreenSharing => ", e); + } + mediaManager.addStreamRemoteScreenSharing(screenSharingUser.userId, mediaManager.localScreenCapture); + } + /** * server has two people connected, start the meet */ @@ -115,8 +148,10 @@ export class SimplePeer { * create peer connection to bind users */ private createPeerConnection(user : UserSimplePeerInterface, screenSharing: boolean = false) : SimplePeerNamespace.Instance | null{ - console.log("createPeerConnection => screenSharing", screenSharing) - if(this.PeerConnectionArray.has(user.userId)) { + if( + (screenSharing && this.PeerScreenSharingConnectionArray.has(user.userId)) + || (!screenSharing && this.PeerConnectionArray.has(user.userId)) + ){ return null; } @@ -128,14 +163,15 @@ export class SimplePeer { } } - mediaManager.removeActiveVideo(user.userId); if(screenSharing) { + mediaManager.removeActiveScreenSharingVideo(user.userId); mediaManager.addScreenSharingActiveVideo(user.userId); }else{ + mediaManager.removeActiveVideo(user.userId); mediaManager.addActiveVideo(user.userId, name); } - const peer : SimplePeerNamespace.Instance = new Peer({ + const peerOption : SimplePeerNamespace.Instance = new Peer({ initiator: user.initiator ? user.initiator : false, reconnectTimer: 10000, config: { @@ -149,8 +185,10 @@ export class SimplePeer { credential: 'itcugcOHxle9Acqi$' }, ] - }, - }); + } + }; + console.log("peerOption", peerOption); + let peer : SimplePeerNamespace.Instance = new Peer(peerOption); if(screenSharing){ this.PeerScreenSharingConnectionArray.set(user.userId, peer); }else { @@ -159,7 +197,6 @@ export class SimplePeer { //start listen signal for the peer connection peer.on('signal', (data: unknown) => { - console.log("screenSharing", screenSharing); if(screenSharing){ this.sendWebrtcScreenSharingSignal(data, user.userId); return; @@ -168,7 +205,7 @@ export class SimplePeer { }); peer.on('stream', (stream: MediaStream) => { - this.stream(user.userId, stream); + this.stream(user.userId, stream, screenSharing); }); /*peer.on('track', (track: MediaStreamTrack, stream: MediaStream) => { @@ -177,6 +214,7 @@ export class SimplePeer { peer.on('close', () => { if(screenSharing){ this.closeScreenSharingConnection(user.userId); + return; } this.closeConnection(user.userId); }); @@ -184,6 +222,10 @@ export class SimplePeer { // eslint-disable-next-line @typescript-eslint/no-explicit-any peer.on('error', (err: any) => { console.error(`error => ${user.userId} => ${err.code}`, err); + if(screenSharing){ + //mediaManager.isErrorScreenSharing(user.userId); + return; + } mediaManager.isError(user.userId); }); @@ -194,6 +236,7 @@ export class SimplePeer { peer.on('data', (chunk: Buffer) => { let constraint = JSON.parse(chunk.toString('utf8')); + console.log("data", constraint); if (constraint.audio) { mediaManager.enabledMicrophoneByUserId(user.userId); } else { @@ -237,7 +280,8 @@ export class SimplePeer { // I do understand the method closeConnection is called twice, but I don't understand how they manage to run in parallel. //console.log('Closing connection with '+userId); peer.destroy(); - this.PeerConnectionArray.delete(userId) + this.PeerConnectionArray.delete(userId); + this.closeScreenSharingConnection(userId); //console.log('Nb users in peerConnectionArray '+this.PeerConnectionArray.size); for (const peerConnectionListener of this.peerConnectionListeners) { peerConnectionListener.onDisconnect(userId); @@ -306,7 +350,7 @@ export class SimplePeer { private sendWebrtcScreenSharingSignal(data: any, userId : string) { console.log("sendWebrtcScreenSharingSignal", data); try { - this.Connection.sendWebrtcScreenSharingSignal(data, this.WebRtcRoomId, null, userId); + this.Connection.sendWebrtcScreenSharingSignal(data, this.WebRtcRoomId, userId); }catch (e) { console.error(`sendWebrtcSignal => ${userId}`, e); } @@ -337,11 +381,11 @@ export class SimplePeer { if(data.signal.type === "offer"){ this.createPeerConnection(data, true); } - let peer = this.PeerConnectionArray.get(data.userId); + let peer = this.PeerScreenSharingConnectionArray.get(data.userId); if (peer !== undefined) { peer.signal(data.signal); } else { - console.error('Could not find peer whose ID is "'+data.userId+'" in PeerConnectionArray'); + console.error('Could not find peer whose ID is "'+data.userId+'" in receiveWebrtcScreenSharingSignal'); } } catch (e) { console.error(`receiveWebrtcSignal => ${data.userId}`, e); @@ -353,7 +397,16 @@ export class SimplePeer { * @param userId * @param stream */ - private stream(userId : string, stream?: MediaStream) { + private stream(userId : string, stream?: MediaStream, screenSharing?: boolean) { + console.log(`stream => ${userId} => screenSharing => ${screenSharing}`, stream); + if(screenSharing){ + if(!stream){ + mediaManager.removeActiveScreenSharingVideo(userId); + return; + } + mediaManager.addStreamRemoteScreenSharing(userId, stream); + return; + } if(!stream){ mediaManager.disabledVideoByUserId(userId); mediaManager.disabledMicrophoneByUserId(userId); @@ -411,34 +464,18 @@ export class SimplePeer { updatedScreenSharing() { if (mediaManager.localScreenCapture) { - if(!this.Connection.userId){ - return; - } - let screenSharingUser: UserSimplePeerInterface = { - userId: this.Connection.userId, - initiator: true - }; - let PeerConnectionScreenSharing = this.createPeerConnection(screenSharingUser, true); - if (!PeerConnectionScreenSharing) { - return; - } - try { - for (const track of mediaManager.localScreenCapture.getTracks()) { - PeerConnectionScreenSharing.addTrack(track, mediaManager.localScreenCapture); - } - }catch (e) { - console.error("updatedScreenSharing => ", e); - } - mediaManager.addStreamRemoteScreenSharing(screenSharingUser.userId, mediaManager.localScreenCapture); + this.Connection.sendWebrtcScreenSharingStart(this.WebRtcRoomId); } else { if (!this.Connection.userId || !this.PeerScreenSharingConnectionArray.has(this.Connection.userId)) { return; } let PeerConnectionScreenSharing = this.PeerScreenSharingConnectionArray.get(this.Connection.userId); + console.log("updatedScreenSharing => destroy", PeerConnectionScreenSharing); if (!PeerConnectionScreenSharing) { return; } PeerConnectionScreenSharing.destroy(); + this.PeerScreenSharingConnectionArray.delete(this.Connection.userId); } } } From 4b729581938dbf417cebe6c1589acdcbc9c083f6 Mon Sep 17 00:00:00 2001 From: Gregoire Parant Date: Sun, 14 Jun 2020 20:53:18 +0200 Subject: [PATCH 096/313] Fix peer connexion for two player with screen sharing --- back/src/Controller/IoSocketController.ts | 23 +++++----- front/dist/resources/style/style.css | 18 +++++--- front/src/Connection.ts | 12 ----- front/src/WebRtc/SimplePeer.ts | 56 +++++++++-------------- 4 files changed, 45 insertions(+), 64 deletions(-) diff --git a/back/src/Controller/IoSocketController.ts b/back/src/Controller/IoSocketController.ts index 81a7b16b..0c1956f3 100644 --- a/back/src/Controller/IoSocketController.ts +++ b/back/src/Controller/IoSocketController.ts @@ -30,7 +30,6 @@ enum SockerIoEvent { WEBRTC_SIGNAL = "webrtc-signal", WEBRTC_SCREEN_SHARING_SIGNAL = "webrtc-screen-sharing-signal", WEBRTC_START = "webrtc-start", - WEBRTC_SCREEN_SHARING_START = "webrtc-screen-sharing-start", WEBRTC_DISCONNECT = "webrtc-disconect", MESSAGE_ERROR = "message-error", GROUP_CREATE_UPDATE = "group-create-update", @@ -45,6 +44,8 @@ export class IoSocketController { private nbClientsGauge: Gauge; private nbClientsPerRoomGauge: Gauge; + private offerScreenSharingByClient: Map> = new Map>(); + constructor(server: http.Server) { this.Io = socketIO(server); this.nbClientsGauge = new Gauge({ @@ -235,16 +236,6 @@ export class IoSocketController { this.emitScreenSharing((socket as ExSocketInterface), data, SockerIoEvent.WEBRTC_SCREEN_SHARING_SIGNAL); }); - socket.on(SockerIoEvent.WEBRTC_SCREEN_SHARING_START, (data: unknown) => { - console.log(SockerIoEvent.WEBRTC_SCREEN_SHARING_START, data); - if (!isWebRtcScreenSharingStartMessageInterface(data)) { - socket.emit(SockerIoEvent.MESSAGE_ERROR, {message: 'Invalid WEBRTC_SIGNAL message.'}); - console.warn('Invalid WEBRTC_SIGNAL message received: ', data); - return; - } - this.Io.in(data.roomId).emit(SockerIoEvent.WEBRTC_SCREEN_SHARING_START, data); - }); - socket.on(SockerIoEvent.DISCONNECT, () => { const Client = (socket as ExSocketInterface); try { @@ -310,8 +301,16 @@ export class IoSocketController { console.warn('Invalid WEBRTC_SIGNAL message received: ', data); return; } + if(data && data.signal && (data.signal as any).type === "offer"){ + let roomOffer = this.offerScreenSharingByClient.get(data.roomId); + if(!roomOffer){ + roomOffer = new Map(); + } + roomOffer.set(data.userId, data.signal); + this.offerScreenSharingByClient.set(data.roomId, roomOffer); + } //share at all others clients send only at user - return socket.broadcast.emit(event, data); + return socket.in(data.roomId).emit(event, data); } searchClientByIdOrFail(userId: string): ExSocketInterface { diff --git a/front/dist/resources/style/style.css b/front/dist/resources/style/style.css index d0dc2cd4..ac1b1527 100644 --- a/front/dist/resources/style/style.css +++ b/front/dist/resources/style/style.css @@ -370,28 +370,34 @@ body { .active-screen-sharing video{ transform: scaleX(1); } +.screen-sharing-video-container { + width: 25%; + position: absolute; +} .active-screen-sharing .screen-sharing-video-container video:hover{ - width: 50%; + width: 200%; + z-index: 11; } .active-screen-sharing .screen-sharing-video-container video{ position: absolute; - width: 25%; + width: 100%; height: auto; left: 0; top: 0; transition: all 0.2s ease; + z-index: 1; } -.active-screen-sharing .screen-sharing-video-container video:nth-child(1){ +.active-screen-sharing .screen-sharing-video-container:nth-child(1){ /*this is for camera of user*/ top: 0%; } -.active-screen-sharing .screen-sharing-video-container video:nth-child(2){ +.active-screen-sharing .screen-sharing-video-container:nth-child(2){ top: 25%; } -.active-screen-sharing .screen-sharing-video-container video:nth-child(3){ +.active-screen-sharing .screen-sharing-video-container:nth-child(3){ top: 50%; } -.active-screen-sharing .screen-sharing-video-container video:nth-child(4) { +.active-screen-sharing .screen-sharing-video-container:nth-child(4) { top: 75%; } diff --git a/front/src/Connection.ts b/front/src/Connection.ts index 50750c59..2ac81f30 100644 --- a/front/src/Connection.ts +++ b/front/src/Connection.ts @@ -13,7 +13,6 @@ enum EventMessage{ WEBRTC_SIGNAL = "webrtc-signal", WEBRTC_SCREEN_SHARING_SIGNAL = "webrtc-screen-sharing-signal", WEBRTC_START = "webrtc-start", - WEBRTC_SCREEN_SHARING_START = "webrtc-screen-sharing-start", JOIN_ROOM = "join-room", // bi-directional USER_POSITION = "user-position", // bi-directional USER_MOVED = "user-moved", // From server to client @@ -198,13 +197,6 @@ export class Connection implements Connection { }); } - sendWebrtcScreenSharingStart(roomId: string) { - return this.getSocket().emit(EventMessage.WEBRTC_SCREEN_SHARING_START, { - userId: this.userId, - roomId: roomId - }); - } - sendWebrtcScreenSharingSignal(signal: any, roomId: string, userId? : string|null) { return this.getSocket().emit(EventMessage.WEBRTC_SCREEN_SHARING_SIGNAL, { userId: userId, @@ -217,10 +209,6 @@ export class Connection implements Connection { this.socket.on(EventMessage.WEBRTC_START, callback); } - public receiveWebrtcScreenSharingStart(callback: (message: WebRtcDisconnectMessageInterface) => void) { - this.socket.on(EventMessage.WEBRTC_SCREEN_SHARING_START, callback); - } - public receiveWebrtcSignal(callback: (message: WebRtcSignalMessageInterface) => void) { return this.socket.on(EventMessage.WEBRTC_SIGNAL, callback); } diff --git a/front/src/WebRtc/SimplePeer.ts b/front/src/WebRtc/SimplePeer.ts index 0377ea1a..e0dbe4a6 100644 --- a/front/src/WebRtc/SimplePeer.ts +++ b/front/src/WebRtc/SimplePeer.ts @@ -63,14 +63,6 @@ export class SimplePeer { this.receiveWebrtcSignal(message); }); - this.Connection.receiveWebrtcScreenSharingStart((message: WebRtcDisconnectMessageInterface) => { - console.log("receiveWebrtcScreenSharingStart => initiator", message.userId === this.Connection.userId); - if(message.userId === this.Connection.userId) { - console.log("receiveWebrtcScreenSharingStart => initiator => create peer connexion"); - this.receiveWebrtcScreenSharingStart(message); - } - }); - //receive signal by gemer this.Connection.receiveWebrtcScreenSharingSignal((message: WebRtcDisconnectMessageInterface) => { this.receiveWebrtcScreenSharingSignal(message); @@ -106,31 +98,6 @@ export class SimplePeer { this.startWebRtc(); } - private receiveWebrtcScreenSharingStart(data: WebRtcDisconnectMessageInterface) { - console.log("receiveWebrtcScreenSharingStart", data); - let screenSharingUser: UserSimplePeerInterface = { - userId: data.userId, - initiator: this.Connection.userId === data.userId - }; - let PeerConnectionScreenSharing = this.createPeerConnection(screenSharingUser, true); - if (!PeerConnectionScreenSharing) { - console.error("receiveWebrtcScreenSharingStart => cannot create peer connexion", PeerConnectionScreenSharing); - return; - } - console.log(`receiveWebrtcScreenSharingStart => ${screenSharingUser.initiator}`, mediaManager.localScreenCapture) - if (!mediaManager.localScreenCapture) { - return; - } - try { - for (const track of mediaManager.localScreenCapture.getTracks()) { - PeerConnectionScreenSharing.addTrack(track, mediaManager.localScreenCapture); - } - } catch (e) { - console.error("updatedScreenSharing => ", e); - } - mediaManager.addStreamRemoteScreenSharing(screenSharingUser.userId, mediaManager.localScreenCapture); - } - /** * server has two people connected, start the meet */ @@ -464,7 +431,28 @@ export class SimplePeer { updatedScreenSharing() { if (mediaManager.localScreenCapture) { - this.Connection.sendWebrtcScreenSharingStart(this.WebRtcRoomId); + + //this.Connection.sendWebrtcScreenSharingStart(this.WebRtcRoomId); + + if(!this.Connection.userId){ + return; + } + let screenSharingUser: UserSimplePeerInterface = { + userId: this.Connection.userId, + initiator: true + }; + let PeerConnectionScreenSharing = this.createPeerConnection(screenSharingUser, true); + if (!PeerConnectionScreenSharing) { + return; + } + try { + for (const track of mediaManager.localScreenCapture.getTracks()) { + PeerConnectionScreenSharing.addTrack(track, mediaManager.localScreenCapture); + } + }catch (e) { + console.error("updatedScreenSharing => ", e); + } + mediaManager.addStreamRemoteScreenSharing(screenSharingUser.userId, mediaManager.localScreenCapture); } else { if (!this.Connection.userId || !this.PeerScreenSharingConnectionArray.has(this.Connection.userId)) { return; From 2e61c2ef6296bd526e397f29587059ee87901ec0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20N=C3=A9grier?= Date: Tue, 18 Aug 2020 00:12:38 +0200 Subject: [PATCH 097/313] Getting back code in compilable fashion after huge rebase --- front/src/Connection.ts | 21 ++++----------------- front/src/Phaser/Game/GameScene.ts | 4 ++-- front/src/WebRtc/MediaManager.ts | 27 +++++++++++++++++++-------- front/src/WebRtc/SimplePeer.ts | 20 ++++++++++---------- 4 files changed, 35 insertions(+), 37 deletions(-) diff --git a/front/src/Connection.ts b/front/src/Connection.ts index 2ac81f30..f2c72d64 100644 --- a/front/src/Connection.ts +++ b/front/src/Connection.ts @@ -197,8 +197,8 @@ export class Connection implements Connection { }); } - sendWebrtcScreenSharingSignal(signal: any, roomId: string, userId? : string|null) { - return this.getSocket().emit(EventMessage.WEBRTC_SCREEN_SHARING_SIGNAL, { + public sendWebrtcScreenSharingSignal(signal: unknown, roomId: string, userId? : string|null) { + return this.socket.emit(EventMessage.WEBRTC_SCREEN_SHARING_SIGNAL, { userId: userId, roomId: roomId, signal: signal @@ -213,21 +213,8 @@ export class Connection implements Connection { return this.socket.on(EventMessage.WEBRTC_SIGNAL, callback); } - receiveWebrtcScreenSharingSignal(callback: Function) { - return this.getSocket().on(EventMessage.WEBRTC_SCREEN_SHARING_SIGNAL, callback); - } - - private errorMessage(): void { - this.getSocket().on(EventMessage.MESSAGE_ERROR, (message: string) => { - console.error(EventMessage.MESSAGE_ERROR, message); - }) - } - - private disconnectServer(): void { - this.getSocket().on(EventMessage.CONNECT_ERROR, () => { - this.GameManager.switchToDisconnectedScene(); - }); - + public receiveWebrtcScreenSharingSignal(callback: Function) { + return this.socket.on(EventMessage.WEBRTC_SCREEN_SHARING_SIGNAL, callback); } public onServerDisconnected(callback: (reason: string) => void): void { diff --git a/front/src/Phaser/Game/GameScene.ts b/front/src/Phaser/Game/GameScene.ts index c4517545..3c3a6536 100644 --- a/front/src/Phaser/Game/GameScene.ts +++ b/front/src/Phaser/Game/GameScene.ts @@ -18,7 +18,7 @@ import {PlayerMovement} from "./PlayerMovement"; import {PlayersPositionInterpolator} from "./PlayersPositionInterpolator"; import {RemotePlayer} from "../Entity/RemotePlayer"; import {Queue} from 'queue-typescript'; -import {SimplePeer, UserSimplePeer} from "../../WebRtc/SimplePeer"; +import {SimplePeer, UserSimplePeerInterface} from "../../WebRtc/SimplePeer"; import {ReconnectingSceneName} from "../Reconnecting/ReconnectingScene"; import {FourOFourSceneName} from "../Reconnecting/FourOFourScene"; import {loadAllLayers} from "../Entity/body_character"; @@ -229,7 +229,7 @@ export class GameScene extends Phaser.Scene { this.simplePeer = new SimplePeer(this.connection); const self = this; this.simplePeer.registerPeerConnectionListener({ - onConnect(user: UserSimplePeer) { + onConnect(user: UserSimplePeerInterface) { self.presentationModeSprite.setVisible(true); self.chatModeSprite.setVisible(true); }, diff --git a/front/src/WebRtc/MediaManager.ts b/front/src/WebRtc/MediaManager.ts index 167faded..d7b40c39 100644 --- a/front/src/WebRtc/MediaManager.ts +++ b/front/src/WebRtc/MediaManager.ts @@ -11,6 +11,7 @@ interface MediaServiceInterface extends MediaDevices{ } type UpdatedLocalStreamCallback = (media: MediaStream) => void; +type UpdatedScreenSharingCallback = (media: MediaStream) => void; // TODO: Split MediaManager in 2 classes: MediaManagerUI (in charge of HTML) and MediaManager (singleton in charge of the camera only) // TODO: verify that microphone event listeners are not triggered plenty of time NOW (since MediaManager is created many times!!!!) @@ -31,11 +32,10 @@ export class MediaManager { video: videoConstraint }; updatedLocalStreamCallBacks : Set = new Set(); - // TODO: updatedScreenSharingCallBack should have same signature as updatedLocalStreamCallBacks - updatedScreenSharingCallBack : Function; + updatedScreenSharingCallBacks : Set = new Set(); - constructor(updatedScreenSharingCallBack : Function) { - this.updatedScreenSharingCallBack = updatedScreenSharingCallBack; + + constructor() { this.myCamVideo = this.getElementByIdOrFail('myCamVideo'); this.webrtcInAudio = this.getElementByIdOrFail('audio-webrtc-in'); @@ -69,14 +69,14 @@ export class MediaManager { //update tracking }); - this.monitorClose = document.getElementById('monitor-close'); + this.monitorClose = this.getElementByIdOrFail('monitor-close'); this.monitorClose.style.display = "block"; this.monitorClose.addEventListener('click', (e: any) => { e.preventDefault(); this.enabledMonitor(); //update tracking }); - this.monitor = document.getElementById('monitor'); + this.monitor = this.getElementByIdOrFail('monitor'); this.monitor.style.display = "none"; this.monitor.addEventListener('click', (e: any) => { e.preventDefault(); @@ -90,6 +90,11 @@ export class MediaManager { this.updatedLocalStreamCallBacks.add(callback); } + onUpdateScreenSharing(callback: UpdatedScreenSharingCallback): void { + + this.updatedScreenSharingCallBacks.add(callback); + } + removeUpdateLocalStreamEventListener(callback: UpdatedLocalStreamCallback): void { this.updatedLocalStreamCallBacks.delete(callback); } @@ -100,6 +105,12 @@ export class MediaManager { } } + private triggerUpdatedScreenSharingCallbacks(stream: MediaStream): void { + for (const callback of this.updatedScreenSharingCallBacks) { + callback(stream); + } + } + activeVisio(){ const gameOverlay = this.getElementByIdOrFail('game-overlay'); gameOverlay.classList.add('active'); @@ -156,7 +167,7 @@ export class MediaManager { this.monitorClose.style.display = "none"; this.monitor.style.display = "block"; this.getScreenMedia().then((stream) => { - this.updatedScreenSharingCallBack(stream); + this.triggerUpdatedScreenSharingCallbacks(stream); }); } @@ -168,7 +179,7 @@ export class MediaManager { }); this.localScreenCapture = null; this.getCamera().then((stream) => { - this.updatedScreenSharingCallBack(stream); + this.triggerUpdatedScreenSharingCallbacks(stream); }); } diff --git a/front/src/WebRtc/SimplePeer.ts b/front/src/WebRtc/SimplePeer.ts index e0dbe4a6..582b8eb2 100644 --- a/front/src/WebRtc/SimplePeer.ts +++ b/front/src/WebRtc/SimplePeer.ts @@ -15,7 +15,7 @@ export interface UserSimplePeerInterface{ } export interface PeerConnectionListener { - onConnect(user: UserSimplePeer): void; + onConnect(user: UserSimplePeerInterface): void; onDisconnect(userId: string): void; } @@ -138,7 +138,7 @@ export class SimplePeer { mediaManager.addActiveVideo(user.userId, name); } - const peerOption : SimplePeerNamespace.Instance = new Peer({ + const peer : SimplePeerNamespace.Instance = new Peer({ initiator: user.initiator ? user.initiator : false, reconnectTimer: 10000, config: { @@ -153,9 +153,7 @@ export class SimplePeer { }, ] } - }; - console.log("peerOption", peerOption); - let peer : SimplePeerNamespace.Instance = new Peer(peerOption); + }); if(screenSharing){ this.PeerScreenSharingConnectionArray.set(user.userId, peer); }else { @@ -434,11 +432,12 @@ export class SimplePeer { //this.Connection.sendWebrtcScreenSharingStart(this.WebRtcRoomId); - if(!this.Connection.userId){ + const userId = this.Connection.getUserId(); + if(!userId){ return; } let screenSharingUser: UserSimplePeerInterface = { - userId: this.Connection.userId, + userId, initiator: true }; let PeerConnectionScreenSharing = this.createPeerConnection(screenSharingUser, true); @@ -454,16 +453,17 @@ export class SimplePeer { } mediaManager.addStreamRemoteScreenSharing(screenSharingUser.userId, mediaManager.localScreenCapture); } else { - if (!this.Connection.userId || !this.PeerScreenSharingConnectionArray.has(this.Connection.userId)) { + const userId = this.Connection.getUserId(); + if (!userId || !this.PeerScreenSharingConnectionArray.has(userId)) { return; } - let PeerConnectionScreenSharing = this.PeerScreenSharingConnectionArray.get(this.Connection.userId); + let PeerConnectionScreenSharing = this.PeerScreenSharingConnectionArray.get(userId); console.log("updatedScreenSharing => destroy", PeerConnectionScreenSharing); if (!PeerConnectionScreenSharing) { return; } PeerConnectionScreenSharing.destroy(); - this.PeerScreenSharingConnectionArray.delete(this.Connection.userId); + this.PeerScreenSharingConnectionArray.delete(userId); } } } From cc1cb2f671c42574e115fe1c8b7b28bbe84ef2dc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20N=C3=A9grier?= Date: Tue, 18 Aug 2020 14:59:50 +0200 Subject: [PATCH 098/313] Fixing linting --- front/src/Connection.ts | 10 ++++++++-- front/src/WebRtc/MediaManager.ts | 26 +++++++++++++------------- front/src/WebRtc/SimplePeer.ts | 32 ++++++++++++++++---------------- 3 files changed, 37 insertions(+), 31 deletions(-) diff --git a/front/src/Connection.ts b/front/src/Connection.ts index f2c72d64..b7926328 100644 --- a/front/src/Connection.ts +++ b/front/src/Connection.ts @@ -81,7 +81,13 @@ export interface WebRtcDisconnectMessageInterface { export interface WebRtcSignalMessageInterface { userId: string, - receiverId: string, + receiverId: string, // TODO: is this needed? (can we merge this with WebRtcScreenSharingMessageInterface?) + roomId: string, + signal: SignalData +} + +export interface WebRtcScreenSharingMessageInterface { + userId: string, roomId: string, signal: SignalData } @@ -213,7 +219,7 @@ export class Connection implements Connection { return this.socket.on(EventMessage.WEBRTC_SIGNAL, callback); } - public receiveWebrtcScreenSharingSignal(callback: Function) { + public receiveWebrtcScreenSharingSignal(callback: (message: WebRtcScreenSharingMessageInterface) => void) { return this.socket.on(EventMessage.WEBRTC_SCREEN_SHARING_SIGNAL, callback); } diff --git a/front/src/WebRtc/MediaManager.ts b/front/src/WebRtc/MediaManager.ts index d7b40c39..b63dc515 100644 --- a/front/src/WebRtc/MediaManager.ts +++ b/front/src/WebRtc/MediaManager.ts @@ -6,9 +6,6 @@ const videoConstraint: boolean|MediaTrackConstraints = { height: { ideal: 720 }, facingMode: "user" }; -interface MediaServiceInterface extends MediaDevices{ - getDisplayMedia(constrain: any) : Promise; -} type UpdatedLocalStreamCallback = (media: MediaStream) => void; type UpdatedScreenSharingCallback = (media: MediaStream) => void; @@ -71,14 +68,14 @@ export class MediaManager { this.monitorClose = this.getElementByIdOrFail('monitor-close'); this.monitorClose.style.display = "block"; - this.monitorClose.addEventListener('click', (e: any) => { + this.monitorClose.addEventListener('click', (e: MouseEvent) => { e.preventDefault(); this.enabledMonitor(); //update tracking }); this.monitor = this.getElementByIdOrFail('monitor'); this.monitor.style.display = "none"; - this.monitor.addEventListener('click', (e: any) => { + this.monitor.addEventListener('click', (e: MouseEvent) => { e.preventDefault(); this.disabledMonitor(); //update tracking @@ -191,8 +188,8 @@ export class MediaManager { this.localScreenCapture = stream; return stream; }) - .catch((err: any) => { - console.error("Error => getScreenMedia => " + err); + .catch((err: unknown) => { + console.error("Error => getScreenMedia => ", err); throw err; }); }catch (err) { @@ -203,10 +200,13 @@ export class MediaManager { } private _startScreenCapture() { - if ((navigator as any).getDisplayMedia) { - return (navigator as any).getDisplayMedia({video: true}); - } else if ((navigator.mediaDevices as any).getDisplayMedia) { - return (navigator.mediaDevices as any).getDisplayMedia({video: true}); + // getDisplayMedia was moved to mediaDevices in 2018. Typescript definitions are not up to date yet. + // See: https://github.com/w3c/mediacapture-screen-share/pull/86 + // https://github.com/microsoft/TypeScript/issues/31821 + if ((navigator as any).getDisplayMedia) { // eslint-disable-line @typescript-eslint/no-explicit-any + return (navigator as any).getDisplayMedia({video: true}); // eslint-disable-line @typescript-eslint/no-explicit-any + } else if ((navigator.mediaDevices as any).getDisplayMedia) { // eslint-disable-line @typescript-eslint/no-explicit-any + return (navigator.mediaDevices as any).getDisplayMedia({video: true}); // eslint-disable-line @typescript-eslint/no-explicit-any } else { //return navigator.mediaDevices.getUserMedia(({video: {mediaSource: 'screen'}} as any)); return new Promise((resolve, reject) => { // eslint-disable-line no-unused-vars @@ -302,13 +302,13 @@ export class MediaManager { userId = `screen-sharing-${userId}`; this.webrtcInAudio.play(); // FIXME: switch to DisplayManager! - let elementRemoteVideo = this.getElementByIdOrFail("activeScreenSharing"); + const elementRemoteVideo = this.getElementByIdOrFail("activeScreenSharing"); elementRemoteVideo.insertAdjacentHTML('beforeend', `
    `); - let activeHTMLVideoElement : HTMLElement|null = document.getElementById(userId); + const activeHTMLVideoElement : HTMLElement|null = document.getElementById(userId); if(!activeHTMLVideoElement){ return; } diff --git a/front/src/WebRtc/SimplePeer.ts b/front/src/WebRtc/SimplePeer.ts index 582b8eb2..72786d63 100644 --- a/front/src/WebRtc/SimplePeer.ts +++ b/front/src/WebRtc/SimplePeer.ts @@ -1,6 +1,6 @@ import { Connection, - WebRtcDisconnectMessageInterface, + WebRtcDisconnectMessageInterface, WebRtcScreenSharingMessageInterface, WebRtcSignalMessageInterface, WebRtcStartMessageInterface } from "../Connection"; @@ -64,7 +64,7 @@ export class SimplePeer { }); //receive signal by gemer - this.Connection.receiveWebrtcScreenSharingSignal((message: WebRtcDisconnectMessageInterface) => { + this.Connection.receiveWebrtcScreenSharingSignal((message: WebRtcScreenSharingMessageInterface) => { this.receiveWebrtcScreenSharingSignal(message); }); @@ -200,7 +200,7 @@ export class SimplePeer { }); peer.on('data', (chunk: Buffer) => { - let constraint = JSON.parse(chunk.toString('utf8')); + const constraint = JSON.parse(chunk.toString('utf8')); console.log("data", constraint); if (constraint.audio) { mediaManager.enabledMicrophoneByUserId(user.userId); @@ -264,7 +264,7 @@ export class SimplePeer { private closeScreenSharingConnection(userId : string) { try { mediaManager.removeActiveScreenSharingVideo(userId); - let peer = this.PeerScreenSharingConnectionArray.get(userId); + const peer = this.PeerScreenSharingConnectionArray.get(userId); if (peer === undefined) { console.warn("Tried to close connection for user "+userId+" but could not find user") return; @@ -312,12 +312,12 @@ export class SimplePeer { * @param userId * @param data */ - private sendWebrtcScreenSharingSignal(data: any, userId : string) { + private sendWebrtcScreenSharingSignal(data: unknown, userId : string) { console.log("sendWebrtcScreenSharingSignal", data); try { this.Connection.sendWebrtcScreenSharingSignal(data, this.WebRtcRoomId, userId); }catch (e) { - console.error(`sendWebrtcSignal => ${userId}`, e); + console.error(`sendWebrtcScreenSharingSignal => ${userId}`, e); } } @@ -339,14 +339,14 @@ export class SimplePeer { } } - private receiveWebrtcScreenSharingSignal(data: any) { + private receiveWebrtcScreenSharingSignal(data: WebRtcScreenSharingMessageInterface) { console.log("receiveWebrtcScreenSharingSignal", data); try { //if offer type, create peer connection if(data.signal.type === "offer"){ this.createPeerConnection(data, true); } - let peer = this.PeerScreenSharingConnectionArray.get(data.userId); + const peer = this.PeerScreenSharingConnectionArray.get(data.userId); if (peer !== undefined) { peer.signal(data.signal); } else { @@ -386,11 +386,11 @@ export class SimplePeer { */ private addMedia (userId : string) { try { - let PeerConnection = this.PeerConnectionArray.get(userId); + const PeerConnection = this.PeerConnectionArray.get(userId); if (!PeerConnection) { throw new Error('While adding media, cannot find user with ID ' + userId); } - let localStream: MediaStream | null = mediaManager.localStream; + const localStream: MediaStream | null = mediaManager.localStream; PeerConnection.write(new Buffer(JSON.stringify(mediaManager.constraintsMedia))); if(!localStream){ @@ -406,12 +406,12 @@ export class SimplePeer { } } - private addMediaScreenSharing (userId : any = null) { - let PeerConnection = this.PeerScreenSharingConnectionArray.get(userId); + private addMediaScreenSharing(userId : string) { + const PeerConnection = this.PeerScreenSharingConnectionArray.get(userId); if (!PeerConnection) { throw new Error('While adding media, cannot find user with ID ' + userId); } - let localScreenCapture: MediaStream | null = mediaManager.localScreenCapture; + const localScreenCapture: MediaStream | null = mediaManager.localScreenCapture; if(!localScreenCapture){ return; } @@ -436,11 +436,11 @@ export class SimplePeer { if(!userId){ return; } - let screenSharingUser: UserSimplePeerInterface = { + const screenSharingUser: UserSimplePeerInterface = { userId, initiator: true }; - let PeerConnectionScreenSharing = this.createPeerConnection(screenSharingUser, true); + const PeerConnectionScreenSharing = this.createPeerConnection(screenSharingUser, true); if (!PeerConnectionScreenSharing) { return; } @@ -457,7 +457,7 @@ export class SimplePeer { if (!userId || !this.PeerScreenSharingConnectionArray.has(userId)) { return; } - let PeerConnectionScreenSharing = this.PeerScreenSharingConnectionArray.get(userId); + const PeerConnectionScreenSharing = this.PeerScreenSharingConnectionArray.get(userId); console.log("updatedScreenSharing => destroy", PeerConnectionScreenSharing); if (!PeerConnectionScreenSharing) { return; From 6c5772e84986187b568d39a4e6a709696e99a033 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20N=C3=A9grier?= Date: Tue, 18 Aug 2020 15:31:42 +0200 Subject: [PATCH 099/313] Fixing typipng in back --- back/src/Controller/IoSocketController.ts | 2 +- back/src/Model/Websocket/WebRtcSignalMessage.ts | 10 ++++++++-- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/back/src/Controller/IoSocketController.ts b/back/src/Controller/IoSocketController.ts index 0c1956f3..923f36a9 100644 --- a/back/src/Controller/IoSocketController.ts +++ b/back/src/Controller/IoSocketController.ts @@ -301,7 +301,7 @@ export class IoSocketController { console.warn('Invalid WEBRTC_SIGNAL message received: ', data); return; } - if(data && data.signal && (data.signal as any).type === "offer"){ + if(data.signal.type === "offer"){ let roomOffer = this.offerScreenSharingByClient.get(data.roomId); if(!roomOffer){ roomOffer = new Map(); diff --git a/back/src/Model/Websocket/WebRtcSignalMessage.ts b/back/src/Model/Websocket/WebRtcSignalMessage.ts index 8236d338..56a19060 100644 --- a/back/src/Model/Websocket/WebRtcSignalMessage.ts +++ b/back/src/Model/Websocket/WebRtcSignalMessage.ts @@ -1,17 +1,22 @@ import * as tg from "generic-type-guard"; +export const isSignalData = + new tg.IsInterface().withProperties({ + type: tg.isOptional(tg.isString) + }).get(); + export const isWebRtcSignalMessageInterface = new tg.IsInterface().withProperties({ userId: tg.isString, receiverId: tg.isString, roomId: tg.isString, - signal: tg.isUnknown + signal: isSignalData }).get(); export const isWebRtcScreenSharingSignalMessageInterface = new tg.IsInterface().withProperties({ userId: tg.isString, roomId: tg.isString, - signal: tg.isUnknown + signal: isSignalData }).get(); export const isWebRtcScreenSharingStartMessageInterface = new tg.IsInterface().withProperties({ @@ -19,3 +24,4 @@ export const isWebRtcScreenSharingStartMessageInterface = roomId: tg.isString }).get(); export type WebRtcSignalMessageInterface = tg.GuardedType; +export type WebRtcScreenSharingMessageInterface = tg.GuardedType; From 011953428359e28eb55320172023b65cb895579d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20N=C3=A9grier?= Date: Thu, 20 Aug 2020 00:05:00 +0200 Subject: [PATCH 100/313] First version of screen-sharing that works when a user is joining a group after screen sharing begun. --- back/src/Controller/IoSocketController.ts | 39 +++-- .../Model/Websocket/WebRtcSignalMessage.ts | 7 - front/dist/resources/style/style.css | 36 ----- front/src/Connection.ts | 17 +- front/src/WebRtc/MediaManager.ts | 51 +++--- front/src/WebRtc/SimplePeer.ts | 148 ++++++++++-------- 6 files changed, 130 insertions(+), 168 deletions(-) diff --git a/back/src/Controller/IoSocketController.ts b/back/src/Controller/IoSocketController.ts index 923f36a9..501c6145 100644 --- a/back/src/Controller/IoSocketController.ts +++ b/back/src/Controller/IoSocketController.ts @@ -44,8 +44,6 @@ export class IoSocketController { private nbClientsGauge: Gauge; private nbClientsPerRoomGauge: Gauge; - private offerScreenSharingByClient: Map> = new Map>(); - constructor(server: http.Server) { this.Io = socketIO(server); this.nbClientsGauge = new Gauge({ @@ -229,11 +227,11 @@ export class IoSocketController { }); socket.on(SockerIoEvent.WEBRTC_SIGNAL, (data: unknown) => { - this.emit((socket as ExSocketInterface), data, SockerIoEvent.WEBRTC_SIGNAL); + this.emitVideo((socket as ExSocketInterface), data); }); socket.on(SockerIoEvent.WEBRTC_SCREEN_SHARING_SIGNAL, (data: unknown) => { - this.emitScreenSharing((socket as ExSocketInterface), data, SockerIoEvent.WEBRTC_SCREEN_SHARING_SIGNAL); + this.emitScreenSharing((socket as ExSocketInterface), data); }); socket.on(SockerIoEvent.DISCONNECT, () => { @@ -280,7 +278,7 @@ export class IoSocketController { }); } - emit(socket: ExSocketInterface, data: unknown, event: SockerIoEvent){ + emitVideo(socket: ExSocketInterface, data: unknown){ if (!isWebRtcSignalMessageInterface(data)) { socket.emit(SockerIoEvent.MESSAGE_ERROR, {message: 'Invalid WEBRTC_SIGNAL message.'}); console.warn('Invalid WEBRTC_SIGNAL message received: ', data); @@ -292,25 +290,22 @@ export class IoSocketController { console.warn("While exchanging a WebRTC signal: client with id ", data.receiverId, " does not exist. This might be a race condition."); return; } - return client.emit(event, data); + return client.emit(SockerIoEvent.WEBRTC_SIGNAL, data); } - emitScreenSharing(socket: ExSocketInterface, data: unknown, event: SockerIoEvent){ - if (!isWebRtcScreenSharingSignalMessageInterface(data)) { - socket.emit(SockerIoEvent.MESSAGE_ERROR, {message: 'Invalid WEBRTC_SIGNAL message.'}); - console.warn('Invalid WEBRTC_SIGNAL message received: ', data); + emitScreenSharing(socket: ExSocketInterface, data: unknown){ + if (!isWebRtcSignalMessageInterface(data)) { + socket.emit(SockerIoEvent.MESSAGE_ERROR, {message: 'Invalid WEBRTC_SCREEN_SHARING message.'}); + console.warn('Invalid WEBRTC_SCREEN_SHARING message received: ', data); return; } - if(data.signal.type === "offer"){ - let roomOffer = this.offerScreenSharingByClient.get(data.roomId); - if(!roomOffer){ - roomOffer = new Map(); - } - roomOffer.set(data.userId, data.signal); - this.offerScreenSharingByClient.set(data.roomId, roomOffer); + //send only at user + const client = this.sockets.get(data.receiverId); + if (client === undefined) { + console.warn("While exchanging a WEBRTC_SCREEN_SHARING signal: client with id ", data.receiverId, " does not exist. This might be a race condition."); + return; } - //share at all others clients send only at user - return socket.in(data.roomId).emit(event, data); + return client.emit(SockerIoEvent.WEBRTC_SCREEN_SHARING_SIGNAL, data); } searchClientByIdOrFail(userId: string): ExSocketInterface { @@ -393,13 +388,15 @@ export class IoSocketController { if (this.Io.sockets.adapter.rooms[roomId].length < 2 /*|| this.Io.sockets.adapter.rooms[roomId].length >= 4*/) { return; } + + // TODO: scanning all sockets is maybe not the most efficient const clients: Array = (Object.values(this.Io.sockets.sockets) as Array) .filter((client: ExSocketInterface) => client.webRtcRoomId && client.webRtcRoomId === roomId); //send start at one client to initialise offer webrtc //send all users in room to create PeerConnection in front clients.forEach((client: ExSocketInterface, index: number) => { - const clientsId = clients.reduce((tabs: Array, clientId: ExSocketInterface, indexClientId: number) => { + const peerClients = clients.reduce((tabs: Array, clientId: ExSocketInterface, indexClientId: number) => { if (!clientId.userId || clientId.userId === client.userId) { return tabs; } @@ -411,7 +408,7 @@ export class IoSocketController { return tabs; }, []); - client.emit(SockerIoEvent.WEBRTC_START, {clients: clientsId, roomId: roomId}); + client.emit(SockerIoEvent.WEBRTC_START, {clients: peerClients, roomId: roomId}); }); } diff --git a/back/src/Model/Websocket/WebRtcSignalMessage.ts b/back/src/Model/Websocket/WebRtcSignalMessage.ts index 56a19060..4f59f617 100644 --- a/back/src/Model/Websocket/WebRtcSignalMessage.ts +++ b/back/src/Model/Websocket/WebRtcSignalMessage.ts @@ -12,16 +12,9 @@ export const isWebRtcSignalMessageInterface = roomId: tg.isString, signal: isSignalData }).get(); -export const isWebRtcScreenSharingSignalMessageInterface = - new tg.IsInterface().withProperties({ - userId: tg.isString, - roomId: tg.isString, - signal: isSignalData - }).get(); export const isWebRtcScreenSharingStartMessageInterface = new tg.IsInterface().withProperties({ userId: tg.isString, roomId: tg.isString }).get(); export type WebRtcSignalMessageInterface = tg.GuardedType; -export type WebRtcScreenSharingMessageInterface = tg.GuardedType; diff --git a/front/dist/resources/style/style.css b/front/dist/resources/style/style.css index ac1b1527..413bce71 100644 --- a/front/dist/resources/style/style.css +++ b/front/dist/resources/style/style.css @@ -365,39 +365,3 @@ body { .chat-mode > div:last-child { flex-grow: 5; } - -/*SCREEN SHARING*/ -.active-screen-sharing video{ - transform: scaleX(1); -} -.screen-sharing-video-container { - width: 25%; - position: absolute; -} -.active-screen-sharing .screen-sharing-video-container video:hover{ - width: 200%; - z-index: 11; -} -.active-screen-sharing .screen-sharing-video-container video{ - position: absolute; - width: 100%; - height: auto; - left: 0; - top: 0; - transition: all 0.2s ease; - z-index: 1; -} - -.active-screen-sharing .screen-sharing-video-container:nth-child(1){ - /*this is for camera of user*/ - top: 0%; -} -.active-screen-sharing .screen-sharing-video-container:nth-child(2){ - top: 25%; -} -.active-screen-sharing .screen-sharing-video-container:nth-child(3){ - top: 50%; -} -.active-screen-sharing .screen-sharing-video-container:nth-child(4) { - top: 75%; -} diff --git a/front/src/Connection.ts b/front/src/Connection.ts index b7926328..ec1db6b1 100644 --- a/front/src/Connection.ts +++ b/front/src/Connection.ts @@ -80,14 +80,8 @@ export interface WebRtcDisconnectMessageInterface { } export interface WebRtcSignalMessageInterface { - userId: string, - receiverId: string, // TODO: is this needed? (can we merge this with WebRtcScreenSharingMessageInterface?) - roomId: string, - signal: SignalData -} - -export interface WebRtcScreenSharingMessageInterface { - userId: string, + userId: string, // TODO: is this needed? + receiverId: string, roomId: string, signal: SignalData } @@ -203,9 +197,10 @@ export class Connection implements Connection { }); } - public sendWebrtcScreenSharingSignal(signal: unknown, roomId: string, userId? : string|null) { + public sendWebrtcScreenSharingSignal(signal: unknown, roomId: string, userId? : string|null, receiverId? : string) { return this.socket.emit(EventMessage.WEBRTC_SCREEN_SHARING_SIGNAL, { - userId: userId, + userId: userId ? userId : this.userId, + receiverId: receiverId ? receiverId : this.userId, roomId: roomId, signal: signal }); @@ -219,7 +214,7 @@ export class Connection implements Connection { return this.socket.on(EventMessage.WEBRTC_SIGNAL, callback); } - public receiveWebrtcScreenSharingSignal(callback: (message: WebRtcScreenSharingMessageInterface) => void) { + public receiveWebrtcScreenSharingSignal(callback: (message: WebRtcSignalMessageInterface) => void) { return this.socket.on(EventMessage.WEBRTC_SCREEN_SHARING_SIGNAL, callback); } diff --git a/front/src/WebRtc/MediaManager.ts b/front/src/WebRtc/MediaManager.ts index b63dc515..635174be 100644 --- a/front/src/WebRtc/MediaManager.ts +++ b/front/src/WebRtc/MediaManager.ts @@ -42,13 +42,13 @@ export class MediaManager { this.microphoneClose.style.display = "none"; this.microphoneClose.addEventListener('click', (e: MouseEvent) => { e.preventDefault(); - this.enabledMicrophone(); + this.enableMicrophone(); //update tracking }); this.microphone = this.getElementByIdOrFail('microphone'); this.microphone.addEventListener('click', (e: MouseEvent) => { e.preventDefault(); - this.disabledMicrophone(); + this.disableMicrophone(); //update tracking }); @@ -56,13 +56,13 @@ export class MediaManager { this.cinemaClose.style.display = "none"; this.cinemaClose.addEventListener('click', (e: MouseEvent) => { e.preventDefault(); - this.enabledCamera(); + this.enableCamera(); //update tracking }); this.cinema = this.getElementByIdOrFail('cinema'); this.cinema.addEventListener('click', (e: MouseEvent) => { e.preventDefault(); - this.disabledCamera(); + this.disableCamera(); //update tracking }); @@ -70,24 +70,24 @@ export class MediaManager { this.monitorClose.style.display = "block"; this.monitorClose.addEventListener('click', (e: MouseEvent) => { e.preventDefault(); - this.enabledMonitor(); + this.enableScreenSharing(); //update tracking }); this.monitor = this.getElementByIdOrFail('monitor'); this.monitor.style.display = "none"; this.monitor.addEventListener('click', (e: MouseEvent) => { e.preventDefault(); - this.disabledMonitor(); + this.disableScreenSharing(); //update tracking }); } - onUpdateLocalStream(callback: UpdatedLocalStreamCallback): void { + public onUpdateLocalStream(callback: UpdatedLocalStreamCallback): void { this.updatedLocalStreamCallBacks.add(callback); } - onUpdateScreenSharing(callback: UpdatedScreenSharingCallback): void { + public onUpdateScreenSharing(callback: UpdatedScreenSharingCallback): void { this.updatedScreenSharingCallBacks.add(callback); } @@ -108,12 +108,12 @@ export class MediaManager { } } - activeVisio(){ + showGameOverlay(){ const gameOverlay = this.getElementByIdOrFail('game-overlay'); gameOverlay.classList.add('active'); } - enabledCamera() { + private enableCamera() { this.cinemaClose.style.display = "none"; this.cinema.style.display = "block"; this.constraintsMedia.video = videoConstraint; @@ -122,7 +122,7 @@ export class MediaManager { }); } - disabledCamera() { + private disableCamera() { this.cinemaClose.style.display = "block"; this.cinema.style.display = "none"; this.constraintsMedia.video = false; @@ -137,7 +137,7 @@ export class MediaManager { }); } - enabledMicrophone() { + private enableMicrophone() { this.microphoneClose.style.display = "none"; this.microphone.style.display = "block"; this.constraintsMedia.audio = true; @@ -146,7 +146,7 @@ export class MediaManager { }); } - disabledMicrophone() { + private disableMicrophone() { this.microphoneClose.style.display = "block"; this.microphone.style.display = "none"; this.constraintsMedia.audio = false; @@ -160,7 +160,7 @@ export class MediaManager { }); } - enabledMonitor() { + private enableScreenSharing() { this.monitorClose.style.display = "none"; this.monitor.style.display = "block"; this.getScreenMedia().then((stream) => { @@ -168,7 +168,7 @@ export class MediaManager { }); } - disabledMonitor() { + private disableScreenSharing() { this.monitorClose.style.display = "block"; this.monitor.style.display = "none"; this.localScreenCapture?.getTracks().forEach((track: MediaStreamTrack) => { @@ -299,21 +299,18 @@ export class MediaManager { * @param userId */ addScreenSharingActiveVideo(userId : string){ - userId = `screen-sharing-${userId}`; this.webrtcInAudio.play(); - // FIXME: switch to DisplayManager! - const elementRemoteVideo = this.getElementByIdOrFail("activeScreenSharing"); - elementRemoteVideo.insertAdjacentHTML('beforeend', ` -
    + + userId = `screen-sharing-${userId}`; + const html = ` +
    - `); - const activeHTMLVideoElement : HTMLElement|null = document.getElementById(userId); - if(!activeHTMLVideoElement){ - return; - } - console.log(userId, (activeHTMLVideoElement as HTMLVideoElement)); - this.remoteVideo.set(userId, (activeHTMLVideoElement as HTMLVideoElement)); + `; + + layoutManager.add(DivImportance.Important, userId, html); + + this.remoteVideo.set(userId, this.getElementByIdOrFail(userId)); } /** diff --git a/front/src/WebRtc/SimplePeer.ts b/front/src/WebRtc/SimplePeer.ts index 72786d63..0d2dd068 100644 --- a/front/src/WebRtc/SimplePeer.ts +++ b/front/src/WebRtc/SimplePeer.ts @@ -1,6 +1,6 @@ import { Connection, - WebRtcDisconnectMessageInterface, WebRtcScreenSharingMessageInterface, + WebRtcDisconnectMessageInterface, WebRtcSignalMessageInterface, WebRtcStartMessageInterface } from "../Connection"; @@ -30,18 +30,18 @@ export class SimplePeer { private PeerScreenSharingConnectionArray: Map = new Map(); private PeerConnectionArray: Map = new Map(); - private readonly updateLocalStreamCallback: (media: MediaStream) => void; - private readonly updateScreenSharingCallback: (media: MediaStream) => void; + private readonly sendLocalVideoStreamCallback: (media: MediaStream) => void; + private readonly sendLocalScreenSharingStreamCallback: (media: MediaStream) => void; private readonly peerConnectionListeners: Array = new Array(); constructor(Connection: Connection, WebRtcRoomId: string = "test-webrtc") { this.Connection = Connection; this.WebRtcRoomId = WebRtcRoomId; // We need to go through this weird bound function pointer in order to be able to "free" this reference later. - this.updateLocalStreamCallback = this.updatedLocalStream.bind(this); - this.updateScreenSharingCallback = this.updatedScreenSharing.bind(this); - mediaManager.onUpdateLocalStream(this.updateLocalStreamCallback); - mediaManager.onUpdateScreenSharing(this.updateScreenSharingCallback); + this.sendLocalVideoStreamCallback = this.sendLocalVideoStream.bind(this); + this.sendLocalScreenSharingStreamCallback = this.sendLocalScreenSharingStream.bind(this); + mediaManager.onUpdateLocalStream(this.sendLocalVideoStreamCallback); + mediaManager.onUpdateScreenSharing(this.sendLocalScreenSharingStreamCallback); this.initialise(); } @@ -64,11 +64,11 @@ export class SimplePeer { }); //receive signal by gemer - this.Connection.receiveWebrtcScreenSharingSignal((message: WebRtcScreenSharingMessageInterface) => { + this.Connection.receiveWebrtcScreenSharingSignal((message: WebRtcSignalMessageInterface) => { this.receiveWebrtcScreenSharingSignal(message); }); - mediaManager.activeVisio(); + mediaManager.showGameOverlay(); mediaManager.getCamera().then(() => { //receive message start @@ -88,7 +88,7 @@ export class SimplePeer { private receiveWebrtcStart(data: WebRtcStartMessageInterface) { this.WebRtcRoomId = data.roomId; this.Users = data.clients; - // Note: the clients array contain the list of all clients (event the ones we are already connected to in case a user joints a group) + // Note: the clients array contain the list of all clients (even the ones we are already connected to in case a user joints a group) // So we can receive a request we already had before. (which will abort at the first line of createPeerConnection) // TODO: refactor this to only send a message to connect to one user (rather than several users). // This would be symmetrical to the way we handle disconnection. @@ -102,6 +102,7 @@ export class SimplePeer { * server has two people connected, start the meet */ private startWebRtc() { + console.warn('startWebRtc startWebRtc'); this.Users.forEach((user: UserSimplePeerInterface) => { //if it's not an initiator, peer connection will be created when gamer will receive offer signal if(!user.initiator){ @@ -131,8 +132,11 @@ export class SimplePeer { } if(screenSharing) { - mediaManager.removeActiveScreenSharingVideo(user.userId); - mediaManager.addScreenSharingActiveVideo(user.userId); + // We should display the screen sharing ONLY if we are not initiator + if (!user.initiator) { + mediaManager.removeActiveScreenSharingVideo(user.userId); + mediaManager.addScreenSharingActiveVideo(user.userId); + } }else{ mediaManager.removeActiveVideo(user.userId); mediaManager.addActiveVideo(user.userId, name); @@ -156,17 +160,18 @@ export class SimplePeer { }); if(screenSharing){ this.PeerScreenSharingConnectionArray.set(user.userId, peer); - }else { + } else { this.PeerConnectionArray.set(user.userId, peer); } //start listen signal for the peer connection peer.on('signal', (data: unknown) => { if(screenSharing){ + //console.log('Sending WebRTC offer for screen sharing ', data, ' to ', user.userId); this.sendWebrtcScreenSharingSignal(data, user.userId); - return; + } else { + this.sendWebrtcSignal(data, user.userId); } - this.sendWebrtcSignal(data, user.userId); }); peer.on('stream', (stream: MediaStream) => { @@ -197,6 +202,12 @@ export class SimplePeer { peer.on('connect', () => { mediaManager.isConnected(user.userId); console.info(`connect => ${user.userId}`); + + // When a connection is established to a video stream, and if a screen sharing is taking place, + // the user sharing screen should also initiate a connection to the remote user! + if (screenSharing === false && mediaManager.localScreenCapture) { + this.sendLocalScreenSharingStreamToUser(user.userId); + } }); peer.on('data', (chunk: Buffer) => { @@ -217,9 +228,9 @@ export class SimplePeer { }); if(screenSharing){ - this.addMediaScreenSharing(user.userId); + this.pushScreenSharingToRemoteUser(user.userId); }else { - this.addMedia(user.userId); + this.pushVideoToRemoteUser(user.userId); } for (const peerConnectionListener of this.peerConnectionListeners) { @@ -290,7 +301,7 @@ export class SimplePeer { * Unregisters any held event handler. */ public unregister() { - mediaManager.removeUpdateLocalStreamEventListener(this.updateLocalStreamCallback); + mediaManager.removeUpdateLocalStreamEventListener(this.sendLocalVideoStreamCallback); } /** @@ -299,7 +310,6 @@ export class SimplePeer { * @param data */ private sendWebrtcSignal(data: unknown, userId : string) { - console.log("sendWebrtcSignal", data); try { this.Connection.sendWebrtcSignal(data, this.WebRtcRoomId, null, userId); }catch (e) { @@ -315,7 +325,7 @@ export class SimplePeer { private sendWebrtcScreenSharingSignal(data: unknown, userId : string) { console.log("sendWebrtcScreenSharingSignal", data); try { - this.Connection.sendWebrtcScreenSharingSignal(data, this.WebRtcRoomId, userId); + this.Connection.sendWebrtcScreenSharingSignal(data, this.WebRtcRoomId, null, userId); }catch (e) { console.error(`sendWebrtcScreenSharingSignal => ${userId}`, e); } @@ -339,7 +349,7 @@ export class SimplePeer { } } - private receiveWebrtcScreenSharingSignal(data: WebRtcScreenSharingMessageInterface) { + private receiveWebrtcScreenSharingSignal(data: WebRtcSignalMessageInterface) { console.log("receiveWebrtcScreenSharingSignal", data); try { //if offer type, create peer connection @@ -384,7 +394,7 @@ export class SimplePeer { * * @param userId */ - private addMedia (userId : string) { + private pushVideoToRemoteUser(userId : string) { try { const PeerConnection = this.PeerConnectionArray.get(userId); if (!PeerConnection) { @@ -396,74 +406,80 @@ export class SimplePeer { if(!localStream){ return; } - if (localStream) { - for (const track of localStream.getTracks()) { - PeerConnection.addTrack(track, localStream); - } + + for (const track of localStream.getTracks()) { + PeerConnection.addTrack(track, localStream); } }catch (e) { - console.error(`addMedia => addMedia => ${userId}`, e); + console.error(`pushVideoToRemoteUser => ${userId}`, e); } } - private addMediaScreenSharing(userId : string) { + private pushScreenSharingToRemoteUser(userId : string) { const PeerConnection = this.PeerScreenSharingConnectionArray.get(userId); if (!PeerConnection) { - throw new Error('While adding media, cannot find user with ID ' + userId); + throw new Error('While pushing screen sharing, cannot find user with ID ' + userId); } const localScreenCapture: MediaStream | null = mediaManager.localScreenCapture; if(!localScreenCapture){ return; } - /*for (const track of localScreenCapture.getTracks()) { + + for (const track of localScreenCapture.getTracks()) { PeerConnection.addTrack(track, localScreenCapture); - }*/ + } return; } - updatedLocalStream(){ + public sendLocalVideoStream(){ this.Users.forEach((user: UserSimplePeerInterface) => { - this.addMedia(user.userId); + this.pushVideoToRemoteUser(user.userId); }) } - updatedScreenSharing() { + /** + * Triggered locally when clicking on the screen sharing button + */ + public sendLocalScreenSharingStream() { if (mediaManager.localScreenCapture) { - - //this.Connection.sendWebrtcScreenSharingStart(this.WebRtcRoomId); - - const userId = this.Connection.getUserId(); - if(!userId){ - return; + for (const user of this.Users) { + this.sendLocalScreenSharingStreamToUser(user.userId); } - const screenSharingUser: UserSimplePeerInterface = { - userId, - initiator: true - }; - const PeerConnectionScreenSharing = this.createPeerConnection(screenSharingUser, true); - if (!PeerConnectionScreenSharing) { - return; - } - try { - for (const track of mediaManager.localScreenCapture.getTracks()) { - PeerConnectionScreenSharing.addTrack(track, mediaManager.localScreenCapture); - } - }catch (e) { - console.error("updatedScreenSharing => ", e); - } - mediaManager.addStreamRemoteScreenSharing(screenSharingUser.userId, mediaManager.localScreenCapture); } else { - const userId = this.Connection.getUserId(); - if (!userId || !this.PeerScreenSharingConnectionArray.has(userId)) { - return; + for (const user of this.Users) { + this.stopLocalScreenSharingStreamToUser(user.userId); } - const PeerConnectionScreenSharing = this.PeerScreenSharingConnectionArray.get(userId); - console.log("updatedScreenSharing => destroy", PeerConnectionScreenSharing); - if (!PeerConnectionScreenSharing) { - return; - } - PeerConnectionScreenSharing.destroy(); - this.PeerScreenSharingConnectionArray.delete(userId); } } + + private sendLocalScreenSharingStreamToUser(userId: string): void { + // If a connection already exists with user (because it is already sharing a screen with us... let's use this connection) + if (this.PeerScreenSharingConnectionArray.has(userId)) { + this.pushScreenSharingToRemoteUser(userId); + return; + } + + const screenSharingUser: UserSimplePeerInterface = { + userId, + initiator: true + }; + const PeerConnectionScreenSharing = this.createPeerConnection(screenSharingUser, true); + if (!PeerConnectionScreenSharing) { + return; + } + } + + private stopLocalScreenSharingStreamToUser(userId: string): void { + const PeerConnectionScreenSharing = this.PeerScreenSharingConnectionArray.get(userId); + if (!PeerConnectionScreenSharing) { + throw new Error('Weird, screen sharing connection to user ' + userId + 'not found') + } + + console.log("updatedScreenSharing => destroy", PeerConnectionScreenSharing); + // FIXME: maybe we don't want to destroy the connexion if it is used in the other way around! + // FIXME: maybe we don't want to destroy the connexion if it is used in the other way around! + // FIXME: maybe we don't want to destroy the connexion if it is used in the other way around! + PeerConnectionScreenSharing.destroy(); + this.PeerScreenSharingConnectionArray.delete(userId); + } } From 894f7c8009dda668763a5af4962dceb8a3b44779 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20N=C3=A9grier?= Date: Thu, 20 Aug 2020 15:21:07 +0200 Subject: [PATCH 101/313] Removing useless roomID parameter in WebRtcSignal message --- back/src/Model/Websocket/WebRtcSignalMessage.ts | 1 - front/src/Connection.ts | 11 ++++------- front/src/WebRtc/SimplePeer.ts | 4 ++-- 3 files changed, 6 insertions(+), 10 deletions(-) diff --git a/back/src/Model/Websocket/WebRtcSignalMessage.ts b/back/src/Model/Websocket/WebRtcSignalMessage.ts index 4f59f617..865319be 100644 --- a/back/src/Model/Websocket/WebRtcSignalMessage.ts +++ b/back/src/Model/Websocket/WebRtcSignalMessage.ts @@ -9,7 +9,6 @@ export const isWebRtcSignalMessageInterface = new tg.IsInterface().withProperties({ userId: tg.isString, receiverId: tg.isString, - roomId: tg.isString, signal: isSignalData }).get(); export const isWebRtcScreenSharingStartMessageInterface = diff --git a/front/src/Connection.ts b/front/src/Connection.ts index ec1db6b1..4cb95d01 100644 --- a/front/src/Connection.ts +++ b/front/src/Connection.ts @@ -82,7 +82,6 @@ export interface WebRtcDisconnectMessageInterface { export interface WebRtcSignalMessageInterface { userId: string, // TODO: is this needed? receiverId: string, - roomId: string, signal: SignalData } @@ -188,22 +187,20 @@ export class Connection implements Connection { this.socket.on(EventMessage.CONNECT_ERROR, callback) } - public sendWebrtcSignal(signal: unknown, roomId: string, userId? : string|null, receiverId? : string) { + public sendWebrtcSignal(signal: unknown, userId? : string|null, receiverId? : string) { return this.socket.emit(EventMessage.WEBRTC_SIGNAL, { userId: userId ? userId : this.userId, receiverId: receiverId ? receiverId : this.userId, - roomId: roomId, signal: signal - }); + } as WebRtcSignalMessageInterface); } - public sendWebrtcScreenSharingSignal(signal: unknown, roomId: string, userId? : string|null, receiverId? : string) { + public sendWebrtcScreenSharingSignal(signal: unknown, userId? : string|null, receiverId? : string) { return this.socket.emit(EventMessage.WEBRTC_SCREEN_SHARING_SIGNAL, { userId: userId ? userId : this.userId, receiverId: receiverId ? receiverId : this.userId, - roomId: roomId, signal: signal - }); + } as WebRtcSignalMessageInterface); } public receiveWebrtcStart(callback: (message: WebRtcStartMessageInterface) => void) { diff --git a/front/src/WebRtc/SimplePeer.ts b/front/src/WebRtc/SimplePeer.ts index 0d2dd068..17a92b5b 100644 --- a/front/src/WebRtc/SimplePeer.ts +++ b/front/src/WebRtc/SimplePeer.ts @@ -311,7 +311,7 @@ export class SimplePeer { */ private sendWebrtcSignal(data: unknown, userId : string) { try { - this.Connection.sendWebrtcSignal(data, this.WebRtcRoomId, null, userId); + this.Connection.sendWebrtcSignal(data, null, userId); }catch (e) { console.error(`sendWebrtcSignal => ${userId}`, e); } @@ -325,7 +325,7 @@ export class SimplePeer { private sendWebrtcScreenSharingSignal(data: unknown, userId : string) { console.log("sendWebrtcScreenSharingSignal", data); try { - this.Connection.sendWebrtcScreenSharingSignal(data, this.WebRtcRoomId, null, userId); + this.Connection.sendWebrtcScreenSharingSignal(data, null, userId); }catch (e) { console.error(`sendWebrtcScreenSharingSignal => ${userId}`, e); } From 27ffb6b13d77972de5dc29616e8629ebacae063f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20N=C3=A9grier?= Date: Thu, 20 Aug 2020 16:56:10 +0200 Subject: [PATCH 102/313] Refactoring SimplePeer code: splitting Peer instantiation into 2 subclasses (VideoPeer and ScreenSharingPeer). This leads to way leaner code. --- back/src/Controller/IoSocketController.ts | 10 +- .../Model/Websocket/WebRtcSignalMessage.ts | 1 - front/src/Connection.ts | 26 ++- front/src/WebRtc/ScreenSharingPeer.ts | 106 +++++++++ front/src/WebRtc/SimplePeer.ts | 209 +++++------------- front/src/WebRtc/VideoPeer.ts | 128 +++++++++++ front/tsconfig.json | 3 +- 7 files changed, 307 insertions(+), 176 deletions(-) create mode 100644 front/src/WebRtc/ScreenSharingPeer.ts create mode 100644 front/src/WebRtc/VideoPeer.ts diff --git a/back/src/Controller/IoSocketController.ts b/back/src/Controller/IoSocketController.ts index 501c6145..2eca7e44 100644 --- a/back/src/Controller/IoSocketController.ts +++ b/back/src/Controller/IoSocketController.ts @@ -290,7 +290,10 @@ export class IoSocketController { console.warn("While exchanging a WebRTC signal: client with id ", data.receiverId, " does not exist. This might be a race condition."); return; } - return client.emit(SockerIoEvent.WEBRTC_SIGNAL, data); + return client.emit(SockerIoEvent.WEBRTC_SIGNAL, { + userId: socket.userId, + signal: data.signal + }); } emitScreenSharing(socket: ExSocketInterface, data: unknown){ @@ -305,7 +308,10 @@ export class IoSocketController { console.warn("While exchanging a WEBRTC_SCREEN_SHARING signal: client with id ", data.receiverId, " does not exist. This might be a race condition."); return; } - return client.emit(SockerIoEvent.WEBRTC_SCREEN_SHARING_SIGNAL, data); + return client.emit(SockerIoEvent.WEBRTC_SCREEN_SHARING_SIGNAL, { + userId: socket.userId, + signal: data.signal + }); } searchClientByIdOrFail(userId: string): ExSocketInterface { diff --git a/back/src/Model/Websocket/WebRtcSignalMessage.ts b/back/src/Model/Websocket/WebRtcSignalMessage.ts index 865319be..5a0dd1af 100644 --- a/back/src/Model/Websocket/WebRtcSignalMessage.ts +++ b/back/src/Model/Websocket/WebRtcSignalMessage.ts @@ -7,7 +7,6 @@ export const isSignalData = export const isWebRtcSignalMessageInterface = new tg.IsInterface().withProperties({ - userId: tg.isString, receiverId: tg.isString, signal: isSignalData }).get(); diff --git a/front/src/Connection.ts b/front/src/Connection.ts index 4cb95d01..783b5d41 100644 --- a/front/src/Connection.ts +++ b/front/src/Connection.ts @@ -79,12 +79,16 @@ export interface WebRtcDisconnectMessageInterface { userId: string } -export interface WebRtcSignalMessageInterface { - userId: string, // TODO: is this needed? +export interface WebRtcSignalSentMessageInterface { receiverId: string, signal: SignalData } +export interface WebRtcSignalReceivedMessageInterface { + userId: string, + signal: SignalData +} + export interface StartMapInterface { mapUrlStart: string, startInstance: string @@ -187,31 +191,29 @@ export class Connection implements Connection { this.socket.on(EventMessage.CONNECT_ERROR, callback) } - public sendWebrtcSignal(signal: unknown, userId? : string|null, receiverId? : string) { + public sendWebrtcSignal(signal: unknown, receiverId : string) { return this.socket.emit(EventMessage.WEBRTC_SIGNAL, { - userId: userId ? userId : this.userId, - receiverId: receiverId ? receiverId : this.userId, + receiverId: receiverId, signal: signal - } as WebRtcSignalMessageInterface); + } as WebRtcSignalSentMessageInterface); } - public sendWebrtcScreenSharingSignal(signal: unknown, userId? : string|null, receiverId? : string) { + public sendWebrtcScreenSharingSignal(signal: unknown, receiverId : string) { return this.socket.emit(EventMessage.WEBRTC_SCREEN_SHARING_SIGNAL, { - userId: userId ? userId : this.userId, - receiverId: receiverId ? receiverId : this.userId, + receiverId: receiverId, signal: signal - } as WebRtcSignalMessageInterface); + } as WebRtcSignalSentMessageInterface); } public receiveWebrtcStart(callback: (message: WebRtcStartMessageInterface) => void) { this.socket.on(EventMessage.WEBRTC_START, callback); } - public receiveWebrtcSignal(callback: (message: WebRtcSignalMessageInterface) => void) { + public receiveWebrtcSignal(callback: (message: WebRtcSignalReceivedMessageInterface) => void) { return this.socket.on(EventMessage.WEBRTC_SIGNAL, callback); } - public receiveWebrtcScreenSharingSignal(callback: (message: WebRtcSignalMessageInterface) => void) { + public receiveWebrtcScreenSharingSignal(callback: (message: WebRtcSignalReceivedMessageInterface) => void) { return this.socket.on(EventMessage.WEBRTC_SCREEN_SHARING_SIGNAL, callback); } diff --git a/front/src/WebRtc/ScreenSharingPeer.ts b/front/src/WebRtc/ScreenSharingPeer.ts new file mode 100644 index 00000000..4b03940c --- /dev/null +++ b/front/src/WebRtc/ScreenSharingPeer.ts @@ -0,0 +1,106 @@ +import * as SimplePeerNamespace from "simple-peer"; +import {mediaManager} from "./MediaManager"; +import {Connection} from "../Connection"; + +const Peer: SimplePeerNamespace.SimplePeer = require('simple-peer'); + +/** + * A peer connection used to transmit video / audio signals between 2 peers. + */ +export class ScreenSharingPeer extends Peer { + constructor(private userId: string, initiator: boolean, private connection: Connection) { + super({ + initiator: initiator ? initiator : false, + reconnectTimer: 10000, + config: { + iceServers: [ + { + urls: 'stun:stun.l.google.com:19302' + }, + { + urls: 'turn:numb.viagenie.ca', + username: 'g.parant@thecodingmachine.com', + credential: 'itcugcOHxle9Acqi$' + }, + ] + } + }); + + //start listen signal for the peer connection + this.on('signal', (data: unknown) => { + this.sendWebrtcScreenSharingSignal(data); + }); + + this.on('stream', (stream: MediaStream) => { + this.stream(stream); + }); + + /*this.on('track', (track: MediaStreamTrack, stream: MediaStream) => { + });*/ + + this.on('close', () => { + this.closeScreenSharingConnection(); + }); + + // eslint-disable-next-line @typescript-eslint/no-explicit-any + this.on('error', (err: any) => { + console.error(`screen sharing error => ${this.userId} => ${err.code}`, err); + //mediaManager.isErrorScreenSharing(this.userId); + }); + + this.on('connect', () => { + // FIXME: we need to put the loader on the screen sharing connection + mediaManager.isConnected(this.userId); + console.info(`connect => ${this.userId}`); + }); + + this.pushScreenSharingToRemoteUser(); + } + + private sendWebrtcScreenSharingSignal(data: unknown) { + console.log("sendWebrtcScreenSharingSignal", data); + try { + this.connection.sendWebrtcScreenSharingSignal(data, this.userId); + }catch (e) { + console.error(`sendWebrtcScreenSharingSignal => ${this.userId}`, e); + } + } + + /** + * Sends received stream to screen. + */ + private stream(stream?: MediaStream) { + console.log(`ScreenSharingPeer::stream => ${this.userId}`, stream); + console.log(`stream => ${this.userId} => `, stream); + if(!stream){ + mediaManager.removeActiveScreenSharingVideo(this.userId); + } else { + mediaManager.addStreamRemoteScreenSharing(this.userId, stream); + } + } + + public closeScreenSharingConnection() { + try { + mediaManager.removeActiveScreenSharingVideo(this.userId); + // FIXME: I don't understand why "Closing connection with" message is displayed TWICE before "Nb users in peerConnectionArray" + // I do understand the method closeConnection is called twice, but I don't understand how they manage to run in parallel. + //console.log('Closing connection with '+userId); + this.destroy(); + //console.log('Nb users in peerConnectionArray '+this.PeerConnectionArray.size); + } catch (err) { + console.error("closeConnection", err) + } + } + + private pushScreenSharingToRemoteUser() { + const localScreenCapture: MediaStream | null = mediaManager.localScreenCapture; + if(!localScreenCapture){ + return; + } + + for (const track of localScreenCapture.getTracks()) { + this.addTrack(track, localScreenCapture); + } + return; + } +} diff --git a/front/src/WebRtc/SimplePeer.ts b/front/src/WebRtc/SimplePeer.ts index 17a92b5b..489f07a7 100644 --- a/front/src/WebRtc/SimplePeer.ts +++ b/front/src/WebRtc/SimplePeer.ts @@ -1,11 +1,13 @@ import { Connection, WebRtcDisconnectMessageInterface, - WebRtcSignalMessageInterface, + WebRtcSignalReceivedMessageInterface, WebRtcStartMessageInterface } from "../Connection"; import { mediaManager } from "./MediaManager"; import * as SimplePeerNamespace from "simple-peer"; +import {ScreenSharingPeer} from "./ScreenSharingPeer"; +import {VideoPeer} from "./VideoPeer"; const Peer: SimplePeerNamespace.SimplePeer = require('simple-peer'); export interface UserSimplePeerInterface{ @@ -28,8 +30,8 @@ export class SimplePeer { private WebRtcRoomId: string; private Users: Array = new Array(); - private PeerScreenSharingConnectionArray: Map = new Map(); - private PeerConnectionArray: Map = new Map(); + private PeerScreenSharingConnectionArray: Map = new Map(); + private PeerConnectionArray: Map = new Map(); private readonly sendLocalVideoStreamCallback: (media: MediaStream) => void; private readonly sendLocalScreenSharingStreamCallback: (media: MediaStream) => void; private readonly peerConnectionListeners: Array = new Array(); @@ -59,12 +61,12 @@ export class SimplePeer { private initialise() { //receive signal by gemer - this.Connection.receiveWebrtcSignal((message: WebRtcSignalMessageInterface) => { + this.Connection.receiveWebrtcSignal((message: WebRtcSignalReceivedMessageInterface) => { this.receiveWebrtcSignal(message); }); //receive signal by gemer - this.Connection.receiveWebrtcScreenSharingSignal((message: WebRtcSignalMessageInterface) => { + this.Connection.receiveWebrtcScreenSharingSignal((message: WebRtcSignalReceivedMessageInterface) => { this.receiveWebrtcScreenSharingSignal(message); }); @@ -115,10 +117,9 @@ export class SimplePeer { /** * create peer connection to bind users */ - private createPeerConnection(user : UserSimplePeerInterface, screenSharing: boolean = false) : SimplePeerNamespace.Instance | null{ + private createPeerConnection(user : UserSimplePeerInterface) : VideoPeer | null{ if( - (screenSharing && this.PeerScreenSharingConnectionArray.has(user.userId)) - || (!screenSharing && this.PeerConnectionArray.has(user.userId)) + this.PeerConnectionArray.has(user.userId) ){ return null; } @@ -131,107 +132,43 @@ export class SimplePeer { } } - if(screenSharing) { - // We should display the screen sharing ONLY if we are not initiator - if (!user.initiator) { - mediaManager.removeActiveScreenSharingVideo(user.userId); - mediaManager.addScreenSharingActiveVideo(user.userId); - } - }else{ - mediaManager.removeActiveVideo(user.userId); - mediaManager.addActiveVideo(user.userId, name); - } - - const peer : SimplePeerNamespace.Instance = new Peer({ - initiator: user.initiator ? user.initiator : false, - reconnectTimer: 10000, - config: { - iceServers: [ - { - urls: 'stun:stun.l.google.com:19302' - }, - { - urls: 'turn:numb.viagenie.ca', - username: 'g.parant@thecodingmachine.com', - credential: 'itcugcOHxle9Acqi$' - }, - ] - } - }); - if(screenSharing){ - this.PeerScreenSharingConnectionArray.set(user.userId, peer); - } else { - this.PeerConnectionArray.set(user.userId, peer); - } - - //start listen signal for the peer connection - peer.on('signal', (data: unknown) => { - if(screenSharing){ - //console.log('Sending WebRTC offer for screen sharing ', data, ' to ', user.userId); - this.sendWebrtcScreenSharingSignal(data, user.userId); - } else { - this.sendWebrtcSignal(data, user.userId); - } - }); - - peer.on('stream', (stream: MediaStream) => { - this.stream(user.userId, stream, screenSharing); - }); - - /*peer.on('track', (track: MediaStreamTrack, stream: MediaStream) => { - });*/ - - peer.on('close', () => { - if(screenSharing){ - this.closeScreenSharingConnection(user.userId); - return; - } - this.closeConnection(user.userId); - }); - - // eslint-disable-next-line @typescript-eslint/no-explicit-any - peer.on('error', (err: any) => { - console.error(`error => ${user.userId} => ${err.code}`, err); - if(screenSharing){ - //mediaManager.isErrorScreenSharing(user.userId); - return; - } - mediaManager.isError(user.userId); - }); + mediaManager.removeActiveVideo(user.userId); + mediaManager.addActiveVideo(user.userId, name); + let peer = new VideoPeer(user.userId, user.initiator ? user.initiator : false, this.Connection); + // When a connection is established to a video stream, and if a screen sharing is taking place, + // the user sharing screen should also initiate a connection to the remote user! peer.on('connect', () => { - mediaManager.isConnected(user.userId); - console.info(`connect => ${user.userId}`); - - // When a connection is established to a video stream, and if a screen sharing is taking place, - // the user sharing screen should also initiate a connection to the remote user! - if (screenSharing === false && mediaManager.localScreenCapture) { + if (mediaManager.localScreenCapture) { this.sendLocalScreenSharingStreamToUser(user.userId); } }); + this.PeerConnectionArray.set(user.userId, peer); - peer.on('data', (chunk: Buffer) => { - const constraint = JSON.parse(chunk.toString('utf8')); - console.log("data", constraint); - if (constraint.audio) { - mediaManager.enabledMicrophoneByUserId(user.userId); - } else { - mediaManager.disabledMicrophoneByUserId(user.userId); - } - - if (constraint.video || constraint.screen) { - mediaManager.enabledVideoByUserId(user.userId); - } else { - this.stream(user.userId); - mediaManager.disabledVideoByUserId(user.userId); - } - }); - - if(screenSharing){ - this.pushScreenSharingToRemoteUser(user.userId); - }else { - this.pushVideoToRemoteUser(user.userId); + for (const peerConnectionListener of this.peerConnectionListeners) { + peerConnectionListener.onConnect(user); } + return peer; + } + + /** + * create peer connection to bind users + */ + private createPeerScreenSharingConnection(user : UserSimplePeerInterface) : ScreenSharingPeer | null{ + if( + this.PeerScreenSharingConnectionArray.has(user.userId) + ){ + return null; + } + + // We should display the screen sharing ONLY if we are not initiator + if (!user.initiator) { + mediaManager.removeActiveScreenSharingVideo(user.userId); + mediaManager.addScreenSharingActiveVideo(user.userId); + } + + let peer = new ScreenSharingPeer(user.userId, user.initiator ? user.initiator : false, this.Connection); + this.PeerScreenSharingConnectionArray.set(user.userId, peer); for (const peerConnectionListener of this.peerConnectionListeners) { peerConnectionListener.onConnect(user); @@ -246,16 +183,16 @@ export class SimplePeer { */ private closeConnection(userId : string) { try { - mediaManager.removeActiveVideo(userId); + //mediaManager.removeActiveVideo(userId); const peer = this.PeerConnectionArray.get(userId); if (peer === undefined) { console.warn("Tried to close connection for user "+userId+" but could not find user") return; } + peer.closeConnection(); // FIXME: I don't understand why "Closing connection with" message is displayed TWICE before "Nb users in peerConnectionArray" // I do understand the method closeConnection is called twice, but I don't understand how they manage to run in parallel. //console.log('Closing connection with '+userId); - peer.destroy(); this.PeerConnectionArray.delete(userId); this.closeScreenSharingConnection(userId); //console.log('Nb users in peerConnectionArray '+this.PeerConnectionArray.size); @@ -283,7 +220,7 @@ export class SimplePeer { // FIXME: I don't understand why "Closing connection with" message is displayed TWICE before "Nb users in peerConnectionArray" // I do understand the method closeConnection is called twice, but I don't understand how they manage to run in parallel. //console.log('Closing connection with '+userId); - peer.destroy(); + peer.closeScreenSharingConnection(); this.PeerScreenSharingConnectionArray.delete(userId) //console.log('Nb users in peerConnectionArray '+this.PeerConnectionArray.size); } catch (err) { @@ -295,6 +232,10 @@ export class SimplePeer { for (const userId of this.PeerConnectionArray.keys()) { this.closeConnection(userId); } + + for (const userId of this.PeerScreenSharingConnectionArray.keys()) { + this.closeScreenSharingConnection(userId); + } } /** @@ -304,35 +245,8 @@ export class SimplePeer { mediaManager.removeUpdateLocalStreamEventListener(this.sendLocalVideoStreamCallback); } - /** - * - * @param userId - * @param data - */ - private sendWebrtcSignal(data: unknown, userId : string) { - try { - this.Connection.sendWebrtcSignal(data, null, userId); - }catch (e) { - console.error(`sendWebrtcSignal => ${userId}`, e); - } - } - - /** - * - * @param userId - * @param data - */ - private sendWebrtcScreenSharingSignal(data: unknown, userId : string) { - console.log("sendWebrtcScreenSharingSignal", data); - try { - this.Connection.sendWebrtcScreenSharingSignal(data, null, userId); - }catch (e) { - console.error(`sendWebrtcScreenSharingSignal => ${userId}`, e); - } - } - // eslint-disable-next-line @typescript-eslint/no-explicit-any - private receiveWebrtcSignal(data: WebRtcSignalMessageInterface) { + private receiveWebrtcSignal(data: WebRtcSignalReceivedMessageInterface) { try { //if offer type, create peer connection if(data.signal.type === "offer"){ @@ -349,12 +263,12 @@ export class SimplePeer { } } - private receiveWebrtcScreenSharingSignal(data: WebRtcSignalMessageInterface) { + private receiveWebrtcScreenSharingSignal(data: WebRtcSignalReceivedMessageInterface) { console.log("receiveWebrtcScreenSharingSignal", data); try { //if offer type, create peer connection if(data.signal.type === "offer"){ - this.createPeerConnection(data, true); + this.createPeerScreenSharingConnection(data); } const peer = this.PeerScreenSharingConnectionArray.get(data.userId); if (peer !== undefined) { @@ -367,29 +281,6 @@ export class SimplePeer { } } - /** - * - * @param userId - * @param stream - */ - private stream(userId : string, stream?: MediaStream, screenSharing?: boolean) { - console.log(`stream => ${userId} => screenSharing => ${screenSharing}`, stream); - if(screenSharing){ - if(!stream){ - mediaManager.removeActiveScreenSharingVideo(userId); - return; - } - mediaManager.addStreamRemoteScreenSharing(userId, stream); - return; - } - if(!stream){ - mediaManager.disabledVideoByUserId(userId); - mediaManager.disabledMicrophoneByUserId(userId); - return; - } - mediaManager.addStreamRemoteVideo(userId, stream); - } - /** * * @param userId @@ -463,7 +354,7 @@ export class SimplePeer { userId, initiator: true }; - const PeerConnectionScreenSharing = this.createPeerConnection(screenSharingUser, true); + const PeerConnectionScreenSharing = this.createPeerScreenSharingConnection(screenSharingUser); if (!PeerConnectionScreenSharing) { return; } diff --git a/front/src/WebRtc/VideoPeer.ts b/front/src/WebRtc/VideoPeer.ts new file mode 100644 index 00000000..bb624250 --- /dev/null +++ b/front/src/WebRtc/VideoPeer.ts @@ -0,0 +1,128 @@ +import * as SimplePeerNamespace from "simple-peer"; +import {mediaManager} from "./MediaManager"; +import {Connection} from "../Connection"; + +const Peer: SimplePeerNamespace.SimplePeer = require('simple-peer'); + +/** + * A peer connection used to transmit video / audio signals between 2 peers. + */ +export class VideoPeer extends Peer { + constructor(private userId: string, initiator: boolean, private connection: Connection) { + super({ + initiator: initiator ? initiator : false, + reconnectTimer: 10000, + config: { + iceServers: [ + { + urls: 'stun:stun.l.google.com:19302' + }, + { + urls: 'turn:numb.viagenie.ca', + username: 'g.parant@thecodingmachine.com', + credential: 'itcugcOHxle9Acqi$' + }, + ] + } + }); + + //start listen signal for the peer connection + this.on('signal', (data: unknown) => { + this.sendWebrtcSignal(data); + }); + + this.on('stream', (stream: MediaStream) => { + this.stream(stream); + }); + + /*peer.on('track', (track: MediaStreamTrack, stream: MediaStream) => { + });*/ + + this.on('close', () => { + this.closeConnection(); + }); + + // eslint-disable-next-line @typescript-eslint/no-explicit-any + this.on('error', (err: any) => { + console.error(`error => ${this.userId} => ${err.code}`, err); + mediaManager.isError(userId); + }); + + this.on('connect', () => { + mediaManager.isConnected(this.userId); + console.info(`connect => ${this.userId}`); + }); + + this.on('data', (chunk: Buffer) => { + const constraint = JSON.parse(chunk.toString('utf8')); + console.log("data", constraint); + if (constraint.audio) { + mediaManager.enabledMicrophoneByUserId(this.userId); + } else { + mediaManager.disabledMicrophoneByUserId(this.userId); + } + + if (constraint.video || constraint.screen) { + mediaManager.enabledVideoByUserId(this.userId); + } else { + this.stream(undefined); + mediaManager.disabledVideoByUserId(this.userId); + } + }); + + this.pushVideoToRemoteUser(); + } + + private sendWebrtcSignal(data: unknown) { + try { + this.connection.sendWebrtcSignal(data, this.userId); + }catch (e) { + console.error(`sendWebrtcSignal => ${this.userId}`, e); + } + } + + /** + * Sends received stream to screen. + */ + private stream(stream?: MediaStream) { + console.log(`VideoPeer::stream => ${this.userId}`, stream); + if(!stream){ + mediaManager.disabledVideoByUserId(this.userId); + mediaManager.disabledMicrophoneByUserId(this.userId); + } else { + mediaManager.addStreamRemoteVideo(this.userId, stream); + } + } + + /** + * This is triggered twice. Once by the server, and once by a remote client disconnecting + */ + public closeConnection() { + try { + mediaManager.removeActiveVideo(this.userId); + // FIXME: I don't understand why "Closing connection with" message is displayed TWICE before "Nb users in peerConnectionArray" + // I do understand the method closeConnection is called twice, but I don't understand how they manage to run in parallel. + //console.log('Closing connection with '+userId); + this.destroy(); + } catch (err) { + console.error("closeConnection", err) + } + } + + private pushVideoToRemoteUser() { + try { + const localStream: MediaStream | null = mediaManager.localStream; + this.write(new Buffer(JSON.stringify(mediaManager.constraintsMedia))); + + if(!localStream){ + return; + } + + for (const track of localStream.getTracks()) { + this.addTrack(track, localStream); + } + }catch (e) { + console.error(`pushVideoToRemoteUser => ${this.userId}`, e); + } + } +} diff --git a/front/tsconfig.json b/front/tsconfig.json index e56a6ee7..64d71e42 100644 --- a/front/tsconfig.json +++ b/front/tsconfig.json @@ -3,9 +3,8 @@ "outDir": "./dist/", "sourceMap": true, "moduleResolution": "node", - "noImplicitAny": true, "module": "CommonJS", - "target": "es5", + "target": "es6", "downlevelIteration": true, "jsx": "react", "allowJs": true, From 11624394792adc9e7ae3776e524d35093572c7d5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20N=C3=A9grier?= Date: Thu, 20 Aug 2020 22:23:22 +0200 Subject: [PATCH 103/313] Overloading destroy method instead of having a separate method to remove video. --- front/src/WebRtc/ScreenSharingPeer.ts | 8 ++++---- front/src/WebRtc/SimplePeer.ts | 4 ++-- front/src/WebRtc/VideoPeer.ts | 8 ++++---- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/front/src/WebRtc/ScreenSharingPeer.ts b/front/src/WebRtc/ScreenSharingPeer.ts index 4b03940c..3ce3c409 100644 --- a/front/src/WebRtc/ScreenSharingPeer.ts +++ b/front/src/WebRtc/ScreenSharingPeer.ts @@ -39,7 +39,7 @@ export class ScreenSharingPeer extends Peer { });*/ this.on('close', () => { - this.closeScreenSharingConnection(); + this.destroy(); }); // eslint-disable-next-line @typescript-eslint/no-explicit-any @@ -79,16 +79,16 @@ export class ScreenSharingPeer extends Peer { } } - public closeScreenSharingConnection() { + public destroy(error?: Error): void { try { mediaManager.removeActiveScreenSharingVideo(this.userId); // FIXME: I don't understand why "Closing connection with" message is displayed TWICE before "Nb users in peerConnectionArray" // I do understand the method closeConnection is called twice, but I don't understand how they manage to run in parallel. //console.log('Closing connection with '+userId); - this.destroy(); + super.destroy(error); //console.log('Nb users in peerConnectionArray '+this.PeerConnectionArray.size); } catch (err) { - console.error("closeConnection", err) + console.error("ScreenSharingPeer::destroy", err) } } diff --git a/front/src/WebRtc/SimplePeer.ts b/front/src/WebRtc/SimplePeer.ts index 489f07a7..498a8608 100644 --- a/front/src/WebRtc/SimplePeer.ts +++ b/front/src/WebRtc/SimplePeer.ts @@ -189,7 +189,7 @@ export class SimplePeer { console.warn("Tried to close connection for user "+userId+" but could not find user") return; } - peer.closeConnection(); + peer.destroy(); // FIXME: I don't understand why "Closing connection with" message is displayed TWICE before "Nb users in peerConnectionArray" // I do understand the method closeConnection is called twice, but I don't understand how they manage to run in parallel. //console.log('Closing connection with '+userId); @@ -220,7 +220,7 @@ export class SimplePeer { // FIXME: I don't understand why "Closing connection with" message is displayed TWICE before "Nb users in peerConnectionArray" // I do understand the method closeConnection is called twice, but I don't understand how they manage to run in parallel. //console.log('Closing connection with '+userId); - peer.closeScreenSharingConnection(); + peer.destroy(); this.PeerScreenSharingConnectionArray.delete(userId) //console.log('Nb users in peerConnectionArray '+this.PeerConnectionArray.size); } catch (err) { diff --git a/front/src/WebRtc/VideoPeer.ts b/front/src/WebRtc/VideoPeer.ts index bb624250..ec7f2576 100644 --- a/front/src/WebRtc/VideoPeer.ts +++ b/front/src/WebRtc/VideoPeer.ts @@ -39,7 +39,7 @@ export class VideoPeer extends Peer { });*/ this.on('close', () => { - this.closeConnection(); + this.destroy(); }); // eslint-disable-next-line @typescript-eslint/no-explicit-any @@ -97,15 +97,15 @@ export class VideoPeer extends Peer { /** * This is triggered twice. Once by the server, and once by a remote client disconnecting */ - public closeConnection() { + public destroy(error?: Error): void { try { mediaManager.removeActiveVideo(this.userId); // FIXME: I don't understand why "Closing connection with" message is displayed TWICE before "Nb users in peerConnectionArray" // I do understand the method closeConnection is called twice, but I don't understand how they manage to run in parallel. //console.log('Closing connection with '+userId); - this.destroy(); + super.destroy(error); } catch (err) { - console.error("closeConnection", err) + console.error("VideoPeer::destroy", err) } } From dc36af19bc221813f66433a5f0922a56de579679 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20N=C3=A9grier?= Date: Thu, 20 Aug 2020 22:23:38 +0200 Subject: [PATCH 104/313] Detecting press on "stop screen sharing" --- front/src/WebRtc/MediaManager.ts | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/front/src/WebRtc/MediaManager.ts b/front/src/WebRtc/MediaManager.ts index 635174be..63814ee4 100644 --- a/front/src/WebRtc/MediaManager.ts +++ b/front/src/WebRtc/MediaManager.ts @@ -186,6 +186,14 @@ export class MediaManager { return this._startScreenCapture() .then((stream: MediaStream) => { this.localScreenCapture = stream; + + // If stream ends (for instance if user clicks the stop screen sharing button in the browser), let's close the view + for (const track of stream.getTracks()) { + track.onended = () => { + this.disableScreenSharing(); + }; + } + return stream; }) .catch((err: unknown) => { From c442d6ce670582d3d19397c5fdedd6c420109d25 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20N=C3=A9grier?= Date: Thu, 20 Aug 2020 22:29:14 +0200 Subject: [PATCH 105/313] Lint --- front/src/WebRtc/SimplePeer.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/front/src/WebRtc/SimplePeer.ts b/front/src/WebRtc/SimplePeer.ts index 498a8608..02573273 100644 --- a/front/src/WebRtc/SimplePeer.ts +++ b/front/src/WebRtc/SimplePeer.ts @@ -135,7 +135,7 @@ export class SimplePeer { mediaManager.removeActiveVideo(user.userId); mediaManager.addActiveVideo(user.userId, name); - let peer = new VideoPeer(user.userId, user.initiator ? user.initiator : false, this.Connection); + const peer = new VideoPeer(user.userId, user.initiator ? user.initiator : false, this.Connection); // When a connection is established to a video stream, and if a screen sharing is taking place, // the user sharing screen should also initiate a connection to the remote user! peer.on('connect', () => { @@ -167,7 +167,7 @@ export class SimplePeer { mediaManager.addScreenSharingActiveVideo(user.userId); } - let peer = new ScreenSharingPeer(user.userId, user.initiator ? user.initiator : false, this.Connection); + const peer = new ScreenSharingPeer(user.userId, user.initiator ? user.initiator : false, this.Connection); this.PeerScreenSharingConnectionArray.set(user.userId, peer); for (const peerConnectionListener of this.peerConnectionListeners) { From 2ae19b9f30a1a44bf50c09d71805d6906135da5d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20N=C3=A9grier?= Date: Thu, 20 Aug 2020 22:34:50 +0200 Subject: [PATCH 106/313] Fixing build --- back/src/Controller/IoSocketController.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/back/src/Controller/IoSocketController.ts b/back/src/Controller/IoSocketController.ts index 2eca7e44..1d5bbe06 100644 --- a/back/src/Controller/IoSocketController.ts +++ b/back/src/Controller/IoSocketController.ts @@ -13,11 +13,10 @@ import {MessageUserJoined} from "../Model/Websocket/MessageUserJoined"; import {MessageUserMoved} from "../Model/Websocket/MessageUserMoved"; import si from "systeminformation"; import {Gauge} from "prom-client"; -import os from 'os'; import {TokenInterface} from "../Controller/AuthenticateController"; import {isJoinRoomMessageInterface} from "../Model/Websocket/JoinRoomMessage"; import {isPointInterface, PointInterface} from "../Model/Websocket/PointInterface"; -import {isWebRtcSignalMessageInterface, isWebRtcScreenSharingSignalMessageInterface, isWebRtcScreenSharingStartMessageInterface} from "../Model/Websocket/WebRtcSignalMessage"; +import {isWebRtcSignalMessageInterface} from "../Model/Websocket/WebRtcSignalMessage"; import {UserInGroupInterface} from "../Model/Websocket/UserInGroupInterface"; enum SockerIoEvent { From f60b02f1dcfbb25172aca831ce4bfa5afa56e77e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20N=C3=A9grier?= Date: Thu, 20 Aug 2020 22:57:34 +0200 Subject: [PATCH 107/313] Putting a wider onhover surface when clicking on one of the buttons to manage screen sharing or video/mic --- front/dist/index.html | 26 +++++++++++++------------- front/dist/resources/style/style.css | 11 +++++++++-- 2 files changed, 22 insertions(+), 15 deletions(-) diff --git a/front/dist/index.html b/front/dist/index.html index 02ec0205..68940afe 100644 --- a/front/dist/index.html +++ b/front/dist/index.html @@ -68,19 +68,19 @@
    -
    -
    - - -
    -
    - - -
    -
    - - -
    +
    +
    +
    + + +
    +
    + + +
    +
    + +
    diff --git a/front/dist/resources/style/style.css b/front/dist/resources/style/style.css index 413bce71..382a4444 100644 --- a/front/dist/resources/style/style.css +++ b/front/dist/resources/style/style.css @@ -79,6 +79,13 @@ video#myCamVideo{ } +.btn-cam-action { + position: absolute; + bottom: 0px; + right: 0px; + width: 450px; + height: 150px; +} /*btn animation*/ .btn-cam-action div{ cursor: pointer; @@ -93,7 +100,7 @@ video#myCamVideo{ transition-timing-function: ease-in-out; bottom: 20px; } -#activeCam:hover .btn-cam-action div{ +.btn-cam-action:hover div{ transform: translateY(0); } .btn-cam-action div:hover{ @@ -106,7 +113,7 @@ video#myCamVideo{ right: 44px; } .btn-video{ - transition: all .2s; + transition: all .25s; right: 134px; } .btn-monitor{ From 91f422d0c34283fe42add59564ed2172adcc2c09 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20N=C3=A9grier?= Date: Fri, 21 Aug 2020 22:53:17 +0200 Subject: [PATCH 108/313] Fixing stop of stream in bi-directional screen sharing. --- front/src/WebRtc/MediaManager.ts | 54 ++++++++++++++++++++------- front/src/WebRtc/ScreenSharingPeer.ts | 33 +++++++++++++--- front/src/WebRtc/SimplePeer.ts | 45 ++++++++++++++-------- 3 files changed, 98 insertions(+), 34 deletions(-) diff --git a/front/src/WebRtc/MediaManager.ts b/front/src/WebRtc/MediaManager.ts index 63814ee4..314fea14 100644 --- a/front/src/WebRtc/MediaManager.ts +++ b/front/src/WebRtc/MediaManager.ts @@ -1,5 +1,5 @@ -import * as SimplePeerNamespace from "simple-peer"; import {DivImportance, layoutManager} from "./LayoutManager"; +import {HtmlUtils} from "./HtmlUtils"; const videoConstraint: boolean|MediaTrackConstraints = { width: { ideal: 1280 }, @@ -8,7 +8,8 @@ const videoConstraint: boolean|MediaTrackConstraints = { }; type UpdatedLocalStreamCallback = (media: MediaStream) => void; -type UpdatedScreenSharingCallback = (media: MediaStream) => void; +type StartScreenSharingCallback = (media: MediaStream) => void; +type StopScreenSharingCallback = (media: MediaStream) => void; // TODO: Split MediaManager in 2 classes: MediaManagerUI (in charge of HTML) and MediaManager (singleton in charge of the camera only) // TODO: verify that microphone event listeners are not triggered plenty of time NOW (since MediaManager is created many times!!!!) @@ -29,7 +30,8 @@ export class MediaManager { video: videoConstraint }; updatedLocalStreamCallBacks : Set = new Set(); - updatedScreenSharingCallBacks : Set = new Set(); + startScreenSharingCallBacks : Set = new Set(); + stopScreenSharingCallBacks : Set = new Set(); constructor() { @@ -87,9 +89,14 @@ export class MediaManager { this.updatedLocalStreamCallBacks.add(callback); } - public onUpdateScreenSharing(callback: UpdatedScreenSharingCallback): void { + public onStartScreenSharing(callback: StartScreenSharingCallback): void { - this.updatedScreenSharingCallBacks.add(callback); + this.startScreenSharingCallBacks.add(callback); + } + + public onStopScreenSharing(callback: StopScreenSharingCallback): void { + + this.stopScreenSharingCallBacks.add(callback); } removeUpdateLocalStreamEventListener(callback: UpdatedLocalStreamCallback): void { @@ -102,8 +109,14 @@ export class MediaManager { } } - private triggerUpdatedScreenSharingCallbacks(stream: MediaStream): void { - for (const callback of this.updatedScreenSharingCallBacks) { + private triggerStartedScreenSharingCallbacks(stream: MediaStream): void { + for (const callback of this.startScreenSharingCallBacks) { + callback(stream); + } + } + + private triggerStoppedScreenSharingCallbacks(stream: MediaStream): void { + for (const callback of this.stopScreenSharingCallBacks) { callback(stream); } } @@ -164,20 +177,26 @@ export class MediaManager { this.monitorClose.style.display = "none"; this.monitor.style.display = "block"; this.getScreenMedia().then((stream) => { - this.triggerUpdatedScreenSharingCallbacks(stream); + this.triggerStartedScreenSharingCallbacks(stream); }); } private disableScreenSharing() { this.monitorClose.style.display = "block"; this.monitor.style.display = "none"; + this.removeActiveScreenSharingVideo('me'); this.localScreenCapture?.getTracks().forEach((track: MediaStreamTrack) => { track.stop(); }); - this.localScreenCapture = null; + if (this.localScreenCapture === null) { + console.warn('Weird: trying to remove a screen sharing that is not enabled'); + return; + } + const localScreenCapture = this.localScreenCapture; this.getCamera().then((stream) => { - this.triggerUpdatedScreenSharingCallbacks(stream); + this.triggerStoppedScreenSharingCallbacks(localScreenCapture); }); + this.localScreenCapture = null; } //get screen @@ -194,6 +213,9 @@ export class MediaManager { }; } + this.addScreenSharingActiveVideo('me', DivImportance.Normal); + HtmlUtils.getElementByIdOrFail('screen-sharing-me').srcObject = stream; + return stream; }) .catch((err: unknown) => { @@ -306,8 +328,8 @@ export class MediaManager { * * @param userId */ - addScreenSharingActiveVideo(userId : string){ - this.webrtcInAudio.play(); + addScreenSharingActiveVideo(userId : string, divImportance: DivImportance = DivImportance.Important){ + //this.webrtcInAudio.play(); userId = `screen-sharing-${userId}`; const html = ` @@ -316,7 +338,7 @@ export class MediaManager {
    `; - layoutManager.add(DivImportance.Important, userId, html); + layoutManager.add(divImportance, userId, html); this.remoteVideo.set(userId, this.getElementByIdOrFail(userId)); } @@ -389,6 +411,12 @@ export class MediaManager { remoteVideo.srcObject = stream; } addStreamRemoteScreenSharing(userId : string, stream : MediaStream){ + // In the case of screen sharing (going both ways), we may need to create the HTML element if it does not exist yet + const remoteVideo = this.remoteVideo.get(`screen-sharing-${userId}`); + if (remoteVideo === undefined) { + this.addScreenSharingActiveVideo(userId); + } + this.addStreamRemoteVideo(`screen-sharing-${userId}`, stream); } diff --git a/front/src/WebRtc/ScreenSharingPeer.ts b/front/src/WebRtc/ScreenSharingPeer.ts index 3ce3c409..35f43201 100644 --- a/front/src/WebRtc/ScreenSharingPeer.ts +++ b/front/src/WebRtc/ScreenSharingPeer.ts @@ -8,6 +8,11 @@ const Peer: SimplePeerNamespace.SimplePeer = require('simple-peer'); * A peer connection used to transmit video / audio signals between 2 peers. */ export class ScreenSharingPeer extends Peer { + /** + * Whether this connection is currently receiving a video stream from a remote user. + */ + private isReceivingStream:boolean = false; + constructor(private userId: string, initiator: boolean, private connection: Connection) { super({ initiator: initiator ? initiator : false, @@ -35,13 +40,20 @@ export class ScreenSharingPeer extends Peer { this.stream(stream); }); - /*this.on('track', (track: MediaStreamTrack, stream: MediaStream) => { - });*/ - this.on('close', () => { this.destroy(); }); + this.on('data', (chunk: Buffer) => { + // We unfortunately need to rely on an event to let the other party know a stream has stopped. + // It seems there is no native way to detect that. + const message = JSON.parse(chunk.toString('utf8')); + if (message.streamEnded !== true) { + console.error('Unexpected message on screen sharing peer connection'); + } + mediaManager.removeActiveScreenSharingVideo(this.userId); + }); + // eslint-disable-next-line @typescript-eslint/no-explicit-any this.on('error', (err: any) => { console.error(`screen sharing error => ${this.userId} => ${err.code}`, err); @@ -74,11 +86,17 @@ export class ScreenSharingPeer extends Peer { console.log(`stream => ${this.userId} => `, stream); if(!stream){ mediaManager.removeActiveScreenSharingVideo(this.userId); + this.isReceivingStream = false; } else { mediaManager.addStreamRemoteScreenSharing(this.userId, stream); + this.isReceivingStream = true; } } + public isReceivingScreenSharingStream(): boolean { + return this.isReceivingStream; + } + public destroy(error?: Error): void { try { mediaManager.removeActiveScreenSharingVideo(this.userId); @@ -98,9 +116,12 @@ export class ScreenSharingPeer extends Peer { return; } - for (const track of localScreenCapture.getTracks()) { - this.addTrack(track, localScreenCapture); - } + this.addStream(localScreenCapture); return; } + + public stopPushingScreenSharingToRemoteUser(stream: MediaStream) { + this.removeStream(stream); + this.write(new Buffer(JSON.stringify({streamEnded: true}))); + } } diff --git a/front/src/WebRtc/SimplePeer.ts b/front/src/WebRtc/SimplePeer.ts index 02573273..3acd65c5 100644 --- a/front/src/WebRtc/SimplePeer.ts +++ b/front/src/WebRtc/SimplePeer.ts @@ -34,6 +34,7 @@ export class SimplePeer { private PeerConnectionArray: Map = new Map(); private readonly sendLocalVideoStreamCallback: (media: MediaStream) => void; private readonly sendLocalScreenSharingStreamCallback: (media: MediaStream) => void; + private readonly stopLocalScreenSharingStreamCallback: (media: MediaStream) => void; private readonly peerConnectionListeners: Array = new Array(); constructor(Connection: Connection, WebRtcRoomId: string = "test-webrtc") { @@ -42,8 +43,10 @@ export class SimplePeer { // We need to go through this weird bound function pointer in order to be able to "free" this reference later. this.sendLocalVideoStreamCallback = this.sendLocalVideoStream.bind(this); this.sendLocalScreenSharingStreamCallback = this.sendLocalScreenSharingStream.bind(this); + this.stopLocalScreenSharingStreamCallback = this.stopLocalScreenSharingStream.bind(this); mediaManager.onUpdateLocalStream(this.sendLocalVideoStreamCallback); - mediaManager.onUpdateScreenSharing(this.sendLocalScreenSharingStreamCallback); + mediaManager.onStartScreenSharing(this.sendLocalScreenSharingStreamCallback); + mediaManager.onStopScreenSharing(this.stopLocalScreenSharingStreamCallback); this.initialise(); } @@ -332,14 +335,22 @@ export class SimplePeer { * Triggered locally when clicking on the screen sharing button */ public sendLocalScreenSharingStream() { - if (mediaManager.localScreenCapture) { - for (const user of this.Users) { - this.sendLocalScreenSharingStreamToUser(user.userId); - } - } else { - for (const user of this.Users) { - this.stopLocalScreenSharingStreamToUser(user.userId); - } + if (!mediaManager.localScreenCapture) { + console.error('Could not find localScreenCapture to share') + return; + } + + for (const user of this.Users) { + this.sendLocalScreenSharingStreamToUser(user.userId); + } + } + + /** + * Triggered locally when clicking on the screen sharing button + */ + public stopLocalScreenSharingStream(stream: MediaStream) { + for (const user of this.Users) { + this.stopLocalScreenSharingStreamToUser(user.userId, stream); } } @@ -360,17 +371,21 @@ export class SimplePeer { } } - private stopLocalScreenSharingStreamToUser(userId: string): void { + private stopLocalScreenSharingStreamToUser(userId: string, stream: MediaStream): void { const PeerConnectionScreenSharing = this.PeerScreenSharingConnectionArray.get(userId); if (!PeerConnectionScreenSharing) { throw new Error('Weird, screen sharing connection to user ' + userId + 'not found') } console.log("updatedScreenSharing => destroy", PeerConnectionScreenSharing); - // FIXME: maybe we don't want to destroy the connexion if it is used in the other way around! - // FIXME: maybe we don't want to destroy the connexion if it is used in the other way around! - // FIXME: maybe we don't want to destroy the connexion if it is used in the other way around! - PeerConnectionScreenSharing.destroy(); - this.PeerScreenSharingConnectionArray.delete(userId); + + // Stop sending stream and close peer connection if peer is not sending stream too + PeerConnectionScreenSharing.stopPushingScreenSharingToRemoteUser(stream); + + if (!PeerConnectionScreenSharing.isReceivingScreenSharingStream()) { + PeerConnectionScreenSharing.destroy(); + + this.PeerScreenSharingConnectionArray.delete(userId); + } } } From b7c2f8be7bfae6c8a41979c2ea6df7c082b4ab67 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20N=C3=A9grier?= Date: Sat, 22 Aug 2020 15:26:40 +0200 Subject: [PATCH 109/313] Adding colors for cam/mic/screen share button Microphone and camera are now red when disabled. Screen-share is green when enabled. Also, they are now always partially visible (they were completely hidden previously until hovering in the lower right corner) --- front/dist/index.html | 6 +++--- front/dist/resources/style/style.css | 8 +++++++- front/src/WebRtc/MediaManager.ts | 12 ++++++++++++ 3 files changed, 22 insertions(+), 4 deletions(-) diff --git a/front/dist/index.html b/front/dist/index.html index 68940afe..5de00b3b 100644 --- a/front/dist/index.html +++ b/front/dist/index.html @@ -70,15 +70,15 @@
    -
    +
    -
    +
    -
    +
    diff --git a/front/dist/resources/style/style.css b/front/dist/resources/style/style.css index 382a4444..c5a3cc67 100644 --- a/front/dist/resources/style/style.css +++ b/front/dist/resources/style/style.css @@ -96,10 +96,16 @@ video#myCamVideo{ background: #666; box-shadow: 2px 2px 24px #444; border-radius: 48px; - transform: translateY(12vh); + transform: translateY(40px); transition-timing-function: ease-in-out; bottom: 20px; } +.btn-cam-action div.disabled { + background: #d75555; +} +.btn-cam-action div.enabled { + background: #73c973; +} .btn-cam-action:hover div{ transform: translateY(0); } diff --git a/front/src/WebRtc/MediaManager.ts b/front/src/WebRtc/MediaManager.ts index 314fea14..a043e51e 100644 --- a/front/src/WebRtc/MediaManager.ts +++ b/front/src/WebRtc/MediaManager.ts @@ -32,6 +32,9 @@ export class MediaManager { updatedLocalStreamCallBacks : Set = new Set(); startScreenSharingCallBacks : Set = new Set(); stopScreenSharingCallBacks : Set = new Set(); + private microphoneBtn: HTMLDivElement; + private cinemaBtn: HTMLDivElement; + private monitorBtn: HTMLDivElement; constructor() { @@ -40,6 +43,7 @@ export class MediaManager { this.webrtcInAudio = this.getElementByIdOrFail('audio-webrtc-in'); this.webrtcInAudio.volume = 0.2; + this.microphoneBtn = this.getElementByIdOrFail('btn-micro'); this.microphoneClose = this.getElementByIdOrFail('microphone-close'); this.microphoneClose.style.display = "none"; this.microphoneClose.addEventListener('click', (e: MouseEvent) => { @@ -54,6 +58,7 @@ export class MediaManager { //update tracking }); + this.cinemaBtn = this.getElementByIdOrFail('btn-video'); this.cinemaClose = this.getElementByIdOrFail('cinema-close'); this.cinemaClose.style.display = "none"; this.cinemaClose.addEventListener('click', (e: MouseEvent) => { @@ -68,6 +73,7 @@ export class MediaManager { //update tracking }); + this.monitorBtn = this.getElementByIdOrFail('btn-monitor'); this.monitorClose = this.getElementByIdOrFail('monitor-close'); this.monitorClose.style.display = "block"; this.monitorClose.addEventListener('click', (e: MouseEvent) => { @@ -128,6 +134,7 @@ export class MediaManager { private enableCamera() { this.cinemaClose.style.display = "none"; + this.cinemaBtn.classList.remove("disabled"); this.cinema.style.display = "block"; this.constraintsMedia.video = videoConstraint; this.getCamera().then((stream: MediaStream) => { @@ -138,6 +145,7 @@ export class MediaManager { private disableCamera() { this.cinemaClose.style.display = "block"; this.cinema.style.display = "none"; + this.cinemaBtn.classList.add("disabled"); this.constraintsMedia.video = false; this.myCamVideo.srcObject = null; if (this.localStream) { @@ -153,6 +161,7 @@ export class MediaManager { private enableMicrophone() { this.microphoneClose.style.display = "none"; this.microphone.style.display = "block"; + this.microphoneBtn.classList.remove("disabled"); this.constraintsMedia.audio = true; this.getCamera().then((stream) => { this.triggerUpdatedLocalStreamCallbacks(stream); @@ -162,6 +171,7 @@ export class MediaManager { private disableMicrophone() { this.microphoneClose.style.display = "block"; this.microphone.style.display = "none"; + this.microphoneBtn.classList.add("disabled"); this.constraintsMedia.audio = false; if(this.localStream) { this.localStream.getAudioTracks().forEach((MediaStreamTrack: MediaStreamTrack) => { @@ -176,6 +186,7 @@ export class MediaManager { private enableScreenSharing() { this.monitorClose.style.display = "none"; this.monitor.style.display = "block"; + this.monitorBtn.classList.add("enabled"); this.getScreenMedia().then((stream) => { this.triggerStartedScreenSharingCallbacks(stream); }); @@ -184,6 +195,7 @@ export class MediaManager { private disableScreenSharing() { this.monitorClose.style.display = "block"; this.monitor.style.display = "none"; + this.monitorBtn.classList.remove("enabled"); this.removeActiveScreenSharingVideo('me'); this.localScreenCapture?.getTracks().forEach((track: MediaStreamTrack) => { track.stop(); From 044495cf05bbacb3e403597e6608129d96c01393 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20N=C3=A9grier?= Date: Mon, 24 Aug 2020 14:19:36 +0200 Subject: [PATCH 110/313] Centering character in free space This commit adds the ability to put the character where there is free space when a discussion is hapening (either in presentation or chat mode) --- front/dist/resources/style/style.css | 6 +- front/src/Phaser/Game/GameScene.ts | 36 ++++++- front/src/WebRtc/LayoutManager.ts | 138 +++++++++++++++++++++++++++ 3 files changed, 173 insertions(+), 7 deletions(-) diff --git a/front/dist/resources/style/style.css b/front/dist/resources/style/style.css index c5a3cc67..8d232fb5 100644 --- a/front/dist/resources/style/style.css +++ b/front/dist/resources/style/style.css @@ -317,13 +317,13 @@ body { flex: 0 0 75%; display: flex; justify-content: start; - /*align-items: flex-start;*/ + align-items: flex-start; flex-wrap: wrap; } .main-section > div { - margin: 5%; - flex-basis: 90%; + margin: 2%; + flex-basis: 96%; /*flex-shrink: 2;*/ } diff --git a/front/src/Phaser/Game/GameScene.ts b/front/src/Phaser/Game/GameScene.ts index 3c3a6536..431bd3db 100644 --- a/front/src/Phaser/Game/GameScene.ts +++ b/front/src/Phaser/Game/GameScene.ts @@ -9,7 +9,7 @@ import { PositionInterface } from "../../Connection"; import {CurrentGamerInterface, hasMovedEventName, Player} from "../Player/Player"; -import {DEBUG_MODE, POSITION_DELAY, ZOOM_LEVEL} from "../../Enum/EnvironmentVariable"; +import {DEBUG_MODE, POSITION_DELAY, RESOLUTION, ZOOM_LEVEL} from "../../Enum/EnvironmentVariable"; import {ITiledMap, ITiledMapLayer, ITiledMapLayerProperty, ITiledTileSet} from "../Map/ITiledMap"; import {PLAYER_RESOURCES, PlayerResourceDescriptionInterface} from "../Entity/Character"; import {AddPlayerInterface} from "./AddPlayerInterface"; @@ -22,7 +22,7 @@ import {SimplePeer, UserSimplePeerInterface} from "../../WebRtc/SimplePeer"; import {ReconnectingSceneName} from "../Reconnecting/ReconnectingScene"; import {FourOFourSceneName} from "../Reconnecting/FourOFourScene"; import {loadAllLayers} from "../Entity/body_character"; -import {layoutManager, LayoutMode} from "../../WebRtc/LayoutManager"; +import {CenterListener, layoutManager, LayoutMode} from "../../WebRtc/LayoutManager"; import Texture = Phaser.Textures.Texture; import Sprite = Phaser.GameObjects.Sprite; import CanvasTexture = Phaser.Textures.CanvasTexture; @@ -69,7 +69,7 @@ interface DeleteGroupEventInterface { groupId: string } -export class GameScene extends Phaser.Scene { +export class GameScene extends Phaser.Scene implements CenterListener { GameManager : GameManager; Terrains : Array; CurrentPlayer!: CurrentGamerInterface; @@ -408,6 +408,9 @@ export class GameScene extends Phaser.Scene { this.repositionCallback = this.reposition.bind(this); window.addEventListener('resize', this.repositionCallback); this.reposition(); + + // From now, this game scene will be notified of reposition events + layoutManager.setListener(this); } private switchLayoutMode(): void { @@ -527,7 +530,7 @@ export class GameScene extends Phaser.Scene { //todo: in a dedicated class/function? initCamera() { this.cameras.main.setBounds(0,0, this.Map.widthInPixels, this.Map.heightInPixels); - this.cameras.main.startFollow(this.CurrentPlayer); + this.updateCameraOffset(); this.cameras.main.setZoom(ZOOM_LEVEL); } @@ -874,5 +877,30 @@ export class GameScene extends Phaser.Scene { private reposition(): void { this.presentationModeSprite.setY(this.game.renderer.height - 2); this.chatModeSprite.setY(this.game.renderer.height - 2); + + // Recompute camera offset if needed + this.updateCameraOffset(); + } + + /** + * Updates the offset of the character compared to the center of the screen according to the layout mananger + * (tries to put the character in the center of the reamining space if there is a discussion going on. + */ + private updateCameraOffset(): void { + const array = layoutManager.findBiggestAvailableArray(); + let xCenter = (array.xEnd - array.xStart) / 2 + array.xStart; + let yCenter = (array.yEnd - array.yStart) / 2 + array.yStart; + + // Let's put this in Game coordinates by applying the zoom level: + xCenter /= ZOOM_LEVEL * RESOLUTION; + yCenter /= ZOOM_LEVEL * RESOLUTION; + + //console.log("updateCameraOffset", array, xCenter, yCenter, this.game.renderer.width, this.game.renderer.height); + + this.cameras.main.startFollow(this.CurrentPlayer, true, 1, 1, xCenter - this.game.renderer.width / 2, yCenter - this.game.renderer.height / 2); + } + + public onCenterChange(): void { + this.updateCameraOffset(); } } diff --git a/front/src/WebRtc/LayoutManager.ts b/front/src/WebRtc/LayoutManager.ts index 6695fe7f..c2bb683e 100644 --- a/front/src/WebRtc/LayoutManager.ts +++ b/front/src/WebRtc/LayoutManager.ts @@ -14,6 +14,14 @@ export enum DivImportance { Normal = "Normal", } +/** + * Classes implementing this interface can be notified when the center of the screen (the player position) should be + * changed. + */ +export interface CenterListener { + onCenterChange(): void; +} + /** * This class is in charge of the video-conference layout. * It receives positioning requests for videos and does its best to place them on the screen depending on the active layout mode. @@ -23,6 +31,11 @@ class LayoutManager { private importantDivs: Map = new Map(); private normalDivs: Map = new Map(); + private listener: CenterListener|null = null; + + public setListener(centerListener: CenterListener|null) { + this.listener = centerListener; + } public add(importance: DivImportance, userId: string, html: string): void { const div = document.createElement('div'); @@ -45,6 +58,7 @@ class LayoutManager { this.positionDiv(div, importance); this.adjustVideoChatClass(); + this.listener?.onCenterChange(); } private positionDiv(elem: HTMLDivElement, importance: DivImportance): void { @@ -72,6 +86,7 @@ class LayoutManager { div.remove(); this.importantDivs.delete(userId); this.adjustVideoChatClass(); + this.listener?.onCenterChange(); return; } @@ -80,6 +95,7 @@ class LayoutManager { div.remove(); this.normalDivs.delete(userId); this.adjustVideoChatClass(); + this.listener?.onCenterChange(); return; } @@ -123,11 +139,133 @@ class LayoutManager { for (const div of this.normalDivs.values()) { this.positionDiv(div, DivImportance.Normal); } + this.listener?.onCenterChange(); } public getLayoutMode(): LayoutMode { return this.mode; } + + /*public getGameCenter(): {x: number, y: number} { + + }*/ + + /** + * Tries to find the biggest available box of remaining space (this is a space where we can center the character) + */ + public findBiggestAvailableArray(): {xStart: number, yStart: number, xEnd: number, yEnd: number} { + if (this.mode === LayoutMode.VideoChat) { + const children = document.querySelectorAll('div.chat-mode > div'); + const htmlChildren = Array.from(children.values()); + + // No chat? Let's go full center + if (htmlChildren.length === 0) { + return { + xStart: 0, + yStart: 0, + xEnd: window.innerWidth, + yEnd: window.innerHeight + } + } + + const lastDiv = htmlChildren[htmlChildren.length - 1]; + // Compute area between top right of the last div and bottom right of window + const area1 = (window.innerWidth - (lastDiv.offsetLeft + lastDiv.offsetWidth)) + * (window.innerHeight - lastDiv.offsetTop); + + // Compute area between bottom of last div and bottom of the screen on whole width + const area2 = window.innerWidth + * (window.innerHeight - (lastDiv.offsetTop + lastDiv.offsetHeight)); + + if (area1 < 0 && area2 < 0) { + // If screen is full, let's not attempt something foolish and simply center character in the middle. + return { + xStart: 0, + yStart: 0, + xEnd: window.innerWidth, + yEnd: window.innerHeight + } + } + if (area1 <= area2) { + console.log('lastDiv', lastDiv.offsetTop, lastDiv.offsetHeight); + return { + xStart: 0, + yStart: lastDiv.offsetTop + lastDiv.offsetHeight, + xEnd: window.innerWidth, + yEnd: window.innerHeight + } + } else { + console.log('lastDiv', lastDiv.offsetTop); + return { + xStart: lastDiv.offsetLeft + lastDiv.offsetWidth, + yStart: lastDiv.offsetTop, + xEnd: window.innerWidth, + yEnd: window.innerHeight + } + } + } else { + // Possible destinations: at the center bottom or at the right bottom. + const mainSectionChildren = Array.from(document.querySelectorAll('div.main-section > div').values()); + const sidebarChildren = Array.from(document.querySelectorAll('aside.sidebar > div').values()); + + // Nothing? Let's center + if (mainSectionChildren.length === 0 && sidebarChildren.length === 0) { + return { + xStart: 0, + yStart: 0, + xEnd: window.innerWidth, + yEnd: window.innerHeight + } + } + + if (mainSectionChildren.length === 0) { + const lastSidebarDiv = sidebarChildren[sidebarChildren.length-1]; + + // No presentation? Let's center on the main-section space + return { + xStart: 0, + yStart: 0, + xEnd: lastSidebarDiv.offsetLeft, + yEnd: window.innerHeight + } + } + + // At this point, we know we have at least one element in the main section. + const lastPresentationDiv = mainSectionChildren[mainSectionChildren.length-1]; + + const presentationArea = (window.innerHeight - (lastPresentationDiv.offsetTop + lastPresentationDiv.offsetHeight)) + * (lastPresentationDiv.offsetLeft + lastPresentationDiv.offsetWidth); + + let leftSideBar: number; + let bottomSideBar: number; + if (sidebarChildren.length === 0) { + leftSideBar = HtmlUtils.getElementByIdOrFail('sidebar').offsetLeft; + bottomSideBar = 0; + } else { + const lastSideBarChildren = sidebarChildren[sidebarChildren.length - 1]; + leftSideBar = lastSideBarChildren.offsetLeft; + bottomSideBar = lastSideBarChildren.offsetTop + lastSideBarChildren.offsetHeight; + } + const sideBarArea = (window.innerWidth - leftSideBar) + * (window.innerHeight - bottomSideBar); + + if (presentationArea <= sideBarArea) { + return { + xStart: leftSideBar, + yStart: bottomSideBar, + xEnd: window.innerWidth, + yEnd: window.innerHeight + } + } else { + return { + xStart: 0, + yStart: lastPresentationDiv.offsetTop + lastPresentationDiv.offsetHeight, + xEnd: /*lastPresentationDiv.offsetLeft + lastPresentationDiv.offsetWidth*/ window.innerWidth , // To avoid flickering when a chat start, we center on the center of the screen, not the center of the main content area + yEnd: window.innerHeight + } + } + } + } } const layoutManager = new LayoutManager(); From 7f5f802b86c7101a2567b2f61d74559061646db1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20N=C3=A9grier?= Date: Mon, 24 Aug 2020 18:23:02 +0200 Subject: [PATCH 111/313] Avoiding flickering when entering presentation mode with no presentation --- front/src/WebRtc/LayoutManager.ts | 16 ++-------------- 1 file changed, 2 insertions(+), 14 deletions(-) diff --git a/front/src/WebRtc/LayoutManager.ts b/front/src/WebRtc/LayoutManager.ts index c2bb683e..575b0bb2 100644 --- a/front/src/WebRtc/LayoutManager.ts +++ b/front/src/WebRtc/LayoutManager.ts @@ -208,8 +208,8 @@ class LayoutManager { const mainSectionChildren = Array.from(document.querySelectorAll('div.main-section > div').values()); const sidebarChildren = Array.from(document.querySelectorAll('aside.sidebar > div').values()); - // Nothing? Let's center - if (mainSectionChildren.length === 0 && sidebarChildren.length === 0) { + // No presentation? Let's center on the screen + if (mainSectionChildren.length === 0) { return { xStart: 0, yStart: 0, @@ -218,18 +218,6 @@ class LayoutManager { } } - if (mainSectionChildren.length === 0) { - const lastSidebarDiv = sidebarChildren[sidebarChildren.length-1]; - - // No presentation? Let's center on the main-section space - return { - xStart: 0, - yStart: 0, - xEnd: lastSidebarDiv.offsetLeft, - yEnd: window.innerHeight - } - } - // At this point, we know we have at least one element in the main section. const lastPresentationDiv = mainSectionChildren[mainSectionChildren.length-1]; From 13272968cfdd339441e877bbef2e3a9689a7d389 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20N=C3=A9grier?= Date: Thu, 27 Aug 2020 10:09:47 +0200 Subject: [PATCH 112/313] Clicking on a video puts it in presentation mode Adding the ability to put a video in presentation mode by clicking on it. Also, adding small CSS animations on hover. --- front/dist/resources/style/style.css | 28 +++++++++++++++- front/src/WebRtc/LayoutManager.ts | 50 ++++++++++++++++++++++++++++ 2 files changed, 77 insertions(+), 1 deletion(-) diff --git a/front/dist/resources/style/style.css b/front/dist/resources/style/style.css index 8d232fb5..2dbba223 100644 --- a/front/dist/resources/style/style.css +++ b/front/dist/resources/style/style.css @@ -256,6 +256,10 @@ body { .sidebar > div { max-height: 21%; } + + .sidebar > div:hover { + max-height: 25%; + } } @media (max-aspect-ratio: 1/1) { .main-container { @@ -274,6 +278,10 @@ body { .sidebar > div { max-width: 21%; } + + .sidebar > div:hover { + max-width: 25%; + } } .game { @@ -324,9 +332,16 @@ body { .main-section > div { margin: 2%; flex-basis: 96%; + transition: margin-left 0.2s, margin-right 0.2s, margin-bottom 0.2s, margin-top 0.2s, flex-basis 0.2s; + cursor: pointer; /*flex-shrink: 2;*/ } +.main-section > div:hover { + margin: 0%; + flex-basis: 100%; +} + .sidebar { flex: 0 0 25%; display: flex; @@ -334,6 +349,12 @@ body { .sidebar > div { margin: 2%; + transition: margin-left 0.2s, margin-right 0.2s, margin-bottom 0.2s, margin-top 0.2s, max-height 0.2s, max-width 0.2s; + cursor: pointer; +} + +.sidebar > div:hover { + margin: 0%; } /* Let's make sure videos are vertically centered if they need to be cropped */ @@ -354,11 +375,16 @@ body { padding: 1%; } -.chat-mode div { +.chat-mode > div { margin: 1%; max-height: 96%; + transition: margin-left 0.2s, margin-right 0.2s, margin-bottom 0.2s, margin-top 0.2s; + cursor: pointer; } +.chat-mode > div:hover { + margin: 0%; +} .chat-mode.one-col > div { flex-basis: 98%; } diff --git a/front/src/WebRtc/LayoutManager.ts b/front/src/WebRtc/LayoutManager.ts index 575b0bb2..02818c78 100644 --- a/front/src/WebRtc/LayoutManager.ts +++ b/front/src/WebRtc/LayoutManager.ts @@ -42,6 +42,14 @@ class LayoutManager { div.innerHTML = html; div.id = "user-"+userId; div.className = "media-container" + div.onclick = () => { + const parentId = div.parentElement?.id; + if (parentId === 'sidebar' || parentId === 'chat-mode') { + this.focusOn(userId); + } else { + this.removeFocusOn(userId); + } + } if (importance === DivImportance.Important) { this.importantDivs.set(userId, div); @@ -76,6 +84,48 @@ class LayoutManager { } } + /** + * Put the screen in presentation mode and move elem in presentation mode (and all other videos in normal mode) + */ + private focusOn(userId: string): void { + const focusedDiv = this.getDivByUserId(userId); + for (const [importantUserId, importantDiv] of this.importantDivs.entries()) { + //this.positionDiv(importantDiv, DivImportance.Normal); + this.importantDivs.delete(importantUserId); + this.normalDivs.set(importantUserId, importantDiv); + } + this.normalDivs.delete(userId); + this.importantDivs.set(userId, focusedDiv); + //this.positionDiv(focusedDiv, DivImportance.Important); + this.switchLayoutMode(LayoutMode.Presentation); + } + + /** + * Removes userId from presentation mode + */ + private removeFocusOn(userId: string): void { + const importantDiv = this.importantDivs.get(userId); + if (importantDiv === undefined) { + throw new Error('Div with user id "'+userId+'" is not in important mode'); + } + this.normalDivs.set(userId, importantDiv); + this.importantDivs.delete(userId); + + this.positionDiv(importantDiv, DivImportance.Normal); + } + + private getDivByUserId(userId: string): HTMLDivElement { + let div = this.importantDivs.get(userId); + if (div !== undefined) { + return div; + } + div = this.normalDivs.get(userId); + if (div !== undefined) { + return div; + } + throw new Error('Could not find media with user id '+userId); + } + /** * Removes the DIV matching userId. */ From 168697eb461e94078a7b8fb2c75cf51b412ce603 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20N=C3=A9grier?= Date: Sun, 30 Aug 2020 15:44:22 +0200 Subject: [PATCH 113/313] Adding a GameMap class that helps tracking when the properties of the tiles the user is changes (when the user moves) --- front/src/Phaser/Game/GameMap.ts | 97 ++++++++++++++++++++++++++++++ front/src/Phaser/Game/GameScene.ts | 10 +++ 2 files changed, 107 insertions(+) create mode 100644 front/src/Phaser/Game/GameMap.ts diff --git a/front/src/Phaser/Game/GameMap.ts b/front/src/Phaser/Game/GameMap.ts new file mode 100644 index 00000000..0e99159b --- /dev/null +++ b/front/src/Phaser/Game/GameMap.ts @@ -0,0 +1,97 @@ +import {ITiledMap} from "../Map/ITiledMap"; + +export type PropertyChangeCallback = (oldValue: string | number | boolean | undefined, newValue: string | number | boolean | undefined) => void; + +/** + * A wrapper around a ITiledMap interface to provide additional capabilities. + * It is used to handle layer properties. + */ +export class GameMap { + private key: number|undefined; + private lastProperties = new Map(); + private callbacks = new Map>(); + + public constructor(private map: ITiledMap) { + } + + /** + * Sets the position of the current player (in pixels) + * This will trigger events if properties are changing. + */ + public setPosition(x: number, y: number) { + const xMap = Math.floor(x / this.map.tilewidth); + const yMap = Math.floor(y / this.map.tileheight); + const key = xMap + yMap * this.map.width; + if (key === this.key) { + return; + } + this.key = key; + + const newProps = this.getProperties(key); + const oldProps = this.lastProperties; + + // Let's compare the 2 maps: + // First new properties vs oldProperties + for (const [newPropName, newPropValue] of newProps.entries()) { + const oldPropValue = oldProps.get(newPropName); + if (oldPropValue !== newPropValue) { + this.trigger(newPropName, oldPropValue, newPropValue); + } + } + + for (const [oldPropName, oldPropValue] of oldProps.entries()) { + if (!newProps.has(oldPropName)) { + // We found a property that disappeared + this.trigger(oldPropName, oldPropValue, undefined); + } + } + + this.lastProperties = newProps; + } + + private getProperties(key: number): Map { + const properties = new Map(); + + for (const layer of this.map.layers) { + if (layer.type !== 'tilelayer') { + continue; + } + const tiles = layer.data as number[]; + if (tiles[key] == 0) { + continue; + } + // There is a tile in this layer, let's embed the properties + if (layer.properties !== undefined) { + for (const layerProperty of layer.properties) { + if (layerProperty.value === undefined) { + continue; + } + properties.set(layerProperty.name, layerProperty.value); + } + } + } + + return properties; + } + + private trigger(propName: string, oldValue: string | number | boolean | undefined, newValue: string | number | boolean | undefined) { + let callbacksArray = this.callbacks.get(propName); + if (callbacksArray !== undefined) { + for (const callback of callbacksArray) { + callback(oldValue, newValue); + } + } + } + + /** + * Registers a callback called when the user moves to a tile where the property propName is different from the last tile the user was on. + */ + public onPropertyChange(propName: string, callback: PropertyChangeCallback) { + let callbacksArray = this.callbacks.get(propName); + if (callbacksArray === undefined) { + callbacksArray = new Array(); + this.callbacks.set(propName, callbacksArray); + } + callbacksArray.push(callback); + } +} diff --git a/front/src/Phaser/Game/GameScene.ts b/front/src/Phaser/Game/GameScene.ts index 431bd3db..1e394b96 100644 --- a/front/src/Phaser/Game/GameScene.ts +++ b/front/src/Phaser/Game/GameScene.ts @@ -28,6 +28,7 @@ import Sprite = Phaser.GameObjects.Sprite; import CanvasTexture = Phaser.Textures.CanvasTexture; import GameObject = Phaser.GameObjects.GameObject; import FILE_LOAD_ERROR = Phaser.Loader.Events.FILE_LOAD_ERROR; +import {GameMap} from "./GameMap"; export enum Textures { @@ -109,6 +110,7 @@ export class GameScene extends Phaser.Scene implements CenterListener { private presentationModeSprite!: Sprite; private chatModeSprite!: Sprite; private repositionCallback!: (this: Window, ev: UIEvent) => void; + private gameMap!: GameMap; static createFromUrl(mapUrlFile: string, instance: string, key: string|null = null): GameScene { const mapKey = GameScene.getMapKeyByUrl(mapUrlFile); @@ -278,6 +280,7 @@ export class GameScene extends Phaser.Scene implements CenterListener { create(): void { //initalise map this.Map = this.add.tilemap(this.MapKey); + this.gameMap = new GameMap(this.mapFile); const mapDirUrl = this.MapUrlFile.substr(0, this.MapUrlFile.lastIndexOf('/')); this.mapFile.tilesets.forEach((tileset: ITiledTileSet) => { this.Terrains.push(this.Map.addTilesetImage(tileset.name, `${mapDirUrl}/${tileset.image}`, tileset.tilewidth, tileset.tileheight, tileset.margin, tileset.spacing/*, tileset.firstgid*/)); @@ -411,6 +414,10 @@ export class GameScene extends Phaser.Scene implements CenterListener { // From now, this game scene will be notified of reposition events layoutManager.setListener(this); + + this.gameMap.onPropertyChange('startLayer', (oldValue, newValue) => { + console.log('startLayer', oldValue, newValue); + }); } private switchLayoutMode(): void { @@ -589,6 +596,9 @@ export class GameScene extends Phaser.Scene implements CenterListener { //listen event to share position of user this.CurrentPlayer.on(hasMovedEventName, this.pushPlayerPosition.bind(this)) + this.CurrentPlayer.on(hasMovedEventName, (event: HasMovedEvent) => { + this.gameMap.setPosition(event.x, event.y); + }) }); } From 01319b50ca501eea81625d0886fa1382208ba336 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20N=C3=A9grier?= Date: Sun, 30 Aug 2020 17:37:38 +0200 Subject: [PATCH 114/313] Adding a "openWebsite" property that opens websites when we walk over the zone. --- back/src/Assets/Maps/Floor0/floor0.json | 20 +++++++++++++++++++- front/src/Phaser/Game/GameMap.ts | 4 ++-- front/src/Phaser/Game/GameScene.ts | 9 +++++++-- website/dist/create-map.html | 12 ++++++++---- 4 files changed, 36 insertions(+), 9 deletions(-) diff --git a/back/src/Assets/Maps/Floor0/floor0.json b/back/src/Assets/Maps/Floor0/floor0.json index 987004e6..21d4c52c 100644 --- a/back/src/Assets/Maps/Floor0/floor0.json +++ b/back/src/Assets/Maps/Floor0/floor0.json @@ -63,6 +63,24 @@ "x":0, "y":0 }, + { + "data":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 309, 309, 309, 309, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 309, 309, 309, 309, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 309, 309, 309, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 309, 309, 309, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 309, 309, 309, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 309, 309, 309, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 309, 309, 309, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + "height":34, + "id":18, + "name":"openSwile", + "opacity":1, + "properties":[ + { + "name":"openWebsite", + "type":"string", + "value":"https:\/\/app.swile.co\/" + }], + "type":"tilelayer", + "visible":true, + "width":46, + "x":0, + "y":0 + }, { "data":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 294, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 294, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 294, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 294, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 294, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 294, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 294, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 294, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 294, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], "height":34, @@ -224,7 +242,7 @@ "x":0, "y":0 }], - "nextlayerid":18, + "nextlayerid":19, "nextobjectid":1, "orientation":"orthogonal", "renderorder":"right-down", diff --git a/front/src/Phaser/Game/GameMap.ts b/front/src/Phaser/Game/GameMap.ts index 0e99159b..769f184e 100644 --- a/front/src/Phaser/Game/GameMap.ts +++ b/front/src/Phaser/Game/GameMap.ts @@ -1,6 +1,6 @@ import {ITiledMap} from "../Map/ITiledMap"; -export type PropertyChangeCallback = (oldValue: string | number | boolean | undefined, newValue: string | number | boolean | undefined) => void; +export type PropertyChangeCallback = (newValue: string | number | boolean | undefined, oldValue: string | number | boolean | undefined) => void; /** * A wrapper around a ITiledMap interface to provide additional capabilities. @@ -78,7 +78,7 @@ export class GameMap { let callbacksArray = this.callbacks.get(propName); if (callbacksArray !== undefined) { for (const callback of callbacksArray) { - callback(oldValue, newValue); + callback(newValue, oldValue); } } } diff --git a/front/src/Phaser/Game/GameScene.ts b/front/src/Phaser/Game/GameScene.ts index 1e394b96..8f9940c7 100644 --- a/front/src/Phaser/Game/GameScene.ts +++ b/front/src/Phaser/Game/GameScene.ts @@ -29,6 +29,7 @@ import CanvasTexture = Phaser.Textures.CanvasTexture; import GameObject = Phaser.GameObjects.GameObject; import FILE_LOAD_ERROR = Phaser.Loader.Events.FILE_LOAD_ERROR; import {GameMap} from "./GameMap"; +import {CoWebsiteManager} from "../../WebRtc/CoWebsiteManager"; export enum Textures { @@ -415,8 +416,12 @@ export class GameScene extends Phaser.Scene implements CenterListener { // From now, this game scene will be notified of reposition events layoutManager.setListener(this); - this.gameMap.onPropertyChange('startLayer', (oldValue, newValue) => { - console.log('startLayer', oldValue, newValue); + this.gameMap.onPropertyChange('openWebsite', (newValue, oldValue) => { + if (newValue === undefined) { + CoWebsiteManager.closeCoWebsite(); + } else { + CoWebsiteManager.loadCoWebsite(newValue as string); + } }); } diff --git a/website/dist/create-map.html b/website/dist/create-map.html index 6df98e52..e6037a9c 100644 --- a/website/dist/create-map.html +++ b/website/dist/create-map.html @@ -150,10 +150,14 @@
  • You can of course use the "#" notation in an exit scene URL (so an exit scene URL will point to a given entry scene URL)
  • - - - - +

    Opening a website when walking on the map

    +

    On your map, you can define special zones. When a player will pass over these zones, a website will open + (as an iframe on the right side of the screen)

    +

    In order to create a zone that opens websites:

    +
      +
    • You must create a specific layer.
    • +
    • In layer properties, you MUST add a boolean "openWebsite" property. The value of the property is the URL of the website to open (the URL must start with "https://")
    • +

    Pushing the map

    When your changes are ready, you need to "commit" and "push" (i.e. "upload") the changes back to GitHub. From a128ff117b3f09eb0ba5c49b7260282d4e120cc7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20N=C3=A9grier?= Date: Sun, 30 Aug 2020 17:40:04 +0200 Subject: [PATCH 115/313] code style --- front/src/Phaser/Game/GameMap.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/front/src/Phaser/Game/GameMap.ts b/front/src/Phaser/Game/GameMap.ts index 769f184e..a588a4e6 100644 --- a/front/src/Phaser/Game/GameMap.ts +++ b/front/src/Phaser/Game/GameMap.ts @@ -75,7 +75,7 @@ export class GameMap { } private trigger(propName: string, oldValue: string | number | boolean | undefined, newValue: string | number | boolean | undefined) { - let callbacksArray = this.callbacks.get(propName); + const callbacksArray = this.callbacks.get(propName); if (callbacksArray !== undefined) { for (const callback of callbacksArray) { callback(newValue, oldValue); From 0a8ba3704992de4ba7d876c699025c89ba7bae10 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20N=C3=A9grier?= Date: Mon, 31 Aug 2020 12:18:00 +0200 Subject: [PATCH 116/313] Adding Jitsi meet support --- back/src/Assets/Maps/Floor0/floor0.json | 20 +++++++++++++++++- deeployer.libsonnet | 3 ++- docker-compose.yaml | 1 + front/src/Enum/EnvironmentVariable.ts | 4 +++- front/src/Phaser/Game/GameScene.ts | 28 ++++++++++++++++++++++++- front/src/WebRtc/CoWebsiteManager.ts | 21 +++++++++++++++++-- front/src/index.ts | 9 +++++++- front/webpack.config.js | 2 +- website/dist/create-map.html | 9 ++++++++ 9 files changed, 89 insertions(+), 8 deletions(-) diff --git a/back/src/Assets/Maps/Floor0/floor0.json b/back/src/Assets/Maps/Floor0/floor0.json index 21d4c52c..bf80c6e3 100644 --- a/back/src/Assets/Maps/Floor0/floor0.json +++ b/back/src/Assets/Maps/Floor0/floor0.json @@ -81,6 +81,24 @@ "x":0, "y":0 }, + { + "data":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + "height":34, + "id":19, + "name":"jitsyAmphi", + "opacity":1, + "properties":[ + { + "name":"jitsiRoom", + "type":"string", + "value":"tcm-amphi" + }], + "type":"tilelayer", + "visible":true, + "width":46, + "x":0, + "y":0 + }, { "data":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 294, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 294, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 294, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 294, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 294, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 294, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 294, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 294, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 294, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], "height":34, @@ -242,7 +260,7 @@ "x":0, "y":0 }], - "nextlayerid":19, + "nextlayerid":20, "nextobjectid":1, "orientation":"orthogonal", "renderorder":"right-down", diff --git a/deeployer.libsonnet b/deeployer.libsonnet index 09074148..528342ed 100644 --- a/deeployer.libsonnet +++ b/deeployer.libsonnet @@ -25,7 +25,8 @@ }, "ports": [80], "env": { - "API_URL": "api."+url + "API_URL": "api."+url, + "JITSI_URL": "meet.jit.si" } }, "website": { diff --git a/docker-compose.yaml b/docker-compose.yaml index 74bbafbf..d944e0f8 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -22,6 +22,7 @@ services: image: thecodingmachine/nodejs:12 environment: DEBUG_MODE: "$DEBUG_MODE" + JITSI_URL: $JITSI_URL HOST: "0.0.0.0" NODE_ENV: development API_URL: api.workadventure.localhost diff --git a/front/src/Enum/EnvironmentVariable.ts b/front/src/Enum/EnvironmentVariable.ts index e35818bc..97a3f91b 100644 --- a/front/src/Enum/EnvironmentVariable.ts +++ b/front/src/Enum/EnvironmentVariable.ts @@ -1,5 +1,6 @@ const DEBUG_MODE: boolean = process.env.DEBUG_MODE == "true"; const API_URL = (typeof(window) !== 'undefined' ? window.location.protocol : 'http:') + '//' + (process.env.API_URL || "api.workadventure.localhost"); +const JITSI_URL : string|undefined = (process.env.JITSI_URL === '') ? undefined : process.env.JITSI_URL; const RESOLUTION = 3; const ZOOM_LEVEL = 1/*3/4*/; const POSITION_DELAY = 200; // Wait 200ms between sending position events @@ -11,5 +12,6 @@ export { RESOLUTION, ZOOM_LEVEL, POSITION_DELAY, - MAX_EXTRAPOLATION_TIME + MAX_EXTRAPOLATION_TIME, + JITSI_URL } diff --git a/front/src/Phaser/Game/GameScene.ts b/front/src/Phaser/Game/GameScene.ts index 8f9940c7..485b7dce 100644 --- a/front/src/Phaser/Game/GameScene.ts +++ b/front/src/Phaser/Game/GameScene.ts @@ -9,7 +9,7 @@ import { PositionInterface } from "../../Connection"; import {CurrentGamerInterface, hasMovedEventName, Player} from "../Player/Player"; -import {DEBUG_MODE, POSITION_DELAY, RESOLUTION, ZOOM_LEVEL} from "../../Enum/EnvironmentVariable"; +import {DEBUG_MODE, JITSI_URL, POSITION_DELAY, RESOLUTION, ZOOM_LEVEL} from "../../Enum/EnvironmentVariable"; import {ITiledMap, ITiledMapLayer, ITiledMapLayerProperty, ITiledTileSet} from "../Map/ITiledMap"; import {PLAYER_RESOURCES, PlayerResourceDescriptionInterface} from "../Entity/Character"; import {AddPlayerInterface} from "./AddPlayerInterface"; @@ -423,6 +423,32 @@ export class GameScene extends Phaser.Scene implements CenterListener { CoWebsiteManager.loadCoWebsite(newValue as string); } }); + let jitsiApi: any; + this.gameMap.onPropertyChange('jitsiRoom', (newValue, oldValue) => { + if (newValue === undefined) { + jitsiApi?.dispose(); + CoWebsiteManager.closeCoWebsite(); + } else { + CoWebsiteManager.insertCoWebsite((cowebsiteDiv => { + const domain = JITSI_URL; + const options = { + roomName: this.instance + "-" + newValue, + width: "100%", + height: "100%", + parentNode: cowebsiteDiv, + configOverwrite: { + prejoinPageEnabled: false + }, + interfaceConfigOverwrite: { + SHOW_CHROME_EXTENSION_BANNER: false, + MOBILE_APP_PROMO: false + } + }; + jitsiApi = new (window as any).JitsiMeetExternalAPI(domain, options); + jitsiApi.executeCommand('displayName', gameManager.getPlayerName()); + })) + } + }); } private switchLayoutMode(): void { diff --git a/front/src/WebRtc/CoWebsiteManager.ts b/front/src/WebRtc/CoWebsiteManager.ts index 0150760c..1793335b 100644 --- a/front/src/WebRtc/CoWebsiteManager.ts +++ b/front/src/WebRtc/CoWebsiteManager.ts @@ -14,7 +14,24 @@ export class CoWebsiteManager { iframe.id = 'cowebsite-iframe'; iframe.src = url; cowebsiteDiv.appendChild(iframe); + //iframe.onload = () => { + // onload can be long to trigger. Maybe we should display the website, whatever happens, after 1 second? + CoWebsiteManager.fire(); + //} + } + + /** + * Just like loadCoWebsite but the div can be filled by the user. + */ + public static insertCoWebsite(callback: (cowebsite: HTMLDivElement) => void): void { + const cowebsiteDiv = HtmlUtils.getElementByIdOrFail("cowebsite"); + cowebsiteDiv.innerHTML = ''; + + callback(cowebsiteDiv); + //iframe.onload = () => { + // onload can be long to trigger. Maybe we should display the website, whatever happens, after 1 second? CoWebsiteManager.fire(); + //} } public static closeCoWebsite(): void { @@ -24,8 +41,8 @@ export class CoWebsiteManager { } public static getGameSize(): {width: number, height: number} { - const iframe = document.getElementById('cowebsite-iframe'); - if (iframe === null) { + const hasChildren = HtmlUtils.getElementByIdOrFail("cowebsite").children.length > 0; + if (hasChildren === false) { return { width: window.innerWidth, height: window.innerHeight diff --git a/front/src/index.ts b/front/src/index.ts index 75ad0fe6..5c198f9f 100644 --- a/front/src/index.ts +++ b/front/src/index.ts @@ -1,6 +1,6 @@ import 'phaser'; import GameConfig = Phaser.Types.Core.GameConfig; -import {DEBUG_MODE, RESOLUTION} from "./Enum/EnvironmentVariable"; +import {DEBUG_MODE, JITSI_URL, RESOLUTION} from "./Enum/EnvironmentVariable"; import {cypressAsserter} from "./Cypress/CypressAsserter"; import {LoginScene} from "./Phaser/Login/LoginScene"; import {ReconnectingScene} from "./Phaser/Reconnecting/ReconnectingScene"; @@ -13,6 +13,13 @@ import {CoWebsiteManager} from "./WebRtc/CoWebsiteManager"; //CoWebsiteManager.loadCoWebsite('https://thecodingmachine.com'); +// Load Jitsi if the environment variable is set. +if (JITSI_URL) { + const jitsiScript = document.createElement('script'); + jitsiScript.src = 'https://' + JITSI_URL + '/external_api.js'; + document.head.appendChild(jitsiScript); +} + const {width, height} = CoWebsiteManager.getGameSize(); const config: GameConfig = { diff --git a/front/webpack.config.js b/front/webpack.config.js index 61424eeb..7ffbcfcc 100644 --- a/front/webpack.config.js +++ b/front/webpack.config.js @@ -42,7 +42,7 @@ module.exports = { new webpack.ProvidePlugin({ Phaser: 'phaser' }), - new webpack.EnvironmentPlugin(['API_URL', 'DEBUG_MODE']) + new webpack.EnvironmentPlugin(['API_URL', 'DEBUG_MODE', 'JITSI_URL']) ], }; diff --git a/website/dist/create-map.html b/website/dist/create-map.html index e6037a9c..f1a4f7b8 100644 --- a/website/dist/create-map.html +++ b/website/dist/create-map.html @@ -159,6 +159,15 @@

  • In layer properties, you MUST add a boolean "openWebsite" property. The value of the property is the URL of the website to open (the URL must start with "https://")
  • +

    Opening a Jitsi meet when walking on the map

    +

    On your map, you can define special zones (meeting rooms) that will trigger the opening of a Jitsi meet. When a player will pass over these zones, a Jitsi meet will open + (as an iframe on the right side of the screen)

    +

    In order to create Jitsi meet zones:

    +
      +
    • You must create a specific layer.
    • +
    • In layer properties, you MUST add a boolean "jitsiRoom" property. The value of the property is the name of the room in Jitsi. Note: the name of the room will be prepended with the name of the instance of the map (so that different instances of the map have different rooms)
    • +
    +

    Pushing the map

    When your changes are ready, you need to "commit" and "push" (i.e. "upload") the changes back to GitHub. Just wait a few minutes, and your map will be propagated automatically to the GitHub pages web-server.

    From df7b5cc2e3adbef076cc33fe03373e08766c2509 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20N=C3=A9grier?= Date: Mon, 31 Aug 2020 14:03:40 +0200 Subject: [PATCH 117/313] Adding a "silent" notion (triggered in Jitsi meets) --- back/src/Controller/IoSocketController.ts | 26 ++++++++++++++++++- back/src/Model/UserInterface.ts | 5 ++-- back/src/Model/World.ts | 31 ++++++++++++++++++++++- front/src/Connection.ts | 5 ++++ front/src/Phaser/Game/GameScene.ts | 8 +++--- 5 files changed, 68 insertions(+), 7 deletions(-) diff --git a/back/src/Controller/IoSocketController.ts b/back/src/Controller/IoSocketController.ts index 1d5bbe06..5f1bc47f 100644 --- a/back/src/Controller/IoSocketController.ts +++ b/back/src/Controller/IoSocketController.ts @@ -33,7 +33,8 @@ enum SockerIoEvent { MESSAGE_ERROR = "message-error", GROUP_CREATE_UPDATE = "group-create-update", GROUP_DELETE = "group-delete", - SET_PLAYER_DETAILS = "set-player-details" + SET_PLAYER_DETAILS = "set-player-details", + SET_SILENT = "set_silent", // Set or unset the silent mode for this user. } export class IoSocketController { @@ -274,6 +275,29 @@ export class IoSocketController { Client.characterLayers = playerDetails.characterLayers; answerFn(Client.userId); }); + + socket.on(SockerIoEvent.SET_SILENT, (silent: unknown) => { + if (typeof silent !== "boolean") { + socket.emit(SockerIoEvent.MESSAGE_ERROR, {message: 'Invalid SET_SILENT message.'}); + console.warn('Invalid SET_SILENT message received: ', silent); + return; + } + + try { + const Client = (socket as ExSocketInterface); + + // update position in the world + const world = this.Worlds.get(Client.roomId); + if (!world) { + console.error("Could not find world with id '", Client.roomId, "'"); + return; + } + world.setSilent(Client, silent); + } catch (e) { + console.error('An error occurred on "SET_SILENT"'); + console.error(e); + } + }); }); } diff --git a/back/src/Model/UserInterface.ts b/back/src/Model/UserInterface.ts index 743f8b4d..89994a31 100644 --- a/back/src/Model/UserInterface.ts +++ b/back/src/Model/UserInterface.ts @@ -4,5 +4,6 @@ import { PointInterface } from "./Websocket/PointInterface"; export interface UserInterface { id: string, group?: Group, - position: PointInterface -} \ No newline at end of file + position: PointInterface, + silent: boolean +} diff --git a/back/src/Model/World.ts b/back/src/Model/World.ts index 6d4fc205..8855702e 100644 --- a/back/src/Model/World.ts +++ b/back/src/Model/World.ts @@ -55,7 +55,8 @@ export class World { public join(socket : Identificable, userPosition: PointInterface): void { this.users.set(socket.userId, { id: socket.userId, - position: userPosition + position: userPosition, + silent: false // FIXME: silent should be set at the correct value when joining a room. }); // Let's call update position to trigger the join / leave room this.updatePosition(socket, userPosition); @@ -84,6 +85,10 @@ export class World { user.position = userPosition; + if (user.silent) { + return; + } + if (typeof user.group === 'undefined') { // If the user is not part of a group: // should he join a group? @@ -118,6 +123,26 @@ export class World { } } + setSilent(socket: Identificable, silent: boolean) { + const user = this.users.get(socket.userId); + if(typeof user === 'undefined') { + console.warn('In setSilent, could not find user with ID "'+socket.userId+'" in world.'); + return; + } + if (user.silent === silent) { + return; + } + + user.silent = silent; + if (silent && user.group !== undefined) { + this.leaveGroup(user); + } + if (!silent) { + // If we are back to life, let's trigger a position update to see if we can join some group. + this.updatePosition(socket, user.position); + } + } + /** * Makes a user leave a group and closes and destroy the group if the group contains only one remaining person. * @@ -145,6 +170,7 @@ export class World { * Looks for the closest user that is: * - close enough (distance <= minDistance) * - not in a group + * - not silent * OR * - close enough to a group (distance <= groupRadius) */ @@ -160,6 +186,9 @@ export class World { if(currentUser === user) { return; } + if (currentUser.silent) { + return; + } const distance = World.computeDistance(user, currentUser); // compute distance between peers. diff --git a/front/src/Connection.ts b/front/src/Connection.ts index 783b5d41..4a184c52 100644 --- a/front/src/Connection.ts +++ b/front/src/Connection.ts @@ -24,6 +24,7 @@ enum EventMessage{ SET_PLAYER_DETAILS = "set-player-details", // Send the name and character to the server (on connect), receive back the id. CONNECT_ERROR = "connect_error", + SET_SILENT = "set_silent", // Set or unset the silent mode for this user. } export interface PointInterface { @@ -167,6 +168,10 @@ export class Connection implements Connection { this.socket.emit(EventMessage.USER_POSITION, point); } + public setSilent(silent: boolean): void { + this.socket.emit(EventMessage.SET_SILENT, silent); + } + public onUserJoins(callback: (message: MessageUserJoined) => void): void { this.socket.on(EventMessage.JOIN_ROOM, callback); } diff --git a/front/src/Phaser/Game/GameScene.ts b/front/src/Phaser/Game/GameScene.ts index 485b7dce..c30bdf61 100644 --- a/front/src/Phaser/Game/GameScene.ts +++ b/front/src/Phaser/Game/GameScene.ts @@ -423,9 +423,10 @@ export class GameScene extends Phaser.Scene implements CenterListener { CoWebsiteManager.loadCoWebsite(newValue as string); } }); - let jitsiApi: any; + let jitsiApi: any; // eslint-disable-line @typescript-eslint/no-explicit-any this.gameMap.onPropertyChange('jitsiRoom', (newValue, oldValue) => { if (newValue === undefined) { + this.connection.setSilent(false); jitsiApi?.dispose(); CoWebsiteManager.closeCoWebsite(); } else { @@ -444,9 +445,10 @@ export class GameScene extends Phaser.Scene implements CenterListener { MOBILE_APP_PROMO: false } }; - jitsiApi = new (window as any).JitsiMeetExternalAPI(domain, options); + jitsiApi = new (window as any).JitsiMeetExternalAPI(domain, options); // eslint-disable-line @typescript-eslint/no-explicit-any jitsiApi.executeCommand('displayName', gameManager.getPlayerName()); - })) + })); + this.connection.setSilent(true); } }); } From 9351719873db6a523dcc5953ab18aabae530158a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20N=C3=A9grier?= Date: Mon, 31 Aug 2020 14:10:01 +0200 Subject: [PATCH 118/313] Adding the notion of silent zone --- back/src/Assets/Maps/Floor0/floor0.json | 2 +- front/src/Phaser/Game/GameScene.ts | 8 ++++++++ website/dist/create-map.html | 13 +++++++++++-- 3 files changed, 20 insertions(+), 3 deletions(-) diff --git a/back/src/Assets/Maps/Floor0/floor0.json b/back/src/Assets/Maps/Floor0/floor0.json index bf80c6e3..38bf49e7 100644 --- a/back/src/Assets/Maps/Floor0/floor0.json +++ b/back/src/Assets/Maps/Floor0/floor0.json @@ -260,7 +260,7 @@ "x":0, "y":0 }], - "nextlayerid":20, + "nextlayerid":21, "nextobjectid":1, "orientation":"orthogonal", "renderorder":"right-down", diff --git a/front/src/Phaser/Game/GameScene.ts b/front/src/Phaser/Game/GameScene.ts index c30bdf61..a17eab22 100644 --- a/front/src/Phaser/Game/GameScene.ts +++ b/front/src/Phaser/Game/GameScene.ts @@ -450,6 +450,14 @@ export class GameScene extends Phaser.Scene implements CenterListener { })); this.connection.setSilent(true); } + }) + + this.gameMap.onPropertyChange('silent', (newValue, oldValue) => { + if (newValue === undefined || newValue === false || newValue === '') { + this.connection.setSilent(false); + } else { + this.connection.setSilent(true); + } }); } diff --git a/website/dist/create-map.html b/website/dist/create-map.html index f1a4f7b8..6eb1a266 100644 --- a/website/dist/create-map.html +++ b/website/dist/create-map.html @@ -156,7 +156,7 @@

    In order to create a zone that opens websites:

    • You must create a specific layer.
    • -
    • In layer properties, you MUST add a boolean "openWebsite" property. The value of the property is the URL of the website to open (the URL must start with "https://")
    • +
    • In layer properties, you MUST add a "openWebsite" property (of type "string"). The value of the property is the URL of the website to open (the URL must start with "https://")

    Opening a Jitsi meet when walking on the map

    @@ -165,7 +165,16 @@

    In order to create Jitsi meet zones:

    • You must create a specific layer.
    • -
    • In layer properties, you MUST add a boolean "jitsiRoom" property. The value of the property is the name of the room in Jitsi. Note: the name of the room will be prepended with the name of the instance of the map (so that different instances of the map have different rooms)
    • +
    • In layer properties, you MUST add a boolean "jitsiRoom" property (of type "string"). The value of the property is the name of the room in Jitsi. Note: the name of the room will be prepended with the name of the instance of the map (so that different instances of the map have different rooms)
    • +
    + +

    Making a "silent" zone

    +

    On your map, you can define special silent zones where nobody is allowed to talk. + In these zones, users will not speak to each others, even if they are next to each others.

    +

    In order to create a silent zone:

    +
      +
    • You must create a specific layer.
    • +
    • In layer properties, you MUST add a boolean "silent" property. If the silent property is checked, the users are entering the silent zone when they walk on any tile of the layer.

    Pushing the map

    From 8968627d6912cc2fe4da429ed7a98c84dc29a941 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20N=C3=A9grier?= Date: Mon, 31 Aug 2020 14:23:31 +0200 Subject: [PATCH 119/313] Adding Jitsi meeting in TCM maps --- back/src/Assets/Maps/Floor0/floor0.json | 56 +++++++++++++++++- back/src/Assets/Maps/Floor1/floor1.json | 79 ++++++++++++++++++++++++- 2 files changed, 133 insertions(+), 2 deletions(-) diff --git a/back/src/Assets/Maps/Floor0/floor0.json b/back/src/Assets/Maps/Floor0/floor0.json index 38bf49e7..6f1e7c09 100644 --- a/back/src/Assets/Maps/Floor0/floor0.json +++ b/back/src/Assets/Maps/Floor0/floor0.json @@ -15,6 +15,60 @@ "height":34, "infinite":false, "layers":[ + { + "data":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + "height":34, + "id":23, + "name":"patio", + "opacity":1, + "properties":[ + { + "name":"jitsiRoom", + "type":"string", + "value":"tcm-patio" + }], + "type":"tilelayer", + "visible":true, + "width":46, + "x":0, + "y":0 + }, + { + "data":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 309, 309, 309, 309, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 309, 309, 309, 309, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 309, 309, 309, 309, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + "height":34, + "id":22, + "name":"chillzone-2", + "opacity":1, + "properties":[ + { + "name":"jitsiRoom", + "type":"string", + "value":"tcm-chillzone-2" + }], + "type":"tilelayer", + "visible":true, + "width":46, + "x":0, + "y":0 + }, + { + "data":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 309, 309, 309, 309, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 309, 309, 309, 309, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 309, 309, 309, 309, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + "height":34, + "id":21, + "name":"chillzone-1", + "opacity":1, + "properties":[ + { + "name":"jitsiRoom", + "type":"string", + "value":"tcm-chillzone-1" + }], + "type":"tilelayer", + "visible":true, + "width":46, + "x":0, + "y":0 + }, { "data":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 309, 309, 309, 309, 0, 0, 309, 309, 309, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 309, 309, 309, 309, 0, 0, 309, 309, 309, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 309, 309, 309, 309, 309, 309, 309, 309, 309, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 309, 309, 309, 309, 309, 309, 309, 309, 309, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], "height":34, @@ -260,7 +314,7 @@ "x":0, "y":0 }], - "nextlayerid":21, + "nextlayerid":24, "nextobjectid":1, "orientation":"orthogonal", "renderorder":"right-down", diff --git a/back/src/Assets/Maps/Floor1/floor1.json b/back/src/Assets/Maps/Floor1/floor1.json index 3ba25159..70cd8abc 100644 --- a/back/src/Assets/Maps/Floor1/floor1.json +++ b/back/src/Assets/Maps/Floor1/floor1.json @@ -21,6 +21,60 @@ "x":0, "y":0 }, + { + "data":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4861, 4861, 4861, 4861, 4861, 4861, 4861, 4861, 4861, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4861, 4861, 4861, 4861, 4861, 4861, 4861, 4861, 4861, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4861, 4861, 4861, 4861, 4861, 4861, 4861, 4861, 4861, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4861, 4861, 4861, 4861, 4861, 4861, 4861, 4861, 4861, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4861, 4861, 4861, 4861, 4861, 4861, 4861, 4861, 4861, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + "height":18, + "id":14, + "name":"radiant_meeting_room", + "opacity":1, + "properties":[ + { + "name":"jitsiRoom", + "type":"string", + "value":"tcm-radiant" + }], + "type":"tilelayer", + "visible":true, + "width":46, + "x":0, + "y":0 + }, + { + "data":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4861, 4861, 4861, 4861, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4861, 4861, 4861, 4861, 4861, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4861, 4861, 4861, 4861, 4861, 4861, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4861, 4861, 4861, 4861, 4861, 4861, 4861, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4861, 4861, 4861, 4861, 4861, 4861, 4861, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4861, 4861, 4861, 4861, 4861, 4861, 4861, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + "height":18, + "id":16, + "name":"white-meeting-room", + "opacity":1, + "properties":[ + { + "name":"jitsiRoom", + "type":"string", + "value":"tcm-white-room" + }], + "type":"tilelayer", + "visible":true, + "width":46, + "x":0, + "y":0 + }, + { + "data":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4861, 4861, 4861, 4861, 4861, 4861, 4861, 4861, 4861, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4861, 4861, 4861, 4861, 4861, 4861, 4861, 4861, 4861, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4861, 4861, 4861, 4861, 4861, 4861, 4861, 4861, 4861, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4861, 4861, 4861, 4861, 4861, 4861, 4861, 4861, 4861, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4861, 4861, 4861, 4861, 4861, 4861, 4861, 4861, 4861, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4861, 4861, 4861, 4861, 4861, 4861, 4861, 4861, 4861, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + "height":18, + "id":15, + "name":"dire-meeting-room", + "opacity":1, + "properties":[ + { + "name":"jitsiRoom", + "type":"string", + "value":"tcm-dire" + }], + "type":"tilelayer", + "visible":true, + "width":46, + "x":0, + "y":0 + }, { "data":[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1123, 1124, 1125, 1126, 1127, 1128, 1129, 1130, 1131, 1132, 1133, 1134, 1135, 1136, 1137, 1138, 1139, 1140, 1141, 1142, 1143, 1144, 1145, 1146, 1147, 1148, 1149, 1150, 1151, 1152, 1153, 1154, 1155, 1156, 1157, 1158, 1159, 1160, 1161, 1162, 1163, 1164, 1165, 1166, 1167, 1168], "height":18, @@ -134,7 +188,7 @@ "x":0, "y":0 }], - "nextlayerid":14, + "nextlayerid":17, "nextobjectid":1, "orientation":"orthogonal", "renderorder":"right-down", @@ -505,6 +559,29 @@ }] }], "tilewidth":32 + }, + { + "columns":8, + "firstgid":4809, + "image":"..\/Floor0\/floortileset.png", + "imageheight":256, + "imagewidth":256, + "margin":0, + "name":"floortileset", + "spacing":0, + "tilecount":64, + "tileheight":32, + "tiles":[ + { + "id":37, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }], + "tilewidth":32 }], "tilewidth":32, "type":"map", From c739037bc4206c2421440669e8c6f8466b455878 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20N=C3=A9grier?= Date: Mon, 31 Aug 2020 14:54:52 +0200 Subject: [PATCH 120/313] Camera was not properly closed in EnableCameraScene --- front/src/Phaser/Login/EnableCameraScene.ts | 3 ++ front/src/WebRtc/MediaManager.ts | 36 ++++++++++++++------- 2 files changed, 28 insertions(+), 11 deletions(-) diff --git a/front/src/Phaser/Login/EnableCameraScene.ts b/front/src/Phaser/Login/EnableCameraScene.ts index 7e631b6b..6fc1cd54 100644 --- a/front/src/Phaser/Login/EnableCameraScene.ts +++ b/front/src/Phaser/Login/EnableCameraScene.ts @@ -266,6 +266,9 @@ export class EnableCameraScene extends Phaser.Scene { this.soundMeter.stop(); window.removeEventListener('resize', this.repositionCallback); + mediaManager.stopCamera(); + mediaManager.stopMicrophone(); + // Do we have a start URL in the address bar? If so, let's redirect to this address const instanceAndMapUrl = this.findMapUrl(); if (instanceAndMapUrl !== null) { diff --git a/front/src/WebRtc/MediaManager.ts b/front/src/WebRtc/MediaManager.ts index a043e51e..ebd2a585 100644 --- a/front/src/WebRtc/MediaManager.ts +++ b/front/src/WebRtc/MediaManager.ts @@ -127,7 +127,7 @@ export class MediaManager { } } - showGameOverlay(){ + public showGameOverlay(){ const gameOverlay = this.getElementByIdOrFail('game-overlay'); gameOverlay.classList.add('active'); } @@ -148,11 +148,7 @@ export class MediaManager { this.cinemaBtn.classList.add("disabled"); this.constraintsMedia.video = false; this.myCamVideo.srcObject = null; - if (this.localStream) { - this.localStream.getVideoTracks().forEach((MediaStreamTrack: MediaStreamTrack) => { - MediaStreamTrack.stop(); - }); - } + this.stopCamera(); this.getCamera().then((stream) => { this.triggerUpdatedLocalStreamCallbacks(stream); }); @@ -173,11 +169,7 @@ export class MediaManager { this.microphone.style.display = "none"; this.microphoneBtn.classList.add("disabled"); this.constraintsMedia.audio = false; - if(this.localStream) { - this.localStream.getAudioTracks().forEach((MediaStreamTrack: MediaStreamTrack) => { - MediaStreamTrack.stop(); - }); - } + this.stopMicrophone(); this.getCamera().then((stream) => { this.triggerUpdatedLocalStreamCallbacks(stream); }); @@ -287,6 +279,28 @@ export class MediaManager { } } + /** + * Stops the camera from filming + */ + public stopCamera(): void { + if (this.localStream) { + for (const track of this.localStream.getVideoTracks()) { + track.stop(); + } + } + } + + /** + * Stops the microphone from listening + */ + public stopMicrophone(): void { + if (this.localStream) { + for (const track of this.localStream.getAudioTracks()) { + track.stop(); + } + } + } + setCamera(id: string): Promise { let video = this.constraintsMedia.video; if (typeof(video) === 'boolean' || video === undefined) { From 634eecd42a7d1d03528a5f703bdb4b6d79e34288 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20N=C3=A9grier?= Date: Mon, 31 Aug 2020 15:21:05 +0200 Subject: [PATCH 121/313] Fixing issue when both mic and cam are stopped --- front/src/WebRtc/MediaManager.ts | 29 ++++++++++++++++++--------- front/src/WebRtc/ScreenSharingPeer.ts | 6 +++--- front/src/WebRtc/SimplePeer.ts | 17 ++++++++++------ front/src/WebRtc/VideoPeer.ts | 2 +- 4 files changed, 34 insertions(+), 20 deletions(-) diff --git a/front/src/WebRtc/MediaManager.ts b/front/src/WebRtc/MediaManager.ts index ebd2a585..e8cb080d 100644 --- a/front/src/WebRtc/MediaManager.ts +++ b/front/src/WebRtc/MediaManager.ts @@ -7,9 +7,9 @@ const videoConstraint: boolean|MediaTrackConstraints = { facingMode: "user" }; -type UpdatedLocalStreamCallback = (media: MediaStream) => void; -type StartScreenSharingCallback = (media: MediaStream) => void; -type StopScreenSharingCallback = (media: MediaStream) => void; +export type UpdatedLocalStreamCallback = (media: MediaStream|null) => void; +export type StartScreenSharingCallback = (media: MediaStream) => void; +export type StopScreenSharingCallback = (media: MediaStream) => void; // TODO: Split MediaManager in 2 classes: MediaManagerUI (in charge of HTML) and MediaManager (singleton in charge of the camera only) // TODO: verify that microphone event listeners are not triggered plenty of time NOW (since MediaManager is created many times!!!!) @@ -109,7 +109,7 @@ export class MediaManager { this.updatedLocalStreamCallBacks.delete(callback); } - private triggerUpdatedLocalStreamCallbacks(stream: MediaStream): void { + private triggerUpdatedLocalStreamCallbacks(stream: MediaStream|null): void { for (const callback of this.updatedLocalStreamCallBacks) { callback(stream); } @@ -142,16 +142,20 @@ export class MediaManager { }); } - private disableCamera() { + private async disableCamera() { this.cinemaClose.style.display = "block"; this.cinema.style.display = "none"; this.cinemaBtn.classList.add("disabled"); this.constraintsMedia.video = false; this.myCamVideo.srcObject = null; this.stopCamera(); - this.getCamera().then((stream) => { + + if (this.constraintsMedia.audio !== false) { + const stream = await this.getCamera(); this.triggerUpdatedLocalStreamCallbacks(stream); - }); + } else { + this.triggerUpdatedLocalStreamCallbacks(null); + } } private enableMicrophone() { @@ -159,20 +163,25 @@ export class MediaManager { this.microphone.style.display = "block"; this.microphoneBtn.classList.remove("disabled"); this.constraintsMedia.audio = true; + this.getCamera().then((stream) => { this.triggerUpdatedLocalStreamCallbacks(stream); }); } - private disableMicrophone() { + private async disableMicrophone() { this.microphoneClose.style.display = "block"; this.microphone.style.display = "none"; this.microphoneBtn.classList.add("disabled"); this.constraintsMedia.audio = false; this.stopMicrophone(); - this.getCamera().then((stream) => { + + if (this.constraintsMedia.video !== false) { + const stream = await this.getCamera(); this.triggerUpdatedLocalStreamCallbacks(stream); - }); + } else { + this.triggerUpdatedLocalStreamCallbacks(null); + } } private enableScreenSharing() { diff --git a/front/src/WebRtc/ScreenSharingPeer.ts b/front/src/WebRtc/ScreenSharingPeer.ts index 35f43201..3f43a70f 100644 --- a/front/src/WebRtc/ScreenSharingPeer.ts +++ b/front/src/WebRtc/ScreenSharingPeer.ts @@ -70,7 +70,7 @@ export class ScreenSharingPeer extends Peer { } private sendWebrtcScreenSharingSignal(data: unknown) { - console.log("sendWebrtcScreenSharingSignal", data); + //console.log("sendWebrtcScreenSharingSignal", data); try { this.connection.sendWebrtcScreenSharingSignal(data, this.userId); }catch (e) { @@ -82,8 +82,8 @@ export class ScreenSharingPeer extends Peer { * Sends received stream to screen. */ private stream(stream?: MediaStream) { - console.log(`ScreenSharingPeer::stream => ${this.userId}`, stream); - console.log(`stream => ${this.userId} => `, stream); + //console.log(`ScreenSharingPeer::stream => ${this.userId}`, stream); + //console.log(`stream => ${this.userId} => `, stream); if(!stream){ mediaManager.removeActiveScreenSharingVideo(this.userId); this.isReceivingStream = false; diff --git a/front/src/WebRtc/SimplePeer.ts b/front/src/WebRtc/SimplePeer.ts index 3acd65c5..f388b2ec 100644 --- a/front/src/WebRtc/SimplePeer.ts +++ b/front/src/WebRtc/SimplePeer.ts @@ -4,7 +4,12 @@ import { WebRtcSignalReceivedMessageInterface, WebRtcStartMessageInterface } from "../Connection"; -import { mediaManager } from "./MediaManager"; +import { + mediaManager, + StartScreenSharingCallback, + StopScreenSharingCallback, + UpdatedLocalStreamCallback +} from "./MediaManager"; import * as SimplePeerNamespace from "simple-peer"; import {ScreenSharingPeer} from "./ScreenSharingPeer"; import {VideoPeer} from "./VideoPeer"; @@ -32,9 +37,9 @@ export class SimplePeer { private PeerScreenSharingConnectionArray: Map = new Map(); private PeerConnectionArray: Map = new Map(); - private readonly sendLocalVideoStreamCallback: (media: MediaStream) => void; - private readonly sendLocalScreenSharingStreamCallback: (media: MediaStream) => void; - private readonly stopLocalScreenSharingStreamCallback: (media: MediaStream) => void; + private readonly sendLocalVideoStreamCallback: UpdatedLocalStreamCallback; + private readonly sendLocalScreenSharingStreamCallback: StartScreenSharingCallback; + private readonly stopLocalScreenSharingStreamCallback: StopScreenSharingCallback; private readonly peerConnectionListeners: Array = new Array(); constructor(Connection: Connection, WebRtcRoomId: string = "test-webrtc") { @@ -326,9 +331,9 @@ export class SimplePeer { } public sendLocalVideoStream(){ - this.Users.forEach((user: UserSimplePeerInterface) => { + for (const user of this.Users) { this.pushVideoToRemoteUser(user.userId); - }) + } } /** diff --git a/front/src/WebRtc/VideoPeer.ts b/front/src/WebRtc/VideoPeer.ts index ec7f2576..3ffe33e7 100644 --- a/front/src/WebRtc/VideoPeer.ts +++ b/front/src/WebRtc/VideoPeer.ts @@ -85,7 +85,7 @@ export class VideoPeer extends Peer { * Sends received stream to screen. */ private stream(stream?: MediaStream) { - console.log(`VideoPeer::stream => ${this.userId}`, stream); + //console.log(`VideoPeer::stream => ${this.userId}`, stream); if(!stream){ mediaManager.disabledVideoByUserId(this.userId); mediaManager.disabledMicrophoneByUserId(this.userId); From ed116cf2a300c0c2f046d936b14a58b9b3c4ccc1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20N=C3=A9grier?= Date: Fri, 28 Aug 2020 13:52:25 +0200 Subject: [PATCH 122/313] Switching on our very own turn server --- deeployer.libsonnet | 5 ++++- docker-compose.yaml | 3 +++ front/src/Enum/EnvironmentVariable.ts | 6 ++++++ front/src/WebRtc/ScreenSharingPeer.ts | 7 ++++--- front/src/WebRtc/VideoPeer.ts | 7 ++++--- 5 files changed, 21 insertions(+), 7 deletions(-) diff --git a/deeployer.libsonnet b/deeployer.libsonnet index 528342ed..620e9484 100644 --- a/deeployer.libsonnet +++ b/deeployer.libsonnet @@ -26,7 +26,10 @@ "ports": [80], "env": { "API_URL": "api."+url, - "JITSI_URL": "meet.jit.si" + "JITSI_URL": "meet.jit.si", + "TURN_SERVER": "coturn.workadventu.re:443", + "TURN_USER": "workadventure", + "TURN_PASSWORD": "WorkAdventure123" } }, "website": { diff --git a/docker-compose.yaml b/docker-compose.yaml index d944e0f8..e731bbed 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -27,6 +27,9 @@ services: NODE_ENV: development API_URL: api.workadventure.localhost STARTUP_COMMAND_1: yarn install + TURN_SERVER: "turn:coturn.workadventu.re:443,turns:coturn.workadventu.re:443" + TURN_USER: workadventure + TURN_PASSWORD: WorkAdventure123 command: yarn run start volumes: - ./front:/usr/src/app diff --git a/front/src/Enum/EnvironmentVariable.ts b/front/src/Enum/EnvironmentVariable.ts index 97a3f91b..59c8b50f 100644 --- a/front/src/Enum/EnvironmentVariable.ts +++ b/front/src/Enum/EnvironmentVariable.ts @@ -1,5 +1,8 @@ const DEBUG_MODE: boolean = process.env.DEBUG_MODE == "true"; const API_URL = (typeof(window) !== 'undefined' ? window.location.protocol : 'http:') + '//' + (process.env.API_URL || "api.workadventure.localhost"); +const TURN_SERVER: string = process.env.TURN_SERVER || "turn:numb.viagenie.ca"; +const TURN_USER: string = process.env.TURN_USER || 'g.parant@thecodingmachine.com'; +const TURN_PASSWORD: string = process.env.TURN_PASSWORD || 'itcugcOHxle9Acqi$'; const JITSI_URL : string|undefined = (process.env.JITSI_URL === '') ? undefined : process.env.JITSI_URL; const RESOLUTION = 3; const ZOOM_LEVEL = 1/*3/4*/; @@ -13,5 +16,8 @@ export { ZOOM_LEVEL, POSITION_DELAY, MAX_EXTRAPOLATION_TIME, + TURN_SERVER, + TURN_USER, + TURN_PASSWORD, JITSI_URL } diff --git a/front/src/WebRtc/ScreenSharingPeer.ts b/front/src/WebRtc/ScreenSharingPeer.ts index 3f43a70f..3774c612 100644 --- a/front/src/WebRtc/ScreenSharingPeer.ts +++ b/front/src/WebRtc/ScreenSharingPeer.ts @@ -1,6 +1,7 @@ import * as SimplePeerNamespace from "simple-peer"; import {mediaManager} from "./MediaManager"; import {Connection} from "../Connection"; +import {TURN_SERVER, TURN_USER, TURN_PASSWORD} from "../Enum/EnvironmentVariable"; const Peer: SimplePeerNamespace.SimplePeer = require('simple-peer'); @@ -23,9 +24,9 @@ export class ScreenSharingPeer extends Peer { urls: 'stun:stun.l.google.com:19302' }, { - urls: 'turn:numb.viagenie.ca', - username: 'g.parant@thecodingmachine.com', - credential: 'itcugcOHxle9Acqi$' + urls: TURN_SERVER, + username: TURN_USER, + credential: TURN_PASSWORD }, ] } diff --git a/front/src/WebRtc/VideoPeer.ts b/front/src/WebRtc/VideoPeer.ts index 3ffe33e7..0124eee5 100644 --- a/front/src/WebRtc/VideoPeer.ts +++ b/front/src/WebRtc/VideoPeer.ts @@ -1,6 +1,7 @@ import * as SimplePeerNamespace from "simple-peer"; import {mediaManager} from "./MediaManager"; import {Connection} from "../Connection"; +import {TURN_PASSWORD, TURN_SERVER, TURN_USER} from "../Enum/EnvironmentVariable"; const Peer: SimplePeerNamespace.SimplePeer = require('simple-peer'); @@ -18,9 +19,9 @@ export class VideoPeer extends Peer { urls: 'stun:stun.l.google.com:19302' }, { - urls: 'turn:numb.viagenie.ca', - username: 'g.parant@thecodingmachine.com', - credential: 'itcugcOHxle9Acqi$' + urls: TURN_SERVER, + username: TURN_USER, + credential: TURN_PASSWORD }, ] } From 3875c0afe83dbb1f3ed323c9280a0f4a984a0168 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20N=C3=A9grier?= Date: Fri, 28 Aug 2020 16:18:26 +0200 Subject: [PATCH 123/313] Fixing environment variable passing in Webpack --- front/webpack.config.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/front/webpack.config.js b/front/webpack.config.js index 7ffbcfcc..3083fd25 100644 --- a/front/webpack.config.js +++ b/front/webpack.config.js @@ -42,7 +42,7 @@ module.exports = { new webpack.ProvidePlugin({ Phaser: 'phaser' }), - new webpack.EnvironmentPlugin(['API_URL', 'DEBUG_MODE', 'JITSI_URL']) + new webpack.EnvironmentPlugin(['API_URL', 'DEBUG_MODE', 'TURN_SERVER', 'TURN_USER', 'TURN_PASSWORD', 'JITSI_URL']) ], }; From 8655aef6298d34f1895f6555b063ceabd0120051 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20N=C3=A9grier?= Date: Fri, 28 Aug 2020 16:29:21 +0200 Subject: [PATCH 124/313] Fixing URL passing in WebRtc setup --- front/src/WebRtc/ScreenSharingPeer.ts | 2 +- front/src/WebRtc/VideoPeer.ts | 19 ++++++++++++++++++- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/front/src/WebRtc/ScreenSharingPeer.ts b/front/src/WebRtc/ScreenSharingPeer.ts index 3774c612..8857274e 100644 --- a/front/src/WebRtc/ScreenSharingPeer.ts +++ b/front/src/WebRtc/ScreenSharingPeer.ts @@ -24,7 +24,7 @@ export class ScreenSharingPeer extends Peer { urls: 'stun:stun.l.google.com:19302' }, { - urls: TURN_SERVER, + urls: TURN_SERVER.split(','), username: TURN_USER, credential: TURN_PASSWORD }, diff --git a/front/src/WebRtc/VideoPeer.ts b/front/src/WebRtc/VideoPeer.ts index 0124eee5..33422433 100644 --- a/front/src/WebRtc/VideoPeer.ts +++ b/front/src/WebRtc/VideoPeer.ts @@ -19,7 +19,7 @@ export class VideoPeer extends Peer { urls: 'stun:stun.l.google.com:19302' }, { - urls: TURN_SERVER, + urls: TURN_SERVER.split(','), username: TURN_USER, credential: TURN_PASSWORD }, @@ -27,6 +27,23 @@ export class VideoPeer extends Peer { } }); + console.log('PEER SETUP ', { + initiator: initiator ? initiator : false, + reconnectTimer: 10000, + config: { + iceServers: [ + { + urls: 'stun:stun.l.google.com:19302' + }, + { + urls: TURN_SERVER, + username: TURN_USER, + credential: TURN_PASSWORD + }, + ] + } + }) + //start listen signal for the peer connection this.on('signal', (data: unknown) => { this.sendWebrtcSignal(data); From b6590e21dd310f48fc840d99b15cecbf5addeca8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20N=C3=A9grier?= Date: Fri, 28 Aug 2020 17:30:33 +0200 Subject: [PATCH 125/313] Fixing coturn URLS --- deeployer.libsonnet | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deeployer.libsonnet b/deeployer.libsonnet index 620e9484..d6cd232b 100644 --- a/deeployer.libsonnet +++ b/deeployer.libsonnet @@ -27,7 +27,7 @@ "env": { "API_URL": "api."+url, "JITSI_URL": "meet.jit.si", - "TURN_SERVER": "coturn.workadventu.re:443", + "TURN_SERVER": "turn:coturn.workadventu.re:443,turns:coturn.workadventu.re:443", "TURN_USER": "workadventure", "TURN_PASSWORD": "WorkAdventure123" } From 9516f6615cd3b0f9f75c80082f867922dfa91f42 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20N=C3=A9grier?= Date: Mon, 31 Aug 2020 17:56:11 +0200 Subject: [PATCH 126/313] Centering character based on game div Previously, character was centered based on window size, but when doing CoWebsite browsing, window size != game size, leading to poorly centered characters --- front/dist/resources/style/style.css | 3 +- front/src/WebRtc/LayoutManager.ts | 43 ++++++++++++++-------------- 2 files changed, 23 insertions(+), 23 deletions(-) diff --git a/front/dist/resources/style/style.css b/front/dist/resources/style/style.css index 2dbba223..807544ad 100644 --- a/front/dist/resources/style/style.css +++ b/front/dist/resources/style/style.css @@ -299,12 +299,11 @@ body { flex-basis: 100%; }*/ -.cowebsite iframe { +.cowebsite > iframe { width: 100%; height: 100%; } - .game-overlay { display: none; position: absolute; diff --git a/front/src/WebRtc/LayoutManager.ts b/front/src/WebRtc/LayoutManager.ts index 02818c78..dc013563 100644 --- a/front/src/WebRtc/LayoutManager.ts +++ b/front/src/WebRtc/LayoutManager.ts @@ -204,6 +204,7 @@ class LayoutManager { * Tries to find the biggest available box of remaining space (this is a space where we can center the character) */ public findBiggestAvailableArray(): {xStart: number, yStart: number, xEnd: number, yEnd: number} { + const game = HtmlUtils.getElementByIdOrFail('game'); if (this.mode === LayoutMode.VideoChat) { const children = document.querySelectorAll('div.chat-mode > div'); const htmlChildren = Array.from(children.values()); @@ -213,27 +214,27 @@ class LayoutManager { return { xStart: 0, yStart: 0, - xEnd: window.innerWidth, - yEnd: window.innerHeight + xEnd: game.offsetWidth, + yEnd: game.offsetHeight } } const lastDiv = htmlChildren[htmlChildren.length - 1]; // Compute area between top right of the last div and bottom right of window - const area1 = (window.innerWidth - (lastDiv.offsetLeft + lastDiv.offsetWidth)) - * (window.innerHeight - lastDiv.offsetTop); + const area1 = (game.offsetWidth - (lastDiv.offsetLeft + lastDiv.offsetWidth)) + * (game.offsetHeight - lastDiv.offsetTop); // Compute area between bottom of last div and bottom of the screen on whole width - const area2 = window.innerWidth - * (window.innerHeight - (lastDiv.offsetTop + lastDiv.offsetHeight)); + const area2 = game.offsetWidth + * (game.offsetHeight - (lastDiv.offsetTop + lastDiv.offsetHeight)); if (area1 < 0 && area2 < 0) { // If screen is full, let's not attempt something foolish and simply center character in the middle. return { xStart: 0, yStart: 0, - xEnd: window.innerWidth, - yEnd: window.innerHeight + xEnd: game.offsetWidth, + yEnd: game.offsetHeight } } if (area1 <= area2) { @@ -241,16 +242,16 @@ class LayoutManager { return { xStart: 0, yStart: lastDiv.offsetTop + lastDiv.offsetHeight, - xEnd: window.innerWidth, - yEnd: window.innerHeight + xEnd: game.offsetWidth, + yEnd: game.offsetHeight } } else { console.log('lastDiv', lastDiv.offsetTop); return { xStart: lastDiv.offsetLeft + lastDiv.offsetWidth, yStart: lastDiv.offsetTop, - xEnd: window.innerWidth, - yEnd: window.innerHeight + xEnd: game.offsetWidth, + yEnd: game.offsetHeight } } } else { @@ -263,15 +264,15 @@ class LayoutManager { return { xStart: 0, yStart: 0, - xEnd: window.innerWidth, - yEnd: window.innerHeight + xEnd: game.offsetWidth, + yEnd: game.offsetHeight } } // At this point, we know we have at least one element in the main section. const lastPresentationDiv = mainSectionChildren[mainSectionChildren.length-1]; - const presentationArea = (window.innerHeight - (lastPresentationDiv.offsetTop + lastPresentationDiv.offsetHeight)) + const presentationArea = (game.offsetHeight - (lastPresentationDiv.offsetTop + lastPresentationDiv.offsetHeight)) * (lastPresentationDiv.offsetLeft + lastPresentationDiv.offsetWidth); let leftSideBar: number; @@ -284,22 +285,22 @@ class LayoutManager { leftSideBar = lastSideBarChildren.offsetLeft; bottomSideBar = lastSideBarChildren.offsetTop + lastSideBarChildren.offsetHeight; } - const sideBarArea = (window.innerWidth - leftSideBar) - * (window.innerHeight - bottomSideBar); + const sideBarArea = (game.offsetWidth - leftSideBar) + * (game.offsetHeight - bottomSideBar); if (presentationArea <= sideBarArea) { return { xStart: leftSideBar, yStart: bottomSideBar, - xEnd: window.innerWidth, - yEnd: window.innerHeight + xEnd: game.offsetWidth, + yEnd: game.offsetHeight } } else { return { xStart: 0, yStart: lastPresentationDiv.offsetTop + lastPresentationDiv.offsetHeight, - xEnd: /*lastPresentationDiv.offsetLeft + lastPresentationDiv.offsetWidth*/ window.innerWidth , // To avoid flickering when a chat start, we center on the center of the screen, not the center of the main content area - yEnd: window.innerHeight + xEnd: /*lastPresentationDiv.offsetLeft + lastPresentationDiv.offsetWidth*/ game.offsetWidth , // To avoid flickering when a chat start, we center on the center of the screen, not the center of the main content area + yEnd: game.offsetHeight } } } From f70ba1411a99568f87c5b2b7a19adf0b2bb99f69 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20N=C3=A9grier?= Date: Tue, 1 Sep 2020 14:43:21 +0200 Subject: [PATCH 127/313] Hiding cam details when entering a Jisti room --- front/src/Phaser/Game/GameScene.ts | 3 +++ front/src/WebRtc/MediaManager.ts | 5 +++++ 2 files changed, 8 insertions(+) diff --git a/front/src/Phaser/Game/GameScene.ts b/front/src/Phaser/Game/GameScene.ts index a17eab22..5ea28b99 100644 --- a/front/src/Phaser/Game/GameScene.ts +++ b/front/src/Phaser/Game/GameScene.ts @@ -30,6 +30,7 @@ import GameObject = Phaser.GameObjects.GameObject; import FILE_LOAD_ERROR = Phaser.Loader.Events.FILE_LOAD_ERROR; import {GameMap} from "./GameMap"; import {CoWebsiteManager} from "../../WebRtc/CoWebsiteManager"; +import {mediaManager} from "../../WebRtc/MediaManager"; export enum Textures { @@ -429,6 +430,7 @@ export class GameScene extends Phaser.Scene implements CenterListener { this.connection.setSilent(false); jitsiApi?.dispose(); CoWebsiteManager.closeCoWebsite(); + mediaManager.showGameOverlay(); } else { CoWebsiteManager.insertCoWebsite((cowebsiteDiv => { const domain = JITSI_URL; @@ -449,6 +451,7 @@ export class GameScene extends Phaser.Scene implements CenterListener { jitsiApi.executeCommand('displayName', gameManager.getPlayerName()); })); this.connection.setSilent(true); + mediaManager.hideGameOverlay(); } }) diff --git a/front/src/WebRtc/MediaManager.ts b/front/src/WebRtc/MediaManager.ts index e8cb080d..153d660b 100644 --- a/front/src/WebRtc/MediaManager.ts +++ b/front/src/WebRtc/MediaManager.ts @@ -132,6 +132,11 @@ export class MediaManager { gameOverlay.classList.add('active'); } + public hideGameOverlay(){ + const gameOverlay = this.getElementByIdOrFail('game-overlay'); + gameOverlay.classList.remove('active'); + } + private enableCamera() { this.cinemaClose.style.display = "none"; this.cinemaBtn.classList.remove("disabled"); From d4fe59d154f44c8d652765e94498b53afa0f4e67 Mon Sep 17 00:00:00 2001 From: Gregoire Parant Date: Wed, 9 Sep 2020 12:32:01 +0200 Subject: [PATCH 128/313] Create config file artillery websocket --- back/package.json | 1 + back/socketio-load-test.yaml | 50 + back/socketioLoadTest.js | 15 + back/src/Controller/IoSocketController.ts | 17 +- back/yarn.lock | 1324 ++++++++++++++++++++- 5 files changed, 1389 insertions(+), 18 deletions(-) create mode 100644 back/socketio-load-test.yaml create mode 100644 back/socketioLoadTest.js diff --git a/back/package.json b/back/package.json index a20c876f..9488419a 100644 --- a/back/package.json +++ b/back/package.json @@ -41,6 +41,7 @@ "@types/jsonwebtoken": "^8.3.8", "@types/socket.io": "^2.1.4", "@types/uuidv4": "^5.0.0", + "artillery": "^1.6.1", "body-parser": "^1.19.0", "express": "^4.17.1", "generic-type-guard": "^3.2.0", diff --git a/back/socketio-load-test.yaml b/back/socketio-load-test.yaml new file mode 100644 index 00000000..dda4fded --- /dev/null +++ b/back/socketio-load-test.yaml @@ -0,0 +1,50 @@ +config: + target: "http://api.workadventure.localhost/" + socketio: + transports: ["websocket"] + query: + token: "test" + phases: + - duration: 10 + arrivalRate: 10 + - duration: 10 + arrivalRate: 10 + processor: "./socketioLoadTest.js" +scenarios: + - name: "Connect and send a bunch of messages" + weight: 90 + engine: "socketio" + flow: + #- loop: + #- emit: + # channel: "connection" + # data: "hello world!" + #- think: 5 + - emit: + channel: "set-player-details" + data: + name: 'TEST' + characterLayers: ['male3'] + - think: 1 + - emit: + channel: "join-room" + data: + roomId: 'global__api.workadventure.localhost/map/files/Floor0/floor0' + position: + x: 783 + y: 170 + direction: 'down' + moving: false + - think: 1 + - loop: + - function: "setYRandom" + - emit: + channel: "user-position" + data: + x: "{{ x }}" + y: "{{ y }}" + direction: 'down' + moving: false + - think: 1 + count: 10 + - think: 10 diff --git a/back/socketioLoadTest.js b/back/socketioLoadTest.js new file mode 100644 index 00000000..ca7fc39d --- /dev/null +++ b/back/socketioLoadTest.js @@ -0,0 +1,15 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +'use strict'; + +module.exports = { + setYRandom +}; + +function setYRandom(context, events, done) { + context.vars.x = (883 + Math.round(Math.random() * 300)); + context.vars.y = (270 + Math.round(Math.random() * 300)); + return done(); +} \ No newline at end of file diff --git a/back/src/Controller/IoSocketController.ts b/back/src/Controller/IoSocketController.ts index 5f1bc47f..34756ffe 100644 --- a/back/src/Controller/IoSocketController.ts +++ b/back/src/Controller/IoSocketController.ts @@ -18,6 +18,7 @@ import {isJoinRoomMessageInterface} from "../Model/Websocket/JoinRoomMessage"; import {isPointInterface, PointInterface} from "../Model/Websocket/PointInterface"; import {isWebRtcSignalMessageInterface} from "../Model/Websocket/WebRtcSignalMessage"; import {UserInGroupInterface} from "../Model/Websocket/UserInGroupInterface"; +import {uuid} from 'uuidv4'; enum SockerIoEvent { CONNECTION = "connection", @@ -60,10 +61,18 @@ export class IoSocketController { // Authentication with token. it will be decoded and stored in the socket. // Completely commented for now, as we do not use the "/login" route at all. this.Io.use((socket: Socket, next) => { + console.log(socket.handshake.query.token); if (!socket.handshake.query || !socket.handshake.query.token) { console.error('An authentication error happened, a user tried to connect without a token.'); return next(new Error('Authentication error')); } + if(socket.handshake.query.token === 'test'){ + (socket as ExSocketInterface).token = socket.handshake.query.token; + (socket as ExSocketInterface).userId = uuid(); + console.log((socket as ExSocketInterface).userId); + next(); + return; + } if(this.searchClientByToken(socket.handshake.query.token)){ console.error('An authentication error happened, a user tried to connect while its token is already connected.'); return next(new Error('Authentication error')); @@ -155,6 +164,7 @@ export class IoSocketController { y: user y position on map */ socket.on(SockerIoEvent.JOIN_ROOM, (message: unknown, answerFn): void => { + console.log(SockerIoEvent.JOIN_ROOM, message); try { if (!isJoinRoomMessageInterface(message)) { socket.emit(SockerIoEvent.MESSAGE_ERROR, {message: 'Invalid JOIN_ROOM message.'}); @@ -191,7 +201,7 @@ export class IoSocketController { } return new MessageUserPosition(user.id, player.name, player.characterLayers, player.position); }).filter((item: MessageUserPosition|null) => item !== null); - answerFn(listOfUsers); + //answerFn(listOfUsers); } catch (e) { console.error('An error occurred on "join_room" event'); console.error(e); @@ -199,6 +209,7 @@ export class IoSocketController { }); socket.on(SockerIoEvent.USER_POSITION, (position: unknown): void => { + console.log(SockerIoEvent.USER_POSITION, position); try { if (!isPointInterface(position)) { socket.emit(SockerIoEvent.MESSAGE_ERROR, {message: 'Invalid USER_POSITION message.'}); @@ -265,6 +276,7 @@ export class IoSocketController { // Let's send the user id to the user socket.on(SockerIoEvent.SET_PLAYER_DETAILS, (playerDetails: unknown, answerFn) => { + console.log(SockerIoEvent.SET_PLAYER_DETAILS, playerDetails); if (!isSetPlayerDetailsMessage(playerDetails)) { socket.emit(SockerIoEvent.MESSAGE_ERROR, {message: 'Invalid SET_PLAYER_DETAILS message.'}); console.warn('Invalid SET_PLAYER_DETAILS message received: ', playerDetails); @@ -273,10 +285,11 @@ export class IoSocketController { const Client = (socket as ExSocketInterface); Client.name = playerDetails.name; Client.characterLayers = playerDetails.characterLayers; - answerFn(Client.userId); + //answerFn(Client.userId); }); socket.on(SockerIoEvent.SET_SILENT, (silent: unknown) => { + console.log(SockerIoEvent.SET_SILENT, silent); if (typeof silent !== "boolean") { socket.emit(SockerIoEvent.MESSAGE_ERROR, {message: 'Invalid SET_SILENT message.'}); console.warn('Invalid SET_SILENT message received: ', silent); diff --git a/back/yarn.lock b/back/yarn.lock index f660a5c8..e54745ee 100644 --- a/back/yarn.lock +++ b/back/yarn.lock @@ -187,12 +187,39 @@ ajv@^6.10.0, ajv@^6.10.2: json-schema-traverse "^0.4.1" uri-js "^4.2.2" +ajv@^6.12.3: + version "6.12.4" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.4.tgz#0614facc4522127fa713445c6bfd3ebd376e2234" + integrity sha512-eienB2c9qVQs2KWexhkrdMLVDoIQCz5KSeLxwg9Lzk4DOfBtIK9PQwwufcsn1jjGuf9WZmqPMbGxOzfcuphJCQ== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +ansi-align@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-2.0.0.tgz#c36aeccba563b89ceb556f3690f0b1d9e3547f7f" + integrity sha1-w2rsy6VjuJzrVW82kPCx2eNUf38= + dependencies: + string-width "^2.0.0" + ansi-escapes@^4.2.1: version "4.3.1" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.1.tgz#a5c47cc43181f1f38ffd7076837700d395522a61" dependencies: type-fest "^0.11.0" +ansi-regex@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" + integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= + +ansi-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" + integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= + ansi-regex@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" @@ -201,6 +228,11 @@ ansi-regex@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" +ansi-styles@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" + integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4= + ansi-styles@^3.2.0, ansi-styles@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" @@ -236,6 +268,74 @@ arraybuffer.slice@~0.0.7: version "0.0.7" resolved "https://registry.yarnpkg.com/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz#3bbc4275dd584cc1b10809b89d4e8b63a69e7675" +arrivals@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/arrivals/-/arrivals-2.1.2.tgz#bbf8676908f85a133df4c5c1aff8f4cd99e92785" + integrity sha512-g3+rxhxUen2H4+PPBOz6U6pkQ4esBuQPna1rPskgK1jamBdDZeoppyB2vPUM/l0ccunwRrq4r2rKgCvc2FnrFA== + dependencies: + debug "^4.0.1" + nanotimer "0.3.14" + +artillery-plugin-statsd@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/artillery-plugin-statsd/-/artillery-plugin-statsd-2.2.1.tgz#45f625687540128b851d9519f5c14abf0a6e963b" + integrity sha512-Zn6hxi11p1Rpazopm8bZkIqhIA5laTE3/amEhLsE933o8bgvrAJBblpsZ45vhmURztsglqC9yxSCQyW27yUZmQ== + dependencies: + debug "^3.1.0" + lodash "^4.17.11" + lynx "^0.2.0" + +artillery@^1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/artillery/-/artillery-1.6.1.tgz#225c83cb9d6a1b0014d0ff5d6db64b63cba9fe80" + integrity sha512-yRUqYziBsnAuzBM4G3d1uJ0YvbyxLF3e7BsjMxguzOaNxxdAFAady2CBJWe1BrPM4yLnW6lH/O6AcSG/CPzjfw== + dependencies: + arrivals "^2.1.2" + artillery-plugin-statsd "^2.2.1" + async "^1.5.2" + chalk "1.1.3" + cheerio "^1.0.0-rc.2" + commander "2.9.0" + csv-parse "^4.4.6" + debug "^2.2.0" + deep-equal "^1.0.1" + deep-for-each "^3.0.0" + driftless "^2.0.3" + esprima "^4.0.0" + filtrex "^0.5.4" + js-yaml "^3.13.1" + jsck "^0.3.2" + jsonpath "^1.0.2" + lodash "^4.17.13" + moment "^2.22.1" + nanotimer "^0.3.15" + opn "^5.3.0" + ora "^1.3.0" + pidusage "^1.1.6" + rc "^1.1.6" + request "^2.88.0" + socket.io-client "^2.1.0" + socketio-wildcard "^2.0.0" + stats-lite "^2.1.0" + tmp "0.0.28" + tough-cookie "^2.3.4" + try-require "^1.2.1" + update-notifier "^2.1.0" + uuid "^2.0.3" + ws "^5.1.1" + +asn1@~0.2.3: + version "0.2.4" + resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" + integrity sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg== + dependencies: + safer-buffer "~2.1.0" + +assert-plus@1.0.0, assert-plus@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" + integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= + astral-regex@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" @@ -244,6 +344,26 @@ async-limiter@~1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" +async@^1.5.2: + version "1.5.2" + resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" + integrity sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo= + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= + +aws-sign2@~0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" + integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= + +aws4@^1.8.0: + version "1.10.1" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.10.1.tgz#e1e82e4f3e999e2cfd61b161280d16a111f86428" + integrity sha512-zg7Hz2k5lI8kb7U32998pRRFin7zJlkfezGJjUc2heaD4Pw2wObakCDVzkKztTm/Ln7eiVvYsjqak0Ed4LkMDA== + backo2@1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/backo2/-/backo2-1.0.2.tgz#31ab1ac8b129363463e35b3ebb69f4dfcfba7947" @@ -260,6 +380,13 @@ base64id@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/base64id/-/base64id-2.0.0.tgz#2770ac6bc47d312af97a8bf9a634342e0cd25cb6" +bcrypt-pbkdf@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" + integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4= + dependencies: + tweetnacl "^0.14.3" + better-assert@~1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/better-assert/-/better-assert-1.0.2.tgz#40866b9e1b9e0b55b481894311e68faffaebc522" @@ -290,6 +417,24 @@ body-parser@1.19.0, body-parser@^1.19.0: raw-body "2.4.0" type-is "~1.6.17" +boolbase@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" + integrity sha1-aN/1++YMUes3cl6p4+0xDcwed24= + +boxen@^1.2.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/boxen/-/boxen-1.3.0.tgz#55c6c39a8ba58d9c61ad22cd877532deb665a20b" + integrity sha512-TNPjfTr432qx7yOjQyaXm3dSR0MH9vXp7eT1BFSl/C51g+EFnOR9hTg1IreahGBmDNCehscshe45f+C1TBZbLw== + dependencies: + ansi-align "^2.0.0" + camelcase "^4.0.0" + chalk "^2.0.1" + cli-boxes "^1.0.0" + string-width "^2.0.0" + term-size "^1.2.0" + widest-line "^2.0.0" + brace-expansion@^1.1.7: version "1.1.11" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" @@ -328,7 +473,33 @@ camelcase@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f" -chalk@^2.0.0, chalk@^2.1.0: +camelcase@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" + integrity sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0= + +capture-stack-trace@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/capture-stack-trace/-/capture-stack-trace-1.0.1.tgz#a6c0bbe1f38f3aa0b92238ecb6ff42c344d4135d" + integrity sha512-mYQLZnx5Qt1JgB1WEiMCf2647plpGeQ2NMR/5L0HNZzGQo4fuSPnK+wjfPnKZV0aiJDgzmWqqkV/g7JD+DW0qw== + +caseless@~0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" + integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= + +chalk@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" + integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg= + dependencies: + ansi-styles "^2.2.1" + escape-string-regexp "^1.0.2" + has-ansi "^2.0.0" + strip-ansi "^3.0.0" + supports-color "^2.0.0" + +chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" dependencies: @@ -347,12 +518,46 @@ chardet@^0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" +cheerio@^1.0.0-rc.2: + version "1.0.0-rc.3" + resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-1.0.0-rc.3.tgz#094636d425b2e9c0f4eb91a46c05630c9a1a8bf6" + integrity sha512-0td5ijfUPuubwLUu0OBoe98gZj8C/AA+RW3v67GPlGOrvxWjZmBXiBCRU+I8VEiNyJzjth40POfHiz2RB3gImA== + dependencies: + css-select "~1.2.0" + dom-serializer "~0.1.1" + entities "~1.1.1" + htmlparser2 "^3.9.1" + lodash "^4.15.0" + parse5 "^3.0.1" + +ci-info@^1.5.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.6.0.tgz#2ca20dbb9ceb32d4524a683303313f0304b1e497" + integrity sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A== + +cli-boxes@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-1.0.0.tgz#4fa917c3e59c94a004cd61f8ee509da651687143" + integrity sha1-T6kXw+WclKAEzWH47lCdplFocUM= + +cli-cursor@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" + integrity sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU= + dependencies: + restore-cursor "^2.0.0" + cli-cursor@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" dependencies: restore-cursor "^3.1.0" +cli-spinners@^1.0.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-1.3.1.tgz#002c1990912d0d59580c93bd36c056de99e4259a" + integrity sha512-1QL4544moEsDVH9T/l6Cemov/37iv1RtoKf7NJ04A60+4MREXNfx/QvavbH6QoGdsD4N4Mwy49cmaINR/o2mdg== + cli-width@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639" @@ -377,6 +582,20 @@ color-name@~1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" +combined-stream@^1.0.6, combined-stream@~1.0.6: + version "1.0.8" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== + dependencies: + delayed-stream "~1.0.0" + +commander@2.9.0: + version "2.9.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.9.0.tgz#9c99094176e12240cb22d6c5146098400fe0f7d4" + integrity sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q= + dependencies: + graceful-readlink ">= 1.0.0" + component-bind@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/component-bind/-/component-bind-1.0.0.tgz#00c608ab7dcd93897c0009651b1d3a8e1e73bbd1" @@ -393,6 +612,18 @@ concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" +configstore@^3.0.0: + version "3.1.5" + resolved "https://registry.yarnpkg.com/configstore/-/configstore-3.1.5.tgz#e9af331fadc14dabd544d3e7e76dc446a09a530f" + integrity sha512-nlOhI4+fdzoK5xmJ+NY+1gZK56bwEaWZr8fYuXohZ9Vkc1o3a4T/R3M+yE/w7x/ZVJ1zF8c+oaOvF0dztdUgmA== + dependencies: + dot-prop "^4.2.1" + graceful-fs "^4.1.2" + make-dir "^1.0.0" + unique-string "^1.0.0" + write-file-atomic "^2.0.0" + xdg-basedir "^3.0.0" + content-disposition@0.5.3: version "0.5.3" resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.3.tgz#e130caf7e7279087c5616c2007d0485698984fbd" @@ -415,6 +646,27 @@ cookie@0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.0.tgz#beb437e7022b3b6d49019d088665303ebe9c14ba" +core-util-is@1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= + +create-error-class@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/create-error-class/-/create-error-class-3.0.2.tgz#06be7abef947a3f14a30fd610671d401bca8b7b6" + integrity sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y= + dependencies: + capture-stack-trace "^1.0.0" + +cross-spawn@^5.0.1: + version "5.1.0" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" + integrity sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk= + dependencies: + lru-cache "^4.0.1" + shebang-command "^1.2.0" + which "^1.2.9" + cross-spawn@^6.0.5: version "6.0.5" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" @@ -425,12 +677,44 @@ cross-spawn@^6.0.5: shebang-command "^1.2.0" which "^1.2.9" +crypto-random-string@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-1.0.0.tgz#a230f64f568310e1498009940790ec99545bca7e" + integrity sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4= + +css-select@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/css-select/-/css-select-1.2.0.tgz#2b3a110539c5355f1cd8d314623e870b121ec858" + integrity sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg= + dependencies: + boolbase "~1.0.0" + css-what "2.1" + domutils "1.5.1" + nth-check "~1.0.1" + +css-what@2.1: + version "2.1.3" + resolved "https://registry.yarnpkg.com/css-what/-/css-what-2.1.3.tgz#a6d7604573365fe74686c3f311c56513d88285f2" + integrity sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg== + +csv-parse@^4.4.6: + version "4.12.0" + resolved "https://registry.yarnpkg.com/csv-parse/-/csv-parse-4.12.0.tgz#fd42d6291bbaadd51d3009f6cadbb3e53b4ce026" + integrity sha512-wPQl3H79vWLPI8cgKFcQXl0NBgYYEqVnT1i6/So7OjMpsI540oD7p93r3w6fDSyPvwkTepG05F69/7AViX2lXg== + currently-unhandled@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea" dependencies: array-find-index "^1.0.1" +dashdash@^1.12.0: + version "1.14.1" + resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" + integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA= + dependencies: + assert-plus "^1.0.0" + dateformat@~1.0.4-1.2.3: version "1.0.12" resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-1.0.12.tgz#9f124b67594c937ff706932e4a642cca8dbbfee9" @@ -442,12 +726,19 @@ debounce@^1.0.0: version "1.2.0" resolved "https://registry.yarnpkg.com/debounce/-/debounce-1.2.0.tgz#44a540abc0ea9943018dc0eaa95cce87f65cd131" -debug@2.6.9: +debug@2.6.9, debug@^2.2.0: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" dependencies: ms "2.0.0" +debug@^3.1.0: + version "3.2.6" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" + integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== + dependencies: + ms "^2.1.1" + debug@^4.0.1, debug@^4.1.1, debug@~4.1.0: version "4.1.1" resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" @@ -464,10 +755,46 @@ decamelize@^1.1.2: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" +deep-equal@^1.0.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.1.1.tgz#b5c98c942ceffaf7cb051e24e1434a25a2e6076a" + integrity sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g== + dependencies: + is-arguments "^1.0.4" + is-date-object "^1.0.1" + is-regex "^1.0.4" + object-is "^1.0.1" + object-keys "^1.1.1" + regexp.prototype.flags "^1.2.0" + +deep-extend@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" + integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== + +deep-for-each@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/deep-for-each/-/deep-for-each-3.0.0.tgz#0f5d463cb93755c41fccff42145874e9e077fd61" + integrity sha512-pPN+0f8jlnNP+z90qqOdxGghJU5XM6oBDhvAR+qdQzjCg5pk/7VPPvKK1GqoXEFkHza6ZS+Otzzvmr0g3VUaKw== + dependencies: + lodash.isplainobject "^4.0.6" + deep-is@~0.1.3: version "0.1.3" resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" +define-properties@^1.1.2, define-properties@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" + integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== + dependencies: + object-keys "^1.0.12" + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= + depd@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" @@ -486,12 +813,88 @@ doctrine@^3.0.0: dependencies: esutils "^2.0.2" +dom-serializer@0: + version "0.2.2" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.2.2.tgz#1afb81f533717175d478655debc5e332d9f9bb51" + integrity sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g== + dependencies: + domelementtype "^2.0.1" + entities "^2.0.0" + +dom-serializer@~0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.1.tgz#1ec4059e284babed36eec2941d4a970a189ce7c0" + integrity sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA== + dependencies: + domelementtype "^1.3.0" + entities "^1.1.1" + +domelementtype@1, domelementtype@^1.3.0, domelementtype@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f" + integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w== + +domelementtype@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.0.1.tgz#1f8bdfe91f5a78063274e803b4bdcedf6e94f94d" + integrity sha512-5HOHUDsYZWV8FGWN0Njbr/Rn7f/eWSQi1v7+HsUVwXgn8nWWlL64zKDkS0n8ZmQ3mlWOMuXOnR+7Nx/5tMO5AQ== + +domhandler@^2.3.0: + version "2.4.2" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.4.2.tgz#8805097e933d65e85546f726d60f5eb88b44f803" + integrity sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA== + dependencies: + domelementtype "1" + +domutils@1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.5.1.tgz#dcd8488a26f563d61079e48c9f7b7e32373682cf" + integrity sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8= + dependencies: + dom-serializer "0" + domelementtype "1" + +domutils@^1.5.1: + version "1.7.0" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.7.0.tgz#56ea341e834e06e6748af7a1cb25da67ea9f8c2a" + integrity sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg== + dependencies: + dom-serializer "0" + domelementtype "1" + +dot-prop@^4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-4.2.1.tgz#45884194a71fc2cda71cbb4bceb3a4dd2f433ba4" + integrity sha512-l0p4+mIuJIua0mhxGoh4a+iNL9bmeK5DvnSVQa6T0OhrVmaEa1XScX5Etc673FePCJOArq/4Pa2cLGODUWTPOQ== + dependencies: + is-obj "^1.0.0" + +driftless@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/driftless/-/driftless-2.0.3.tgz#4378cade7aa8e39dee33faa94413bdc67850d90b" + integrity sha512-hSDKsQphnL4O0XLAiyWQ8EiM9suXH0Qd4gMtwF86b5wygGV8r95w0JcA38FOmx9N3LjFCIHLG2winLPNken4Tg== + dependencies: + present "^0.0.3" + +duplexer3@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" + integrity sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI= + dynamic-dedupe@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/dynamic-dedupe/-/dynamic-dedupe-0.3.0.tgz#06e44c223f5e4e94d78ef9db23a6515ce2f962a1" dependencies: xtend "^4.0.0" +ecc-jsbn@~0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" + integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk= + dependencies: + jsbn "~0.1.0" + safer-buffer "^2.1.0" + ecdsa-sig-formatter@1.0.11: version "1.0.11" resolved "https://registry.yarnpkg.com/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz#ae0f0fa2d85045ef14a817daa3ce9acd0489e5bf" @@ -551,20 +954,68 @@ engine.io@~3.4.0: engine.io-parser "~2.2.0" ws "^7.1.2" +entities@^1.1.1, entities@~1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.2.tgz#bdfa735299664dfafd34529ed4f8522a275fea56" + integrity sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w== + +entities@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/entities/-/entities-2.0.3.tgz#5c487e5742ab93c15abb5da22759b8590ec03b7f" + integrity sha512-MyoZ0jgnLvB2X3Lg5HqpFmn1kybDiIfEQmKzTb5apr51Rb+T3KdmMiqa70T+bhGnyv7bQ6WMj2QMHpGMmlrUYQ== + error-ex@^1.2.0: version "1.3.2" resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" dependencies: is-arrayish "^0.2.1" +es-abstract@^1.17.0-next.1, es-abstract@^1.17.5: + version "1.17.6" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.17.6.tgz#9142071707857b2cacc7b89ecb670316c3e2d52a" + integrity sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw== + dependencies: + es-to-primitive "^1.2.1" + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.1" + is-callable "^1.2.0" + is-regex "^1.1.0" + object-inspect "^1.7.0" + object-keys "^1.1.1" + object.assign "^4.1.0" + string.prototype.trimend "^1.0.1" + string.prototype.trimstart "^1.0.1" + +es-to-primitive@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" + integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== + dependencies: + is-callable "^1.1.4" + is-date-object "^1.0.1" + is-symbol "^1.0.2" + escape-html@~1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" -escape-string-regexp@^1.0.5: +escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" +escodegen@^1.8.1: + version "1.14.3" + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.14.3.tgz#4e7b81fba61581dc97582ed78cab7f0e8d63f503" + integrity sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw== + dependencies: + esprima "^4.0.1" + estraverse "^4.2.0" + esutils "^2.0.2" + optionator "^0.8.1" + optionalDependencies: + source-map "~0.6.1" + eslint-scope@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.0.0.tgz#e87c8887c73e8d1ec84f1ca591645c358bfc8fb9" @@ -638,7 +1089,12 @@ espree@^6.1.2: acorn-jsx "^5.2.0" eslint-visitor-keys "^1.1.0" -esprima@^4.0.0: +esprima@1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-1.2.2.tgz#76a0fd66fcfe154fd292667dc264019750b1657b" + integrity sha1-dqD9Zvz+FU/SkmZ9wmQBl1CxZXs= + +esprima@^4.0.0, esprima@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" @@ -654,7 +1110,7 @@ esrecurse@^4.1.0: dependencies: estraverse "^4.1.0" -estraverse@^4.1.0, estraverse@^4.1.1: +estraverse@^4.1.0, estraverse@^4.1.1, estraverse@^4.2.0: version "4.3.0" resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" @@ -670,6 +1126,19 @@ etag@~1.8.1: version "1.8.1" resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" +execa@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777" + integrity sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c= + dependencies: + cross-spawn "^5.0.1" + get-stream "^3.0.0" + is-stream "^1.1.0" + npm-run-path "^2.0.0" + p-finally "^1.0.0" + signal-exit "^3.0.0" + strip-eof "^1.0.0" + express@^4.17.1: version "4.17.1" resolved "https://registry.yarnpkg.com/express/-/express-4.17.1.tgz#4491fc38605cf51f8629d39c2b5d026f98a4c134" @@ -705,6 +1174,11 @@ express@^4.17.1: utils-merge "1.0.1" vary "~1.1.2" +extend@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" + integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== + external-editor@^3.0.3: version "3.1.0" resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" @@ -713,6 +1187,16 @@ external-editor@^3.0.3: iconv-lite "^0.4.24" tmp "^0.0.33" +extsprintf@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" + integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU= + +extsprintf@^1.2.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" + integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8= + fast-deep-equal@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz#545145077c501491e33b15ec408c294376e94ae4" @@ -743,6 +1227,11 @@ filewatcher@~3.0.0: dependencies: debounce "^1.0.0" +filtrex@^0.5.4: + version "0.5.4" + resolved "https://registry.yarnpkg.com/filtrex/-/filtrex-0.5.4.tgz#98075d518f068c4f58b7b589a227d98bd9f6395d" + integrity sha1-mAddUY8GjE9Yt7WJoifZi9n2OV0= + finalhandler@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d" @@ -774,6 +1263,20 @@ flatted@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.2.tgz#4575b21e2bcee7434aa9be662f4b7b5f9c2b5138" +forever-agent@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" + integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= + +form-data@~2.3.2: + version "2.3.3" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" + integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.6" + mime-types "^2.1.12" + forwarded@~0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84" @@ -786,6 +1289,11 @@ fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" +function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== + functional-red-black-tree@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" @@ -799,6 +1307,18 @@ get-stdin@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe" +get-stream@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" + integrity sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ= + +getpass@^0.1.1: + version "0.1.7" + resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" + integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo= + dependencies: + assert-plus "^1.0.0" + glob-parent@^5.0.0: version "5.1.1" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.1.tgz#b6c1ef417c4e5663ea498f1c45afac6916bbc229" @@ -816,20 +1336,74 @@ glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: once "^1.3.0" path-is-absolute "^1.0.0" +global-dirs@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-0.1.1.tgz#b319c0dd4607f353f3be9cca4c72fc148c49f445" + integrity sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU= + dependencies: + ini "^1.3.4" + globals@^12.1.0: version "12.4.0" resolved "https://registry.yarnpkg.com/globals/-/globals-12.4.0.tgz#a18813576a41b00a24a97e7f815918c2e19925f8" dependencies: type-fest "^0.8.1" +got@^6.7.1: + version "6.7.1" + resolved "https://registry.yarnpkg.com/got/-/got-6.7.1.tgz#240cd05785a9a18e561dc1b44b41c763ef1e8db0" + integrity sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA= + dependencies: + create-error-class "^3.0.0" + duplexer3 "^0.1.4" + get-stream "^3.0.0" + is-redirect "^1.0.0" + is-retry-allowed "^1.0.0" + is-stream "^1.0.0" + lowercase-keys "^1.0.0" + safe-buffer "^5.0.1" + timed-out "^4.0.0" + unzip-response "^2.0.1" + url-parse-lax "^1.0.0" + +graceful-fs@^4.1.11: + version "4.2.4" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" + integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== + graceful-fs@^4.1.2: version "4.2.3" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.3.tgz#4a12ff1b60376ef09862c2093edd908328be8423" +"graceful-readlink@>= 1.0.0": + version "1.0.1" + resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725" + integrity sha1-TK+tdrxi8C+gObL5Tpo906ORpyU= + growly@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" +har-schema@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" + integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= + +har-validator@~5.1.3: + version "5.1.5" + resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.5.tgz#1f0803b9f8cb20c0fa13822df1ecddb36bde1efd" + integrity sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w== + dependencies: + ajv "^6.12.3" + har-schema "^2.0.0" + +has-ansi@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" + integrity sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE= + dependencies: + ansi-regex "^2.0.0" + has-binary2@~1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/has-binary2/-/has-binary2-1.0.3.tgz#7776ac627f3ea77250cfc332dab7ddf5e4f5d11d" @@ -848,10 +1422,34 @@ has-flag@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" +has-symbols@^1.0.0, has-symbols@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8" + integrity sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg== + +has@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== + dependencies: + function-bind "^1.1.1" + hosted-git-info@^2.1.4: version "2.8.8" resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.8.tgz#7539bd4bc1e0e0a895815a2e0262420b12858488" +htmlparser2@^3.9.1: + version "3.10.1" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.10.1.tgz#bd679dc3f59897b6a34bb10749c855bb53a9392f" + integrity sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ== + dependencies: + domelementtype "^1.3.1" + domhandler "^2.3.0" + domutils "^1.5.1" + entities "^1.1.1" + inherits "^2.0.1" + readable-stream "^3.1.1" + http-errors@1.7.2: version "1.7.2" resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.2.tgz#4f5029cf13239f31036e5b2e55292bcfbcc85c8f" @@ -872,6 +1470,15 @@ http-errors@~1.7.2: statuses ">= 1.5.0 < 2" toidentifier "1.0.0" +http-signature@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" + integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE= + dependencies: + assert-plus "^1.0.0" + jsprim "^1.2.2" + sshpk "^1.7.0" + http-status-codes@*, http-status-codes@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/http-status-codes/-/http-status-codes-1.4.0.tgz#6e4c15d16ff3a9e2df03b89f3a55e1aae05fb477" @@ -893,6 +1500,11 @@ import-fresh@^3.0.0: parent-module "^1.0.0" resolve-from "^4.0.0" +import-lazy@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43" + integrity sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM= + imurmurhash@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" @@ -914,7 +1526,7 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@2.0.4: +inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" @@ -922,6 +1534,11 @@ inherits@2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" +ini@^1.3.4, ini@~1.3.0: + version "1.3.5" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" + integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw== + inquirer@^7.0.0: version "7.1.0" resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-7.1.0.tgz#1298a01859883e17c7264b82870ae1034f92dd29" @@ -944,10 +1561,32 @@ ipaddr.js@1.9.1: version "1.9.1" resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" +is-arguments@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.0.4.tgz#3faf966c7cba0ff437fb31f6250082fcf0448cf3" + integrity sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA== + is-arrayish@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" +is-callable@^1.1.4, is-callable@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.0.tgz#83336560b54a38e35e3a2df7afd0454d691468bb" + integrity sha512-pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw== + +is-ci@^1.0.10: + version "1.2.1" + resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.2.1.tgz#e3779c8ee17fccf428488f6e281187f2e632841c" + integrity sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg== + dependencies: + ci-info "^1.5.0" + +is-date-object@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.2.tgz#bda736f2cd8fd06d32844e7743bfa7494c3bfd7e" + integrity sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g== + is-extglob@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" @@ -970,10 +1609,69 @@ is-glob@^4.0.0, is-glob@^4.0.1: dependencies: is-extglob "^2.1.1" +is-installed-globally@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.1.0.tgz#0dfd98f5a9111716dd535dda6492f67bf3d25a80" + integrity sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA= + dependencies: + global-dirs "^0.1.0" + is-path-inside "^1.0.0" + +is-npm@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-1.0.0.tgz#f2fb63a65e4905b406c86072765a1a4dc793b9f4" + integrity sha1-8vtjpl5JBbQGyGBydloaTceTufQ= + +is-obj@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" + integrity sha1-PkcprB9f3gJc19g6iW2rn09n2w8= + +is-path-inside@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.1.tgz#8ef5b7de50437a3fdca6b4e865ef7aa55cb48036" + integrity sha1-jvW33lBDej/cprToZe96pVy0gDY= + dependencies: + path-is-inside "^1.0.1" + is-promise@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa" +is-redirect@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-redirect/-/is-redirect-1.0.0.tgz#1d03dded53bd8db0f30c26e4f95d36fc7c87dc24" + integrity sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ= + +is-regex@^1.0.4, is-regex@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.1.tgz#c6f98aacc546f6cec5468a07b7b153ab564a57b9" + integrity sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg== + dependencies: + has-symbols "^1.0.1" + +is-retry-allowed@^1.0.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz#d778488bd0a4666a3be8a1482b9f2baafedea8b4" + integrity sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg== + +is-stream@^1.0.0, is-stream@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" + integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= + +is-symbol@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.3.tgz#38e1014b9e6329be0de9d24a414fd7441ec61937" + integrity sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ== + dependencies: + has-symbols "^1.0.1" + +is-typedarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" + integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= + is-utf8@^0.2.0: version "0.2.1" resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" @@ -990,6 +1688,16 @@ isexe@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" +isnumber@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isnumber/-/isnumber-1.0.0.tgz#0e3f9759b581d99dd85086f0ec2a74909cfadd01" + integrity sha1-Dj+XWbWB2Z3YUIbw7Cp0kJz63QE= + +isstream@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" + integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= + jasmine-core@~3.5.0: version "3.5.0" resolved "https://registry.yarnpkg.com/jasmine-core/-/jasmine-core-3.5.0.tgz#132c23e645af96d85c8bca13c8758b18429fc1e4" @@ -1012,14 +1720,43 @@ js-yaml@^3.13.1: argparse "^1.0.7" esprima "^4.0.0" +jsbn@~0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" + integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= + +jsck@^0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/jsck/-/jsck-0.3.2.tgz#8e06b31bb57b0090e503dd4ee6ad0f269dff1a55" + integrity sha1-jgazG7V7AJDlA91O5q0PJp3/GlU= + json-schema-traverse@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" +json-schema@0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" + integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM= + json-stable-stringify-without-jsonify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" +json-stringify-safe@~5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" + integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= + +jsonpath@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/jsonpath/-/jsonpath-1.0.2.tgz#e6aae681d03e9a77b4651d5d96eac5fc63b1fd13" + integrity sha512-rmzlgFZiQPc6q4HDyK8s9Qb4oxBnI5sF61y/Co5PV0lc3q2bIuRsNdueVbhoSHdKM4fxeimphOAtfz47yjCfeA== + dependencies: + esprima "1.2.2" + static-eval "2.0.2" + underscore "1.7.0" + jsonwebtoken@^8.5.1: version "8.5.1" resolved "https://registry.yarnpkg.com/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz#00e71e0b8df54c2121a1f26137df2280673bcc0d" @@ -1035,6 +1772,16 @@ jsonwebtoken@^8.5.1: ms "^2.1.1" semver "^5.6.0" +jsprim@^1.2.2: + version "1.4.1" + resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" + integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI= + dependencies: + assert-plus "1.0.0" + extsprintf "1.3.0" + json-schema "0.2.3" + verror "1.10.0" + jwa@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/jwa/-/jwa-1.4.1.tgz#743c32985cb9e98655530d53641b66c8645b039a" @@ -1050,6 +1797,13 @@ jws@^3.2.2: jwa "^1.4.1" safe-buffer "^5.0.1" +latest-version@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-3.1.0.tgz#a205383fea322b33b5ae3b18abee0dc2f356ee15" + integrity sha1-ogU4P+oyKzO1rjsYq+4NwvNW7hU= + dependencies: + package-json "^4.0.0" + levn@^0.3.0, levn@~0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" @@ -1095,10 +1849,22 @@ lodash.once@^4.0.0: version "4.1.1" resolved "https://registry.yarnpkg.com/lodash.once/-/lodash.once-4.1.1.tgz#0dd3971213c7c56df880977d504c88fb471a97ac" +lodash@^4.15.0, lodash@^4.17.11, lodash@^4.17.13: + version "4.17.20" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52" + integrity sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA== + lodash@^4.17.14, lodash@^4.17.15: version "4.17.15" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" +log-symbols@^2.1.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a" + integrity sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg== + dependencies: + chalk "^2.0.1" + loud-rejection@^1.0.0: version "1.6.0" resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f" @@ -1106,6 +1872,34 @@ loud-rejection@^1.0.0: currently-unhandled "^0.4.1" signal-exit "^3.0.0" +lowercase-keys@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" + integrity sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA== + +lru-cache@^4.0.1: + version "4.1.5" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" + integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g== + dependencies: + pseudomap "^1.0.2" + yallist "^2.1.2" + +lynx@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/lynx/-/lynx-0.2.0.tgz#79e6674530da4183e87953bd686171e070da50b9" + integrity sha1-eeZnRTDaQYPoeVO9aGFx4HDaULk= + dependencies: + mersenne "~0.0.3" + statsd-parser "~0.0.4" + +make-dir@^1.0.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.3.0.tgz#79c1033b80515bd6d24ec9933e860ca75ee27f0c" + integrity sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ== + dependencies: + pify "^3.0.0" + make-error@^1.1.1: version "1.3.6" resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" @@ -1137,6 +1931,11 @@ merge-descriptors@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" +mersenne@~0.0.3: + version "0.0.4" + resolved "https://registry.yarnpkg.com/mersenne/-/mersenne-0.0.4.tgz#401fdec7ec21cdb9e03cd3d3021398da21b27085" + integrity sha1-QB/ex+whzbngPNPTAhOY2iGycIU= + methods@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" @@ -1145,6 +1944,18 @@ mime-db@1.43.0: version "1.43.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.43.0.tgz#0a12e0502650e473d735535050e7c8f4eb4fae58" +mime-db@1.44.0: + version "1.44.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.44.0.tgz#fa11c5eb0aca1334b4233cb4d52f10c5a6272f92" + integrity sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg== + +mime-types@^2.1.12, mime-types@~2.1.19: + version "2.1.27" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.27.tgz#47949f98e279ea53119f5722e0f34e529bec009f" + integrity sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w== + dependencies: + mime-db "1.44.0" + mime-types@~2.1.24: version "2.1.26" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.26.tgz#9c921fc09b7e149a65dfdc0da4d20997200b0a06" @@ -1155,6 +1966,11 @@ mime@1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" +mimic-fn@^1.0.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" + integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== + mimic-fn@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" @@ -1165,7 +1981,7 @@ minimatch@^3.0.4: dependencies: brace-expansion "^1.1.7" -minimist@^1.1.3, minimist@^1.2.5: +minimist@^1.1.3, minimist@^1.2.0, minimist@^1.2.5: version "1.2.5" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" @@ -1175,6 +1991,11 @@ mkdirp@^0.5.1: dependencies: minimist "^1.2.5" +moment@^2.22.1: + version "2.27.0" + resolved "https://registry.yarnpkg.com/moment/-/moment-2.27.0.tgz#8bff4e3e26a236220dfe3e36de756b6ebaa0105d" + integrity sha512-al0MUK7cpIcglMv3YF13qSgdAIqxHTO7brRtaz3DlSULbqfazqkc5kEjNrLDOM7fsjshoFIihnU8snrP7zUvhQ== + ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" @@ -1191,6 +2012,16 @@ mute-stream@0.0.8: version "0.0.8" resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" +nanotimer@0.3.14: + version "0.3.14" + resolved "https://registry.yarnpkg.com/nanotimer/-/nanotimer-0.3.14.tgz#10d811f8d064788180096ce1f96c70846fd5a2ba" + integrity sha1-ENgR+NBkeIGACWzh+WxwhG/Voro= + +nanotimer@^0.3.15: + version "0.3.15" + resolved "https://registry.yarnpkg.com/nanotimer/-/nanotimer-0.3.15.tgz#280d277db9146eca6f8a570b572abaf2a9acc754" + integrity sha1-KA0nfbkUbspvilcLVyq68qmsx1Q= + natural-compare@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" @@ -1222,6 +2053,25 @@ normalize-package-data@^2.3.2, normalize-package-data@^2.3.4: semver "2 || 3 || 4 || 5" validate-npm-package-license "^3.0.1" +npm-run-path@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" + integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8= + dependencies: + path-key "^2.0.0" + +nth-check@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.2.tgz#b2bd295c37e3dd58a3bf0700376663ba4d9cf05c" + integrity sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg== + dependencies: + boolbase "~1.0.0" + +oauth-sign@~0.9.0: + version "0.9.0" + resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" + integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== + object-assign@^4.0.1: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" @@ -1230,6 +2080,34 @@ object-component@0.0.3: version "0.0.3" resolved "https://registry.yarnpkg.com/object-component/-/object-component-0.0.3.tgz#f0c69aa50efc95b866c186f400a33769cb2f1291" +object-inspect@^1.7.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.8.0.tgz#df807e5ecf53a609cc6bfe93eac3cc7be5b3a9d0" + integrity sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA== + +object-is@^1.0.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.2.tgz#c5d2e87ff9e119f78b7a088441519e2eec1573b6" + integrity sha512-5lHCz+0uufF6wZ7CRFWJN3hp8Jqblpgve06U5CMQ3f//6iDjPr2PEo9MWCjEssDsa+UZEL4PkFpr+BMop6aKzQ== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.5" + +object-keys@^1.0.11, object-keys@^1.0.12, object-keys@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== + +object.assign@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da" + integrity sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w== + dependencies: + define-properties "^1.1.2" + function-bind "^1.1.1" + has-symbols "^1.0.0" + object-keys "^1.0.11" + on-finished@~2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" @@ -1242,13 +2120,27 @@ once@^1.3.0: dependencies: wrappy "1" +onetime@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" + integrity sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ= + dependencies: + mimic-fn "^1.0.0" + onetime@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.0.tgz#fff0f3c91617fe62bb50189636e99ac8a6df7be5" dependencies: mimic-fn "^2.1.0" -optionator@^0.8.3: +opn@^5.3.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/opn/-/opn-5.5.0.tgz#fc7164fab56d235904c51c3b27da6758ca3b9bfc" + integrity sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA== + dependencies: + is-wsl "^1.1.0" + +optionator@^0.8.1, optionator@^0.8.3: version "0.8.3" resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" dependencies: @@ -1259,10 +2151,35 @@ optionator@^0.8.3: type-check "~0.3.2" word-wrap "~1.2.3" -os-tmpdir@~1.0.2: +ora@^1.3.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/ora/-/ora-1.4.0.tgz#884458215b3a5d4097592285f93321bb7a79e2e5" + integrity sha512-iMK1DOQxzzh2MBlVsU42G80mnrvUhqsMh74phHtDlrcTZPK0pH6o7l7DRshK+0YsxDyEuaOkziVdvM3T0QTzpw== + dependencies: + chalk "^2.1.0" + cli-cursor "^2.1.0" + cli-spinners "^1.0.1" + log-symbols "^2.1.0" + +os-tmpdir@~1.0.1, os-tmpdir@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" +p-finally@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" + integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= + +package-json@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/package-json/-/package-json-4.0.1.tgz#8869a0401253661c4c4ca3da6c2121ed555f5eed" + integrity sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0= + dependencies: + got "^6.7.1" + registry-auth-token "^3.0.1" + registry-url "^3.0.3" + semver "^5.1.0" + parent-module@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" @@ -1275,6 +2192,13 @@ parse-json@^2.2.0: dependencies: error-ex "^1.2.0" +parse5@^3.0.1: + version "3.0.3" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-3.0.3.tgz#042f792ffdd36851551cf4e9e066b3874ab45b5c" + integrity sha512-rgO9Zg5LLLkfJF9E6CCmXlSE4UVceloys8JrFqCcHloC3usd/kJCyPDwH2SOlzix2j3xaP9sUX3e8+kvkuleAA== + dependencies: + "@types/node" "*" + parseqs@0.0.5: version "0.0.5" resolved "https://registry.yarnpkg.com/parseqs/-/parseqs-0.0.5.tgz#d5208a3738e46766e291ba2ea173684921a8b89d" @@ -1301,7 +2225,12 @@ path-is-absolute@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" -path-key@^2.0.1: +path-is-inside@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" + integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= + +path-key@^2.0.0, path-key@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" @@ -1321,10 +2250,25 @@ path-type@^1.0.0: pify "^2.0.0" pinkie-promise "^2.0.0" +performance-now@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" + integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= + +pidusage@^1.1.6: + version "1.2.0" + resolved "https://registry.yarnpkg.com/pidusage/-/pidusage-1.2.0.tgz#65ee96ace4e08a4cd3f9240996c85b367171ee92" + integrity sha512-OGo+iSOk44HRJ8q15AyG570UYxcm5u+R99DI8Khu8P3tKGkVu5EZX4ywHglWSTMNNXQ274oeGpYrvFEhDIFGPg== + pify@^2.0.0: version "2.3.0" resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" +pify@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" + integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= + pinkie-promise@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" @@ -1339,6 +2283,16 @@ prelude-ls@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" +prepend-http@^1.0.1: + version "1.0.4" + resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" + integrity sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw= + +present@^0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/present/-/present-0.0.3.tgz#5aefb8a5ddf6b34c65743bf1cde53523aac1c05a" + integrity sha1-Wu+4pd32s0xldDvxzeU1I6rBwFo= + progress@^2.0.0: version "2.0.3" resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" @@ -1357,7 +2311,17 @@ proxy-addr@~2.0.5: forwarded "~0.1.2" ipaddr.js "1.9.1" -punycode@^2.1.0: +pseudomap@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" + integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= + +psl@^1.1.28: + version "1.8.0" + resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24" + integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ== + +punycode@^2.1.0, punycode@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" @@ -1365,6 +2329,11 @@ qs@6.7.0: version "6.7.0" resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc" +qs@~6.5.2: + version "6.5.2" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" + integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== + range-parser@~1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" @@ -1378,6 +2347,16 @@ raw-body@2.4.0: iconv-lite "0.4.24" unpipe "1.0.0" +rc@^1.0.1, rc@^1.1.6: + version "1.2.8" + resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" + integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== + dependencies: + deep-extend "^0.6.0" + ini "~1.3.0" + minimist "^1.2.0" + strip-json-comments "~2.0.1" + read-pkg-up@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" @@ -1393,6 +2372,15 @@ read-pkg@^1.0.0: normalize-package-data "^2.3.2" path-type "^1.0.0" +readable-stream@^3.1.1: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" + integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + redent@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde" @@ -1400,6 +2388,14 @@ redent@^1.0.0: indent-string "^2.1.0" strip-indent "^1.0.1" +regexp.prototype.flags@^1.2.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz#7aba89b3c13a64509dabcf3ca8d9fbb9bdf5cb75" + integrity sha512-2+Q0C5g951OlYlJz6yu5/M33IcsESLlLfsyIaLJaG4FA2r4yP8MvVMJUUP/fVBkSpbbbZlS5gynbEWLipiiXiQ== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.0-next.1" + regexpp@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-2.0.1.tgz#8d19d31cf632482b589049f8281f93dbcba4d07f" @@ -1408,12 +2404,53 @@ regexpp@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.0.0.tgz#dd63982ee3300e67b41c1956f850aa680d9d330e" +registry-auth-token@^3.0.1: + version "3.4.0" + resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-3.4.0.tgz#d7446815433f5d5ed6431cd5dca21048f66b397e" + integrity sha512-4LM6Fw8eBQdwMYcES4yTnn2TqIasbXuwDx3um+QRs7S55aMKCBKBxvPXl2RiUjHwuJLTyYfxSpmfSAjQpcuP+A== + dependencies: + rc "^1.1.6" + safe-buffer "^5.0.1" + +registry-url@^3.0.3: + version "3.1.0" + resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-3.1.0.tgz#3d4ef870f73dde1d77f0cf9a381432444e174942" + integrity sha1-PU74cPc93h138M+aOBQyRE4XSUI= + dependencies: + rc "^1.0.1" + repeating@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" dependencies: is-finite "^1.0.0" +request@^2.88.0: + version "2.88.2" + resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" + integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== + dependencies: + aws-sign2 "~0.7.0" + aws4 "^1.8.0" + caseless "~0.12.0" + combined-stream "~1.0.6" + extend "~3.0.2" + forever-agent "~0.6.1" + form-data "~2.3.2" + har-validator "~5.1.3" + http-signature "~1.2.0" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.19" + oauth-sign "~0.9.0" + performance-now "^2.1.0" + qs "~6.5.2" + safe-buffer "^5.1.2" + tough-cookie "~2.5.0" + tunnel-agent "^0.6.0" + uuid "^3.3.2" + resolve-from@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" @@ -1424,6 +2461,14 @@ resolve@^1.0.0, resolve@^1.10.0: dependencies: path-parse "^1.0.6" +restore-cursor@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" + integrity sha1-n37ih/gv0ybU/RYpI9YhKe7g368= + dependencies: + onetime "^2.0.0" + signal-exit "^3.0.2" + restore-cursor@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" @@ -1463,11 +2508,23 @@ safe-buffer@^5.0.1: version "5.2.0" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.0.tgz#b74daec49b1148f88c64b68d49b1e815c1f2f519" -"safer-buffer@>= 2.1.2 < 3": +safe-buffer@^5.1.2, safe-buffer@~5.2.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: version "2.1.2" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" -"semver@2 || 3 || 4 || 5", semver@^5.5.0, semver@^5.6.0: +semver-diff@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-2.1.0.tgz#4bbb8437c8d37e4b0cf1a68fd726ec6d645d6d36" + integrity sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY= + dependencies: + semver "^5.0.3" + +"semver@2 || 3 || 4 || 5", semver@^5.0.3, semver@^5.1.0, semver@^5.5.0, semver@^5.6.0: version "5.7.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" @@ -1536,7 +2593,7 @@ socket.io-adapter@~1.1.0: version "1.1.2" resolved "https://registry.yarnpkg.com/socket.io-adapter/-/socket.io-adapter-1.1.2.tgz#ab3f0d6f66b8fc7fca3959ab5991f82221789be9" -socket.io-client@2.3.0: +socket.io-client@2.3.0, socket.io-client@^2.1.0: version "2.3.0" resolved "https://registry.yarnpkg.com/socket.io-client/-/socket.io-client-2.3.0.tgz#14d5ba2e00b9bcd145ae443ab96b3f86cbcc1bb4" dependencies: @@ -1582,6 +2639,11 @@ socket.io@^2.3.0: socket.io-client "2.3.0" socket.io-parser "~3.4.0" +socketio-wildcard@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/socketio-wildcard/-/socketio-wildcard-2.0.0.tgz#2466e832276b19163563bee772388747f912475b" + integrity sha1-JGboMidrGRY1Y77ncjiHR/kSR1s= + source-map-support@^0.5.12, source-map-support@^0.5.6: version "0.5.16" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.16.tgz#0ae069e7fe3ba7538c64c98515e35339eac5a042" @@ -1589,7 +2651,7 @@ source-map-support@^0.5.12, source-map-support@^0.5.6: buffer-from "^1.0.0" source-map "^0.6.0" -source-map@^0.6.0: +source-map@^0.6.0, source-map@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" @@ -1619,10 +2681,52 @@ sprintf-js@~1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" +sshpk@^1.7.0: + version "1.16.1" + resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877" + integrity sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg== + dependencies: + asn1 "~0.2.3" + assert-plus "^1.0.0" + bcrypt-pbkdf "^1.0.0" + dashdash "^1.12.0" + ecc-jsbn "~0.1.1" + getpass "^0.1.1" + jsbn "~0.1.0" + safer-buffer "^2.0.2" + tweetnacl "~0.14.0" + +static-eval@2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/static-eval/-/static-eval-2.0.2.tgz#2d1759306b1befa688938454c546b7871f806a42" + integrity sha512-N/D219Hcr2bPjLxPiV+TQE++Tsmrady7TqAJugLy7Xk1EumfDWS/f5dtBbkRCGE7wKKXuYockQoj8Rm2/pVKyg== + dependencies: + escodegen "^1.8.1" + +stats-lite@^2.1.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/stats-lite/-/stats-lite-2.2.0.tgz#278a5571fa1d2e8b1691295dccc0235282393bbf" + integrity sha512-/Kz55rgUIv2KP2MKphwYT/NCuSfAlbbMRv2ZWw7wyXayu230zdtzhxxuXXcvsc6EmmhS8bSJl3uS1wmMHFumbA== + dependencies: + isnumber "~1.0.0" + +statsd-parser@~0.0.4: + version "0.0.4" + resolved "https://registry.yarnpkg.com/statsd-parser/-/statsd-parser-0.0.4.tgz#cbd243953cc42effd548b5d22388ed689ec639bd" + integrity sha1-y9JDlTzELv/VSLXSI4jtaJ7GOb0= + "statuses@>= 1.5.0 < 2", statuses@~1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" +string-width@^2.0.0, string-width@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" + integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== + dependencies: + is-fullwidth-code-point "^2.0.0" + strip-ansi "^4.0.0" + string-width@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" @@ -1639,6 +2743,43 @@ string-width@^4.1.0: is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.0" +string.prototype.trimend@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz#85812a6b847ac002270f5808146064c995fb6913" + integrity sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.5" + +string.prototype.trimstart@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz#14af6d9f34b053f7cfc89b72f8f2ee14b9039a54" + integrity sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.5" + +string_decoder@^1.1.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + +strip-ansi@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" + integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= + dependencies: + ansi-regex "^2.0.0" + +strip-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" + integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= + dependencies: + ansi-regex "^3.0.0" + strip-ansi@^5.1.0, strip-ansi@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" @@ -1661,13 +2802,18 @@ strip-bom@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" +strip-eof@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" + integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= + strip-indent@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2" dependencies: get-stdin "^4.0.1" -strip-json-comments@^2.0.0: +strip-json-comments@^2.0.0, strip-json-comments@~2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" @@ -1675,6 +2821,11 @@ strip-json-comments@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.0.1.tgz#85713975a91fb87bf1b305cca77395e40d2a64a7" +supports-color@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" + integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= + supports-color@^5.3.0: version "5.5.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" @@ -1707,6 +2858,13 @@ tdigest@^0.1.1: dependencies: bintrees "1.0.1" +term-size@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/term-size/-/term-size-1.2.0.tgz#458b83887f288fc56d6fffbfad262e26638efa69" + integrity sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk= + dependencies: + execa "^0.7.0" + text-table@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" @@ -1715,6 +2873,18 @@ through@^2.3.6: version "2.3.8" resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" +timed-out@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f" + integrity sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8= + +tmp@0.0.28: + version "0.0.28" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.28.tgz#172735b7f614ea7af39664fa84cf0de4e515d120" + integrity sha1-Fyc1t/YU6nrzlmT6hM8N5OUV0SA= + dependencies: + os-tmpdir "~1.0.1" + tmp@^0.0.33: version "0.0.33" resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" @@ -1729,6 +2899,14 @@ toidentifier@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" +tough-cookie@^2.3.4, tough-cookie@~2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" + integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== + dependencies: + psl "^1.1.28" + punycode "^2.1.1" + tree-kill@^1.2.1: version "1.2.2" resolved "https://registry.yarnpkg.com/tree-kill/-/tree-kill-1.2.2.tgz#4ca09a9092c88b73a7cdc5e8a01b507b0790a0cc" @@ -1737,6 +2915,11 @@ trim-newlines@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613" +try-require@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/try-require/-/try-require-1.2.1.tgz#34489a2cac0c09c1cc10ed91ba011594d4333be2" + integrity sha1-NEiaLKwMCcHMEO2RugEVlNQzO+I= + ts-node-dev@^1.0.0-pre.44: version "1.0.0-pre.44" resolved "https://registry.yarnpkg.com/ts-node-dev/-/ts-node-dev-1.0.0-pre.44.tgz#2f4d666088481fb9c4e4f5bc8f15995bd8b06ecb" @@ -1783,6 +2966,18 @@ tsutils@^3.17.1: dependencies: tslib "^1.8.1" +tunnel-agent@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" + integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0= + dependencies: + safe-buffer "^5.0.1" + +tweetnacl@^0.14.3, tweetnacl@~0.14.0: + version "0.14.5" + resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" + integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= + type-check@~0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" @@ -1808,16 +3003,61 @@ typescript@^3.8.3: version "3.8.3" resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.8.3.tgz#409eb8544ea0335711205869ec458ab109ee1061" +underscore@1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.7.0.tgz#6bbaf0877500d36be34ecaa584e0db9fef035209" + integrity sha1-a7rwh3UA02vjTsqlhODbn+8DUgk= + +unique-string@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-1.0.0.tgz#9e1057cca851abb93398f8b33ae187b99caec11a" + integrity sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo= + dependencies: + crypto-random-string "^1.0.0" + unpipe@1.0.0, unpipe@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" +unzip-response@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/unzip-response/-/unzip-response-2.0.1.tgz#d2f0f737d16b0615e72a6935ed04214572d56f97" + integrity sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c= + +update-notifier@^2.1.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-2.5.0.tgz#d0744593e13f161e406acb1d9408b72cad08aff6" + integrity sha512-gwMdhgJHGuj/+wHJJs9e6PcCszpxR1b236igrOkUofGhqJuG+amlIKwApH1IW1WWl7ovZxsX49lMBWLxSdm5Dw== + dependencies: + boxen "^1.2.1" + chalk "^2.0.1" + configstore "^3.0.0" + import-lazy "^2.1.0" + is-ci "^1.0.10" + is-installed-globally "^0.1.0" + is-npm "^1.0.0" + latest-version "^3.0.0" + semver-diff "^2.0.0" + xdg-basedir "^3.0.0" + uri-js@^4.2.2: version "4.2.2" resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" dependencies: punycode "^2.1.0" +url-parse-lax@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-1.0.0.tgz#7af8f303645e9bd79a272e7a14ac68bc0609da73" + integrity sha1-evjzA2Rem9eaJy56FKxovAYJ2nM= + dependencies: + prepend-http "^1.0.1" + +util-deprecate@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= + utils-merge@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" @@ -1826,6 +3066,16 @@ uuid@7.0.3: version "7.0.3" resolved "https://registry.yarnpkg.com/uuid/-/uuid-7.0.3.tgz#c5c9f2c8cf25dc0a372c4df1441c41f5bd0c680b" +uuid@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-2.0.3.tgz#67e2e863797215530dff318e5bf9dcebfd47b21a" + integrity sha1-Z+LoY3lyFVMN/zGOW/nc6/1Hsho= + +uuid@^3.3.2: + version "3.4.0" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" + integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== + uuidv4@*, uuidv4@^6.0.7: version "6.0.7" resolved "https://registry.yarnpkg.com/uuidv4/-/uuidv4-6.0.7.tgz#15e920848e1afbbd97b4919bc50f4f2f2278f880" @@ -1847,12 +3097,28 @@ vary@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" +verror@1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" + integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA= + dependencies: + assert-plus "^1.0.0" + core-util-is "1.0.2" + extsprintf "^1.2.0" + which@^1.2.9, which@^1.3.0: version "1.3.1" resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" dependencies: isexe "^2.0.0" +widest-line@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-2.0.1.tgz#7438764730ec7ef4381ce4df82fb98a53142a3fc" + integrity sha512-Ba5m9/Fa4Xt9eb2ELXt77JxVDV8w7qQrH0zS/TWSJdLyAwQjWoOzpzj5lwVftDz6n/EOu3tNACS84v509qwnJA== + dependencies: + string-width "^2.1.1" + word-wrap@~1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" @@ -1861,12 +3127,28 @@ wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" +write-file-atomic@^2.0.0: + version "2.4.3" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.4.3.tgz#1fd2e9ae1df3e75b8d8c367443c692d4ca81f481" + integrity sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ== + dependencies: + graceful-fs "^4.1.11" + imurmurhash "^0.1.4" + signal-exit "^3.0.2" + write@1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/write/-/write-1.0.3.tgz#0800e14523b923a387e415123c865616aae0f5c3" dependencies: mkdirp "^0.5.1" +ws@^5.1.1: + version "5.2.2" + resolved "https://registry.yarnpkg.com/ws/-/ws-5.2.2.tgz#dffef14866b8e8dc9133582514d1befaf96e980f" + integrity sha512-jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA== + dependencies: + async-limiter "~1.0.0" + ws@^7.1.2: version "7.2.3" resolved "https://registry.yarnpkg.com/ws/-/ws-7.2.3.tgz#a5411e1fb04d5ed0efee76d26d5c46d830c39b46" @@ -1877,6 +3159,11 @@ ws@~6.1.0: dependencies: async-limiter "~1.0.0" +xdg-basedir@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-3.0.0.tgz#496b2cc109eca8dbacfe2dc72b603c17c5870ad4" + integrity sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ= + xmlhttprequest-ssl@~1.5.4: version "1.5.5" resolved "https://registry.yarnpkg.com/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz#c2876b06168aadc40e57d97e81191ac8f4398b3e" @@ -1885,6 +3172,11 @@ xtend@^4.0.0: version "4.0.2" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" +yallist@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" + integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= + yeast@0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/yeast/-/yeast-0.1.2.tgz#008e06d8094320c372dbc2f8ed76a0ca6c8ac419" From e418e8fd091d6701e234873f70e2cbcbcf1ab0db Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20N=C3=A9grier?= Date: Thu, 10 Sep 2020 09:31:53 +0200 Subject: [PATCH 129/313] Setting the depth of the chat mode / presentation mode to 99999 to avoid melting buttons with map. --- front/src/Phaser/Game/GameScene.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/front/src/Phaser/Game/GameScene.ts b/front/src/Phaser/Game/GameScene.ts index 5ea28b99..8a5630dc 100644 --- a/front/src/Phaser/Game/GameScene.ts +++ b/front/src/Phaser/Game/GameScene.ts @@ -397,12 +397,14 @@ export class GameScene extends Phaser.Scene implements CenterListener { this.presentationModeSprite.setOrigin(0, 1); this.presentationModeSprite.setInteractive(); this.presentationModeSprite.setVisible(false); + this.presentationModeSprite.setDepth(99999); this.presentationModeSprite.on('pointerup', this.switchLayoutMode.bind(this)); this.chatModeSprite = this.add.sprite(36, this.game.renderer.height - 2, 'layout_modes', 3); this.chatModeSprite.setScrollFactor(0, 0); this.chatModeSprite.setOrigin(0, 1); this.chatModeSprite.setInteractive(); this.chatModeSprite.setVisible(false); + this.chatModeSprite.setDepth(99999); this.chatModeSprite.on('pointerup', this.switchLayoutMode.bind(this)); // FIXME: change this to use the UserInputManager class for input From b37a8f63be79fe55c26d4167a30ef14e95676f00 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20N=C3=A9grier?= Date: Fri, 11 Sep 2020 09:56:05 +0200 Subject: [PATCH 130/313] Moved benchmark to its own directory and added multicore testing + a README --- back/package.json | 1 - back/src/Controller/IoSocketController.ts | 26 +- back/src/Enum/EnvironmentVariable.ts | 4 +- back/src/Model/Websocket/ExSocketInterface.ts | 1 + back/yarn.lock | 1324 +---------------- benchmark/README.md | 69 + benchmark/artillery_multi_core.sh | 17 + benchmark/package.json | 27 + {back => benchmark}/socketio-load-test.yaml | 17 +- {back => benchmark}/socketioLoadTest.js | 6 +- docker-compose.yaml | 5 +- 11 files changed, 160 insertions(+), 1337 deletions(-) create mode 100644 benchmark/README.md create mode 100755 benchmark/artillery_multi_core.sh create mode 100644 benchmark/package.json rename {back => benchmark}/socketio-load-test.yaml (76%) rename {back => benchmark}/socketioLoadTest.js (54%) diff --git a/back/package.json b/back/package.json index 9488419a..a20c876f 100644 --- a/back/package.json +++ b/back/package.json @@ -41,7 +41,6 @@ "@types/jsonwebtoken": "^8.3.8", "@types/socket.io": "^2.1.4", "@types/uuidv4": "^5.0.0", - "artillery": "^1.6.1", "body-parser": "^1.19.0", "express": "^4.17.1", "generic-type-guard": "^3.2.0", diff --git a/back/src/Controller/IoSocketController.ts b/back/src/Controller/IoSocketController.ts index 34756ffe..34e0dbc8 100644 --- a/back/src/Controller/IoSocketController.ts +++ b/back/src/Controller/IoSocketController.ts @@ -4,7 +4,7 @@ import * as http from "http"; import {MessageUserPosition, Point} from "../Model/Websocket/MessageUserPosition"; //TODO fix import by "_Model/.." import {ExSocketInterface} from "../Model/Websocket/ExSocketInterface"; //TODO fix import by "_Model/.." import Jwt, {JsonWebTokenError} from "jsonwebtoken"; -import {SECRET_KEY, MINIMUM_DISTANCE, GROUP_RADIUS} from "../Enum/EnvironmentVariable"; //TODO fix import by "_Enum/..." +import {SECRET_KEY, MINIMUM_DISTANCE, GROUP_RADIUS, ALLOW_ARTILLERY} from "../Enum/EnvironmentVariable"; //TODO fix import by "_Enum/..." import {World} from "../Model/World"; import {Group} from "_Model/Group"; import {UserInterface} from "_Model/UserInterface"; @@ -67,12 +67,19 @@ export class IoSocketController { return next(new Error('Authentication error')); } if(socket.handshake.query.token === 'test'){ - (socket as ExSocketInterface).token = socket.handshake.query.token; - (socket as ExSocketInterface).userId = uuid(); - console.log((socket as ExSocketInterface).userId); - next(); - return; + if (ALLOW_ARTILLERY) { + (socket as ExSocketInterface).token = socket.handshake.query.token; + (socket as ExSocketInterface).userId = uuid(); + (socket as ExSocketInterface).isArtillery = true; + console.log((socket as ExSocketInterface).userId); + next(); + return; + } else { + console.warn("In order to perform a load-testing test on this environment, you must set the ALLOW_ARTILLERY environment variable to 'true'"); + next(); + } } + (socket as ExSocketInterface).isArtillery = false; if(this.searchClientByToken(socket.handshake.query.token)){ console.error('An authentication error happened, a user tried to connect while its token is already connected.'); return next(new Error('Authentication error')); @@ -201,7 +208,7 @@ export class IoSocketController { } return new MessageUserPosition(user.id, player.name, player.characterLayers, player.position); }).filter((item: MessageUserPosition|null) => item !== null); - //answerFn(listOfUsers); + answerFn(listOfUsers); } catch (e) { console.error('An error occurred on "join_room" event'); console.error(e); @@ -285,7 +292,10 @@ export class IoSocketController { const Client = (socket as ExSocketInterface); Client.name = playerDetails.name; Client.characterLayers = playerDetails.characterLayers; - //answerFn(Client.userId); + // Artillery fails when receiving an acknowledgement that is not a JSON object + if (!Client.isArtillery) { + answerFn(Client.userId); + } }); socket.on(SockerIoEvent.SET_SILENT, (silent: unknown) => { diff --git a/back/src/Enum/EnvironmentVariable.ts b/back/src/Enum/EnvironmentVariable.ts index 6bb507cd..d8baaf89 100644 --- a/back/src/Enum/EnvironmentVariable.ts +++ b/back/src/Enum/EnvironmentVariable.ts @@ -2,10 +2,12 @@ const SECRET_KEY = process.env.SECRET_KEY || "THECODINGMACHINE_SECRET_KEY"; const URL_ROOM_STARTED = "/Floor0/floor0.json"; const MINIMUM_DISTANCE = process.env.MINIMUM_DISTANCE ? Number(process.env.MINIMUM_DISTANCE) : 64; const GROUP_RADIUS = process.env.GROUP_RADIUS ? Number(process.env.GROUP_RADIUS) : 48; +const ALLOW_ARTILLERY = process.env.ALLOW_ARTILLERY ? process.env.ALLOW_ARTILLERY == 'true' : false; export { SECRET_KEY, URL_ROOM_STARTED, MINIMUM_DISTANCE, - GROUP_RADIUS + GROUP_RADIUS, + ALLOW_ARTILLERY } diff --git a/back/src/Model/Websocket/ExSocketInterface.ts b/back/src/Model/Websocket/ExSocketInterface.ts index 108c61cb..974fe63d 100644 --- a/back/src/Model/Websocket/ExSocketInterface.ts +++ b/back/src/Model/Websocket/ExSocketInterface.ts @@ -11,4 +11,5 @@ export interface ExSocketInterface extends Socket, Identificable { name: string; characterLayers: string[]; position: PointInterface; + isArtillery: boolean; // Whether this socket is opened by Artillery for load testing (hack) } diff --git a/back/yarn.lock b/back/yarn.lock index e54745ee..f660a5c8 100644 --- a/back/yarn.lock +++ b/back/yarn.lock @@ -187,39 +187,12 @@ ajv@^6.10.0, ajv@^6.10.2: json-schema-traverse "^0.4.1" uri-js "^4.2.2" -ajv@^6.12.3: - version "6.12.4" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.4.tgz#0614facc4522127fa713445c6bfd3ebd376e2234" - integrity sha512-eienB2c9qVQs2KWexhkrdMLVDoIQCz5KSeLxwg9Lzk4DOfBtIK9PQwwufcsn1jjGuf9WZmqPMbGxOzfcuphJCQ== - dependencies: - fast-deep-equal "^3.1.1" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.4.1" - uri-js "^4.2.2" - -ansi-align@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-2.0.0.tgz#c36aeccba563b89ceb556f3690f0b1d9e3547f7f" - integrity sha1-w2rsy6VjuJzrVW82kPCx2eNUf38= - dependencies: - string-width "^2.0.0" - ansi-escapes@^4.2.1: version "4.3.1" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.1.tgz#a5c47cc43181f1f38ffd7076837700d395522a61" dependencies: type-fest "^0.11.0" -ansi-regex@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" - integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= - -ansi-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" - integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= - ansi-regex@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" @@ -228,11 +201,6 @@ ansi-regex@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" -ansi-styles@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" - integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4= - ansi-styles@^3.2.0, ansi-styles@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" @@ -268,74 +236,6 @@ arraybuffer.slice@~0.0.7: version "0.0.7" resolved "https://registry.yarnpkg.com/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz#3bbc4275dd584cc1b10809b89d4e8b63a69e7675" -arrivals@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/arrivals/-/arrivals-2.1.2.tgz#bbf8676908f85a133df4c5c1aff8f4cd99e92785" - integrity sha512-g3+rxhxUen2H4+PPBOz6U6pkQ4esBuQPna1rPskgK1jamBdDZeoppyB2vPUM/l0ccunwRrq4r2rKgCvc2FnrFA== - dependencies: - debug "^4.0.1" - nanotimer "0.3.14" - -artillery-plugin-statsd@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/artillery-plugin-statsd/-/artillery-plugin-statsd-2.2.1.tgz#45f625687540128b851d9519f5c14abf0a6e963b" - integrity sha512-Zn6hxi11p1Rpazopm8bZkIqhIA5laTE3/amEhLsE933o8bgvrAJBblpsZ45vhmURztsglqC9yxSCQyW27yUZmQ== - dependencies: - debug "^3.1.0" - lodash "^4.17.11" - lynx "^0.2.0" - -artillery@^1.6.1: - version "1.6.1" - resolved "https://registry.yarnpkg.com/artillery/-/artillery-1.6.1.tgz#225c83cb9d6a1b0014d0ff5d6db64b63cba9fe80" - integrity sha512-yRUqYziBsnAuzBM4G3d1uJ0YvbyxLF3e7BsjMxguzOaNxxdAFAady2CBJWe1BrPM4yLnW6lH/O6AcSG/CPzjfw== - dependencies: - arrivals "^2.1.2" - artillery-plugin-statsd "^2.2.1" - async "^1.5.2" - chalk "1.1.3" - cheerio "^1.0.0-rc.2" - commander "2.9.0" - csv-parse "^4.4.6" - debug "^2.2.0" - deep-equal "^1.0.1" - deep-for-each "^3.0.0" - driftless "^2.0.3" - esprima "^4.0.0" - filtrex "^0.5.4" - js-yaml "^3.13.1" - jsck "^0.3.2" - jsonpath "^1.0.2" - lodash "^4.17.13" - moment "^2.22.1" - nanotimer "^0.3.15" - opn "^5.3.0" - ora "^1.3.0" - pidusage "^1.1.6" - rc "^1.1.6" - request "^2.88.0" - socket.io-client "^2.1.0" - socketio-wildcard "^2.0.0" - stats-lite "^2.1.0" - tmp "0.0.28" - tough-cookie "^2.3.4" - try-require "^1.2.1" - update-notifier "^2.1.0" - uuid "^2.0.3" - ws "^5.1.1" - -asn1@~0.2.3: - version "0.2.4" - resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" - integrity sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg== - dependencies: - safer-buffer "~2.1.0" - -assert-plus@1.0.0, assert-plus@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" - integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= - astral-regex@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" @@ -344,26 +244,6 @@ async-limiter@~1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" -async@^1.5.2: - version "1.5.2" - resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" - integrity sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo= - -asynckit@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" - integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= - -aws-sign2@~0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" - integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= - -aws4@^1.8.0: - version "1.10.1" - resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.10.1.tgz#e1e82e4f3e999e2cfd61b161280d16a111f86428" - integrity sha512-zg7Hz2k5lI8kb7U32998pRRFin7zJlkfezGJjUc2heaD4Pw2wObakCDVzkKztTm/Ln7eiVvYsjqak0Ed4LkMDA== - backo2@1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/backo2/-/backo2-1.0.2.tgz#31ab1ac8b129363463e35b3ebb69f4dfcfba7947" @@ -380,13 +260,6 @@ base64id@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/base64id/-/base64id-2.0.0.tgz#2770ac6bc47d312af97a8bf9a634342e0cd25cb6" -bcrypt-pbkdf@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" - integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4= - dependencies: - tweetnacl "^0.14.3" - better-assert@~1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/better-assert/-/better-assert-1.0.2.tgz#40866b9e1b9e0b55b481894311e68faffaebc522" @@ -417,24 +290,6 @@ body-parser@1.19.0, body-parser@^1.19.0: raw-body "2.4.0" type-is "~1.6.17" -boolbase@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" - integrity sha1-aN/1++YMUes3cl6p4+0xDcwed24= - -boxen@^1.2.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/boxen/-/boxen-1.3.0.tgz#55c6c39a8ba58d9c61ad22cd877532deb665a20b" - integrity sha512-TNPjfTr432qx7yOjQyaXm3dSR0MH9vXp7eT1BFSl/C51g+EFnOR9hTg1IreahGBmDNCehscshe45f+C1TBZbLw== - dependencies: - ansi-align "^2.0.0" - camelcase "^4.0.0" - chalk "^2.0.1" - cli-boxes "^1.0.0" - string-width "^2.0.0" - term-size "^1.2.0" - widest-line "^2.0.0" - brace-expansion@^1.1.7: version "1.1.11" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" @@ -473,33 +328,7 @@ camelcase@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f" -camelcase@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" - integrity sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0= - -capture-stack-trace@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/capture-stack-trace/-/capture-stack-trace-1.0.1.tgz#a6c0bbe1f38f3aa0b92238ecb6ff42c344d4135d" - integrity sha512-mYQLZnx5Qt1JgB1WEiMCf2647plpGeQ2NMR/5L0HNZzGQo4fuSPnK+wjfPnKZV0aiJDgzmWqqkV/g7JD+DW0qw== - -caseless@~0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" - integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= - -chalk@1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" - integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg= - dependencies: - ansi-styles "^2.2.1" - escape-string-regexp "^1.0.2" - has-ansi "^2.0.0" - strip-ansi "^3.0.0" - supports-color "^2.0.0" - -chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0: +chalk@^2.0.0, chalk@^2.1.0: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" dependencies: @@ -518,46 +347,12 @@ chardet@^0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" -cheerio@^1.0.0-rc.2: - version "1.0.0-rc.3" - resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-1.0.0-rc.3.tgz#094636d425b2e9c0f4eb91a46c05630c9a1a8bf6" - integrity sha512-0td5ijfUPuubwLUu0OBoe98gZj8C/AA+RW3v67GPlGOrvxWjZmBXiBCRU+I8VEiNyJzjth40POfHiz2RB3gImA== - dependencies: - css-select "~1.2.0" - dom-serializer "~0.1.1" - entities "~1.1.1" - htmlparser2 "^3.9.1" - lodash "^4.15.0" - parse5 "^3.0.1" - -ci-info@^1.5.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.6.0.tgz#2ca20dbb9ceb32d4524a683303313f0304b1e497" - integrity sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A== - -cli-boxes@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-1.0.0.tgz#4fa917c3e59c94a004cd61f8ee509da651687143" - integrity sha1-T6kXw+WclKAEzWH47lCdplFocUM= - -cli-cursor@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" - integrity sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU= - dependencies: - restore-cursor "^2.0.0" - cli-cursor@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" dependencies: restore-cursor "^3.1.0" -cli-spinners@^1.0.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-1.3.1.tgz#002c1990912d0d59580c93bd36c056de99e4259a" - integrity sha512-1QL4544moEsDVH9T/l6Cemov/37iv1RtoKf7NJ04A60+4MREXNfx/QvavbH6QoGdsD4N4Mwy49cmaINR/o2mdg== - cli-width@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639" @@ -582,20 +377,6 @@ color-name@~1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" -combined-stream@^1.0.6, combined-stream@~1.0.6: - version "1.0.8" - resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" - integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== - dependencies: - delayed-stream "~1.0.0" - -commander@2.9.0: - version "2.9.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.9.0.tgz#9c99094176e12240cb22d6c5146098400fe0f7d4" - integrity sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q= - dependencies: - graceful-readlink ">= 1.0.0" - component-bind@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/component-bind/-/component-bind-1.0.0.tgz#00c608ab7dcd93897c0009651b1d3a8e1e73bbd1" @@ -612,18 +393,6 @@ concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" -configstore@^3.0.0: - version "3.1.5" - resolved "https://registry.yarnpkg.com/configstore/-/configstore-3.1.5.tgz#e9af331fadc14dabd544d3e7e76dc446a09a530f" - integrity sha512-nlOhI4+fdzoK5xmJ+NY+1gZK56bwEaWZr8fYuXohZ9Vkc1o3a4T/R3M+yE/w7x/ZVJ1zF8c+oaOvF0dztdUgmA== - dependencies: - dot-prop "^4.2.1" - graceful-fs "^4.1.2" - make-dir "^1.0.0" - unique-string "^1.0.0" - write-file-atomic "^2.0.0" - xdg-basedir "^3.0.0" - content-disposition@0.5.3: version "0.5.3" resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.3.tgz#e130caf7e7279087c5616c2007d0485698984fbd" @@ -646,27 +415,6 @@ cookie@0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.0.tgz#beb437e7022b3b6d49019d088665303ebe9c14ba" -core-util-is@1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" - integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= - -create-error-class@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/create-error-class/-/create-error-class-3.0.2.tgz#06be7abef947a3f14a30fd610671d401bca8b7b6" - integrity sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y= - dependencies: - capture-stack-trace "^1.0.0" - -cross-spawn@^5.0.1: - version "5.1.0" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" - integrity sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk= - dependencies: - lru-cache "^4.0.1" - shebang-command "^1.2.0" - which "^1.2.9" - cross-spawn@^6.0.5: version "6.0.5" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" @@ -677,44 +425,12 @@ cross-spawn@^6.0.5: shebang-command "^1.2.0" which "^1.2.9" -crypto-random-string@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-1.0.0.tgz#a230f64f568310e1498009940790ec99545bca7e" - integrity sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4= - -css-select@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/css-select/-/css-select-1.2.0.tgz#2b3a110539c5355f1cd8d314623e870b121ec858" - integrity sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg= - dependencies: - boolbase "~1.0.0" - css-what "2.1" - domutils "1.5.1" - nth-check "~1.0.1" - -css-what@2.1: - version "2.1.3" - resolved "https://registry.yarnpkg.com/css-what/-/css-what-2.1.3.tgz#a6d7604573365fe74686c3f311c56513d88285f2" - integrity sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg== - -csv-parse@^4.4.6: - version "4.12.0" - resolved "https://registry.yarnpkg.com/csv-parse/-/csv-parse-4.12.0.tgz#fd42d6291bbaadd51d3009f6cadbb3e53b4ce026" - integrity sha512-wPQl3H79vWLPI8cgKFcQXl0NBgYYEqVnT1i6/So7OjMpsI540oD7p93r3w6fDSyPvwkTepG05F69/7AViX2lXg== - currently-unhandled@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea" dependencies: array-find-index "^1.0.1" -dashdash@^1.12.0: - version "1.14.1" - resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" - integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA= - dependencies: - assert-plus "^1.0.0" - dateformat@~1.0.4-1.2.3: version "1.0.12" resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-1.0.12.tgz#9f124b67594c937ff706932e4a642cca8dbbfee9" @@ -726,19 +442,12 @@ debounce@^1.0.0: version "1.2.0" resolved "https://registry.yarnpkg.com/debounce/-/debounce-1.2.0.tgz#44a540abc0ea9943018dc0eaa95cce87f65cd131" -debug@2.6.9, debug@^2.2.0: +debug@2.6.9: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" dependencies: ms "2.0.0" -debug@^3.1.0: - version "3.2.6" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" - integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== - dependencies: - ms "^2.1.1" - debug@^4.0.1, debug@^4.1.1, debug@~4.1.0: version "4.1.1" resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" @@ -755,46 +464,10 @@ decamelize@^1.1.2: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" -deep-equal@^1.0.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.1.1.tgz#b5c98c942ceffaf7cb051e24e1434a25a2e6076a" - integrity sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g== - dependencies: - is-arguments "^1.0.4" - is-date-object "^1.0.1" - is-regex "^1.0.4" - object-is "^1.0.1" - object-keys "^1.1.1" - regexp.prototype.flags "^1.2.0" - -deep-extend@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" - integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== - -deep-for-each@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/deep-for-each/-/deep-for-each-3.0.0.tgz#0f5d463cb93755c41fccff42145874e9e077fd61" - integrity sha512-pPN+0f8jlnNP+z90qqOdxGghJU5XM6oBDhvAR+qdQzjCg5pk/7VPPvKK1GqoXEFkHza6ZS+Otzzvmr0g3VUaKw== - dependencies: - lodash.isplainobject "^4.0.6" - deep-is@~0.1.3: version "0.1.3" resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" -define-properties@^1.1.2, define-properties@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" - integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== - dependencies: - object-keys "^1.0.12" - -delayed-stream@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" - integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= - depd@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" @@ -813,88 +486,12 @@ doctrine@^3.0.0: dependencies: esutils "^2.0.2" -dom-serializer@0: - version "0.2.2" - resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.2.2.tgz#1afb81f533717175d478655debc5e332d9f9bb51" - integrity sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g== - dependencies: - domelementtype "^2.0.1" - entities "^2.0.0" - -dom-serializer@~0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.1.tgz#1ec4059e284babed36eec2941d4a970a189ce7c0" - integrity sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA== - dependencies: - domelementtype "^1.3.0" - entities "^1.1.1" - -domelementtype@1, domelementtype@^1.3.0, domelementtype@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f" - integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w== - -domelementtype@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.0.1.tgz#1f8bdfe91f5a78063274e803b4bdcedf6e94f94d" - integrity sha512-5HOHUDsYZWV8FGWN0Njbr/Rn7f/eWSQi1v7+HsUVwXgn8nWWlL64zKDkS0n8ZmQ3mlWOMuXOnR+7Nx/5tMO5AQ== - -domhandler@^2.3.0: - version "2.4.2" - resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.4.2.tgz#8805097e933d65e85546f726d60f5eb88b44f803" - integrity sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA== - dependencies: - domelementtype "1" - -domutils@1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.5.1.tgz#dcd8488a26f563d61079e48c9f7b7e32373682cf" - integrity sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8= - dependencies: - dom-serializer "0" - domelementtype "1" - -domutils@^1.5.1: - version "1.7.0" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.7.0.tgz#56ea341e834e06e6748af7a1cb25da67ea9f8c2a" - integrity sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg== - dependencies: - dom-serializer "0" - domelementtype "1" - -dot-prop@^4.2.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-4.2.1.tgz#45884194a71fc2cda71cbb4bceb3a4dd2f433ba4" - integrity sha512-l0p4+mIuJIua0mhxGoh4a+iNL9bmeK5DvnSVQa6T0OhrVmaEa1XScX5Etc673FePCJOArq/4Pa2cLGODUWTPOQ== - dependencies: - is-obj "^1.0.0" - -driftless@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/driftless/-/driftless-2.0.3.tgz#4378cade7aa8e39dee33faa94413bdc67850d90b" - integrity sha512-hSDKsQphnL4O0XLAiyWQ8EiM9suXH0Qd4gMtwF86b5wygGV8r95w0JcA38FOmx9N3LjFCIHLG2winLPNken4Tg== - dependencies: - present "^0.0.3" - -duplexer3@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" - integrity sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI= - dynamic-dedupe@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/dynamic-dedupe/-/dynamic-dedupe-0.3.0.tgz#06e44c223f5e4e94d78ef9db23a6515ce2f962a1" dependencies: xtend "^4.0.0" -ecc-jsbn@~0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" - integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk= - dependencies: - jsbn "~0.1.0" - safer-buffer "^2.1.0" - ecdsa-sig-formatter@1.0.11: version "1.0.11" resolved "https://registry.yarnpkg.com/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz#ae0f0fa2d85045ef14a817daa3ce9acd0489e5bf" @@ -954,68 +551,20 @@ engine.io@~3.4.0: engine.io-parser "~2.2.0" ws "^7.1.2" -entities@^1.1.1, entities@~1.1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.2.tgz#bdfa735299664dfafd34529ed4f8522a275fea56" - integrity sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w== - -entities@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/entities/-/entities-2.0.3.tgz#5c487e5742ab93c15abb5da22759b8590ec03b7f" - integrity sha512-MyoZ0jgnLvB2X3Lg5HqpFmn1kybDiIfEQmKzTb5apr51Rb+T3KdmMiqa70T+bhGnyv7bQ6WMj2QMHpGMmlrUYQ== - error-ex@^1.2.0: version "1.3.2" resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" dependencies: is-arrayish "^0.2.1" -es-abstract@^1.17.0-next.1, es-abstract@^1.17.5: - version "1.17.6" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.17.6.tgz#9142071707857b2cacc7b89ecb670316c3e2d52a" - integrity sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw== - dependencies: - es-to-primitive "^1.2.1" - function-bind "^1.1.1" - has "^1.0.3" - has-symbols "^1.0.1" - is-callable "^1.2.0" - is-regex "^1.1.0" - object-inspect "^1.7.0" - object-keys "^1.1.1" - object.assign "^4.1.0" - string.prototype.trimend "^1.0.1" - string.prototype.trimstart "^1.0.1" - -es-to-primitive@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" - integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== - dependencies: - is-callable "^1.1.4" - is-date-object "^1.0.1" - is-symbol "^1.0.2" - escape-html@~1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" -escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: +escape-string-regexp@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" -escodegen@^1.8.1: - version "1.14.3" - resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.14.3.tgz#4e7b81fba61581dc97582ed78cab7f0e8d63f503" - integrity sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw== - dependencies: - esprima "^4.0.1" - estraverse "^4.2.0" - esutils "^2.0.2" - optionator "^0.8.1" - optionalDependencies: - source-map "~0.6.1" - eslint-scope@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.0.0.tgz#e87c8887c73e8d1ec84f1ca591645c358bfc8fb9" @@ -1089,12 +638,7 @@ espree@^6.1.2: acorn-jsx "^5.2.0" eslint-visitor-keys "^1.1.0" -esprima@1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-1.2.2.tgz#76a0fd66fcfe154fd292667dc264019750b1657b" - integrity sha1-dqD9Zvz+FU/SkmZ9wmQBl1CxZXs= - -esprima@^4.0.0, esprima@^4.0.1: +esprima@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" @@ -1110,7 +654,7 @@ esrecurse@^4.1.0: dependencies: estraverse "^4.1.0" -estraverse@^4.1.0, estraverse@^4.1.1, estraverse@^4.2.0: +estraverse@^4.1.0, estraverse@^4.1.1: version "4.3.0" resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" @@ -1126,19 +670,6 @@ etag@~1.8.1: version "1.8.1" resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" -execa@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777" - integrity sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c= - dependencies: - cross-spawn "^5.0.1" - get-stream "^3.0.0" - is-stream "^1.1.0" - npm-run-path "^2.0.0" - p-finally "^1.0.0" - signal-exit "^3.0.0" - strip-eof "^1.0.0" - express@^4.17.1: version "4.17.1" resolved "https://registry.yarnpkg.com/express/-/express-4.17.1.tgz#4491fc38605cf51f8629d39c2b5d026f98a4c134" @@ -1174,11 +705,6 @@ express@^4.17.1: utils-merge "1.0.1" vary "~1.1.2" -extend@~3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" - integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== - external-editor@^3.0.3: version "3.1.0" resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" @@ -1187,16 +713,6 @@ external-editor@^3.0.3: iconv-lite "^0.4.24" tmp "^0.0.33" -extsprintf@1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" - integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU= - -extsprintf@^1.2.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" - integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8= - fast-deep-equal@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz#545145077c501491e33b15ec408c294376e94ae4" @@ -1227,11 +743,6 @@ filewatcher@~3.0.0: dependencies: debounce "^1.0.0" -filtrex@^0.5.4: - version "0.5.4" - resolved "https://registry.yarnpkg.com/filtrex/-/filtrex-0.5.4.tgz#98075d518f068c4f58b7b589a227d98bd9f6395d" - integrity sha1-mAddUY8GjE9Yt7WJoifZi9n2OV0= - finalhandler@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d" @@ -1263,20 +774,6 @@ flatted@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.2.tgz#4575b21e2bcee7434aa9be662f4b7b5f9c2b5138" -forever-agent@~0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" - integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= - -form-data@~2.3.2: - version "2.3.3" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" - integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.6" - mime-types "^2.1.12" - forwarded@~0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84" @@ -1289,11 +786,6 @@ fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" -function-bind@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" - integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== - functional-red-black-tree@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" @@ -1307,18 +799,6 @@ get-stdin@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe" -get-stream@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" - integrity sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ= - -getpass@^0.1.1: - version "0.1.7" - resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" - integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo= - dependencies: - assert-plus "^1.0.0" - glob-parent@^5.0.0: version "5.1.1" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.1.tgz#b6c1ef417c4e5663ea498f1c45afac6916bbc229" @@ -1336,74 +816,20 @@ glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: once "^1.3.0" path-is-absolute "^1.0.0" -global-dirs@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-0.1.1.tgz#b319c0dd4607f353f3be9cca4c72fc148c49f445" - integrity sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU= - dependencies: - ini "^1.3.4" - globals@^12.1.0: version "12.4.0" resolved "https://registry.yarnpkg.com/globals/-/globals-12.4.0.tgz#a18813576a41b00a24a97e7f815918c2e19925f8" dependencies: type-fest "^0.8.1" -got@^6.7.1: - version "6.7.1" - resolved "https://registry.yarnpkg.com/got/-/got-6.7.1.tgz#240cd05785a9a18e561dc1b44b41c763ef1e8db0" - integrity sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA= - dependencies: - create-error-class "^3.0.0" - duplexer3 "^0.1.4" - get-stream "^3.0.0" - is-redirect "^1.0.0" - is-retry-allowed "^1.0.0" - is-stream "^1.0.0" - lowercase-keys "^1.0.0" - safe-buffer "^5.0.1" - timed-out "^4.0.0" - unzip-response "^2.0.1" - url-parse-lax "^1.0.0" - -graceful-fs@^4.1.11: - version "4.2.4" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" - integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== - graceful-fs@^4.1.2: version "4.2.3" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.3.tgz#4a12ff1b60376ef09862c2093edd908328be8423" -"graceful-readlink@>= 1.0.0": - version "1.0.1" - resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725" - integrity sha1-TK+tdrxi8C+gObL5Tpo906ORpyU= - growly@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" -har-schema@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" - integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= - -har-validator@~5.1.3: - version "5.1.5" - resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.5.tgz#1f0803b9f8cb20c0fa13822df1ecddb36bde1efd" - integrity sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w== - dependencies: - ajv "^6.12.3" - har-schema "^2.0.0" - -has-ansi@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" - integrity sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE= - dependencies: - ansi-regex "^2.0.0" - has-binary2@~1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/has-binary2/-/has-binary2-1.0.3.tgz#7776ac627f3ea77250cfc332dab7ddf5e4f5d11d" @@ -1422,34 +848,10 @@ has-flag@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" -has-symbols@^1.0.0, has-symbols@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8" - integrity sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg== - -has@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" - integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== - dependencies: - function-bind "^1.1.1" - hosted-git-info@^2.1.4: version "2.8.8" resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.8.tgz#7539bd4bc1e0e0a895815a2e0262420b12858488" -htmlparser2@^3.9.1: - version "3.10.1" - resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.10.1.tgz#bd679dc3f59897b6a34bb10749c855bb53a9392f" - integrity sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ== - dependencies: - domelementtype "^1.3.1" - domhandler "^2.3.0" - domutils "^1.5.1" - entities "^1.1.1" - inherits "^2.0.1" - readable-stream "^3.1.1" - http-errors@1.7.2: version "1.7.2" resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.2.tgz#4f5029cf13239f31036e5b2e55292bcfbcc85c8f" @@ -1470,15 +872,6 @@ http-errors@~1.7.2: statuses ">= 1.5.0 < 2" toidentifier "1.0.0" -http-signature@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" - integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE= - dependencies: - assert-plus "^1.0.0" - jsprim "^1.2.2" - sshpk "^1.7.0" - http-status-codes@*, http-status-codes@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/http-status-codes/-/http-status-codes-1.4.0.tgz#6e4c15d16ff3a9e2df03b89f3a55e1aae05fb477" @@ -1500,11 +893,6 @@ import-fresh@^3.0.0: parent-module "^1.0.0" resolve-from "^4.0.0" -import-lazy@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43" - integrity sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM= - imurmurhash@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" @@ -1526,7 +914,7 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3: +inherits@2, inherits@2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" @@ -1534,11 +922,6 @@ inherits@2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" -ini@^1.3.4, ini@~1.3.0: - version "1.3.5" - resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" - integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw== - inquirer@^7.0.0: version "7.1.0" resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-7.1.0.tgz#1298a01859883e17c7264b82870ae1034f92dd29" @@ -1561,32 +944,10 @@ ipaddr.js@1.9.1: version "1.9.1" resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" -is-arguments@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.0.4.tgz#3faf966c7cba0ff437fb31f6250082fcf0448cf3" - integrity sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA== - is-arrayish@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" -is-callable@^1.1.4, is-callable@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.0.tgz#83336560b54a38e35e3a2df7afd0454d691468bb" - integrity sha512-pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw== - -is-ci@^1.0.10: - version "1.2.1" - resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.2.1.tgz#e3779c8ee17fccf428488f6e281187f2e632841c" - integrity sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg== - dependencies: - ci-info "^1.5.0" - -is-date-object@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.2.tgz#bda736f2cd8fd06d32844e7743bfa7494c3bfd7e" - integrity sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g== - is-extglob@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" @@ -1609,69 +970,10 @@ is-glob@^4.0.0, is-glob@^4.0.1: dependencies: is-extglob "^2.1.1" -is-installed-globally@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.1.0.tgz#0dfd98f5a9111716dd535dda6492f67bf3d25a80" - integrity sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA= - dependencies: - global-dirs "^0.1.0" - is-path-inside "^1.0.0" - -is-npm@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-1.0.0.tgz#f2fb63a65e4905b406c86072765a1a4dc793b9f4" - integrity sha1-8vtjpl5JBbQGyGBydloaTceTufQ= - -is-obj@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" - integrity sha1-PkcprB9f3gJc19g6iW2rn09n2w8= - -is-path-inside@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.1.tgz#8ef5b7de50437a3fdca6b4e865ef7aa55cb48036" - integrity sha1-jvW33lBDej/cprToZe96pVy0gDY= - dependencies: - path-is-inside "^1.0.1" - is-promise@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa" -is-redirect@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-redirect/-/is-redirect-1.0.0.tgz#1d03dded53bd8db0f30c26e4f95d36fc7c87dc24" - integrity sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ= - -is-regex@^1.0.4, is-regex@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.1.tgz#c6f98aacc546f6cec5468a07b7b153ab564a57b9" - integrity sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg== - dependencies: - has-symbols "^1.0.1" - -is-retry-allowed@^1.0.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz#d778488bd0a4666a3be8a1482b9f2baafedea8b4" - integrity sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg== - -is-stream@^1.0.0, is-stream@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" - integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= - -is-symbol@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.3.tgz#38e1014b9e6329be0de9d24a414fd7441ec61937" - integrity sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ== - dependencies: - has-symbols "^1.0.1" - -is-typedarray@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" - integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= - is-utf8@^0.2.0: version "0.2.1" resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" @@ -1688,16 +990,6 @@ isexe@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" -isnumber@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/isnumber/-/isnumber-1.0.0.tgz#0e3f9759b581d99dd85086f0ec2a74909cfadd01" - integrity sha1-Dj+XWbWB2Z3YUIbw7Cp0kJz63QE= - -isstream@~0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" - integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= - jasmine-core@~3.5.0: version "3.5.0" resolved "https://registry.yarnpkg.com/jasmine-core/-/jasmine-core-3.5.0.tgz#132c23e645af96d85c8bca13c8758b18429fc1e4" @@ -1720,43 +1012,14 @@ js-yaml@^3.13.1: argparse "^1.0.7" esprima "^4.0.0" -jsbn@~0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" - integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= - -jsck@^0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/jsck/-/jsck-0.3.2.tgz#8e06b31bb57b0090e503dd4ee6ad0f269dff1a55" - integrity sha1-jgazG7V7AJDlA91O5q0PJp3/GlU= - json-schema-traverse@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" -json-schema@0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" - integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM= - json-stable-stringify-without-jsonify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" -json-stringify-safe@~5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" - integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= - -jsonpath@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/jsonpath/-/jsonpath-1.0.2.tgz#e6aae681d03e9a77b4651d5d96eac5fc63b1fd13" - integrity sha512-rmzlgFZiQPc6q4HDyK8s9Qb4oxBnI5sF61y/Co5PV0lc3q2bIuRsNdueVbhoSHdKM4fxeimphOAtfz47yjCfeA== - dependencies: - esprima "1.2.2" - static-eval "2.0.2" - underscore "1.7.0" - jsonwebtoken@^8.5.1: version "8.5.1" resolved "https://registry.yarnpkg.com/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz#00e71e0b8df54c2121a1f26137df2280673bcc0d" @@ -1772,16 +1035,6 @@ jsonwebtoken@^8.5.1: ms "^2.1.1" semver "^5.6.0" -jsprim@^1.2.2: - version "1.4.1" - resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" - integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI= - dependencies: - assert-plus "1.0.0" - extsprintf "1.3.0" - json-schema "0.2.3" - verror "1.10.0" - jwa@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/jwa/-/jwa-1.4.1.tgz#743c32985cb9e98655530d53641b66c8645b039a" @@ -1797,13 +1050,6 @@ jws@^3.2.2: jwa "^1.4.1" safe-buffer "^5.0.1" -latest-version@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-3.1.0.tgz#a205383fea322b33b5ae3b18abee0dc2f356ee15" - integrity sha1-ogU4P+oyKzO1rjsYq+4NwvNW7hU= - dependencies: - package-json "^4.0.0" - levn@^0.3.0, levn@~0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" @@ -1849,22 +1095,10 @@ lodash.once@^4.0.0: version "4.1.1" resolved "https://registry.yarnpkg.com/lodash.once/-/lodash.once-4.1.1.tgz#0dd3971213c7c56df880977d504c88fb471a97ac" -lodash@^4.15.0, lodash@^4.17.11, lodash@^4.17.13: - version "4.17.20" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52" - integrity sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA== - lodash@^4.17.14, lodash@^4.17.15: version "4.17.15" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" -log-symbols@^2.1.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a" - integrity sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg== - dependencies: - chalk "^2.0.1" - loud-rejection@^1.0.0: version "1.6.0" resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f" @@ -1872,34 +1106,6 @@ loud-rejection@^1.0.0: currently-unhandled "^0.4.1" signal-exit "^3.0.0" -lowercase-keys@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" - integrity sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA== - -lru-cache@^4.0.1: - version "4.1.5" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" - integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g== - dependencies: - pseudomap "^1.0.2" - yallist "^2.1.2" - -lynx@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/lynx/-/lynx-0.2.0.tgz#79e6674530da4183e87953bd686171e070da50b9" - integrity sha1-eeZnRTDaQYPoeVO9aGFx4HDaULk= - dependencies: - mersenne "~0.0.3" - statsd-parser "~0.0.4" - -make-dir@^1.0.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.3.0.tgz#79c1033b80515bd6d24ec9933e860ca75ee27f0c" - integrity sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ== - dependencies: - pify "^3.0.0" - make-error@^1.1.1: version "1.3.6" resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" @@ -1931,11 +1137,6 @@ merge-descriptors@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" -mersenne@~0.0.3: - version "0.0.4" - resolved "https://registry.yarnpkg.com/mersenne/-/mersenne-0.0.4.tgz#401fdec7ec21cdb9e03cd3d3021398da21b27085" - integrity sha1-QB/ex+whzbngPNPTAhOY2iGycIU= - methods@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" @@ -1944,18 +1145,6 @@ mime-db@1.43.0: version "1.43.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.43.0.tgz#0a12e0502650e473d735535050e7c8f4eb4fae58" -mime-db@1.44.0: - version "1.44.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.44.0.tgz#fa11c5eb0aca1334b4233cb4d52f10c5a6272f92" - integrity sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg== - -mime-types@^2.1.12, mime-types@~2.1.19: - version "2.1.27" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.27.tgz#47949f98e279ea53119f5722e0f34e529bec009f" - integrity sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w== - dependencies: - mime-db "1.44.0" - mime-types@~2.1.24: version "2.1.26" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.26.tgz#9c921fc09b7e149a65dfdc0da4d20997200b0a06" @@ -1966,11 +1155,6 @@ mime@1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" -mimic-fn@^1.0.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" - integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== - mimic-fn@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" @@ -1981,7 +1165,7 @@ minimatch@^3.0.4: dependencies: brace-expansion "^1.1.7" -minimist@^1.1.3, minimist@^1.2.0, minimist@^1.2.5: +minimist@^1.1.3, minimist@^1.2.5: version "1.2.5" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" @@ -1991,11 +1175,6 @@ mkdirp@^0.5.1: dependencies: minimist "^1.2.5" -moment@^2.22.1: - version "2.27.0" - resolved "https://registry.yarnpkg.com/moment/-/moment-2.27.0.tgz#8bff4e3e26a236220dfe3e36de756b6ebaa0105d" - integrity sha512-al0MUK7cpIcglMv3YF13qSgdAIqxHTO7brRtaz3DlSULbqfazqkc5kEjNrLDOM7fsjshoFIihnU8snrP7zUvhQ== - ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" @@ -2012,16 +1191,6 @@ mute-stream@0.0.8: version "0.0.8" resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" -nanotimer@0.3.14: - version "0.3.14" - resolved "https://registry.yarnpkg.com/nanotimer/-/nanotimer-0.3.14.tgz#10d811f8d064788180096ce1f96c70846fd5a2ba" - integrity sha1-ENgR+NBkeIGACWzh+WxwhG/Voro= - -nanotimer@^0.3.15: - version "0.3.15" - resolved "https://registry.yarnpkg.com/nanotimer/-/nanotimer-0.3.15.tgz#280d277db9146eca6f8a570b572abaf2a9acc754" - integrity sha1-KA0nfbkUbspvilcLVyq68qmsx1Q= - natural-compare@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" @@ -2053,25 +1222,6 @@ normalize-package-data@^2.3.2, normalize-package-data@^2.3.4: semver "2 || 3 || 4 || 5" validate-npm-package-license "^3.0.1" -npm-run-path@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" - integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8= - dependencies: - path-key "^2.0.0" - -nth-check@~1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.2.tgz#b2bd295c37e3dd58a3bf0700376663ba4d9cf05c" - integrity sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg== - dependencies: - boolbase "~1.0.0" - -oauth-sign@~0.9.0: - version "0.9.0" - resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" - integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== - object-assign@^4.0.1: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" @@ -2080,34 +1230,6 @@ object-component@0.0.3: version "0.0.3" resolved "https://registry.yarnpkg.com/object-component/-/object-component-0.0.3.tgz#f0c69aa50efc95b866c186f400a33769cb2f1291" -object-inspect@^1.7.0: - version "1.8.0" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.8.0.tgz#df807e5ecf53a609cc6bfe93eac3cc7be5b3a9d0" - integrity sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA== - -object-is@^1.0.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.2.tgz#c5d2e87ff9e119f78b7a088441519e2eec1573b6" - integrity sha512-5lHCz+0uufF6wZ7CRFWJN3hp8Jqblpgve06U5CMQ3f//6iDjPr2PEo9MWCjEssDsa+UZEL4PkFpr+BMop6aKzQ== - dependencies: - define-properties "^1.1.3" - es-abstract "^1.17.5" - -object-keys@^1.0.11, object-keys@^1.0.12, object-keys@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" - integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== - -object.assign@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da" - integrity sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w== - dependencies: - define-properties "^1.1.2" - function-bind "^1.1.1" - has-symbols "^1.0.0" - object-keys "^1.0.11" - on-finished@~2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" @@ -2120,27 +1242,13 @@ once@^1.3.0: dependencies: wrappy "1" -onetime@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" - integrity sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ= - dependencies: - mimic-fn "^1.0.0" - onetime@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.0.tgz#fff0f3c91617fe62bb50189636e99ac8a6df7be5" dependencies: mimic-fn "^2.1.0" -opn@^5.3.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/opn/-/opn-5.5.0.tgz#fc7164fab56d235904c51c3b27da6758ca3b9bfc" - integrity sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA== - dependencies: - is-wsl "^1.1.0" - -optionator@^0.8.1, optionator@^0.8.3: +optionator@^0.8.3: version "0.8.3" resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" dependencies: @@ -2151,35 +1259,10 @@ optionator@^0.8.1, optionator@^0.8.3: type-check "~0.3.2" word-wrap "~1.2.3" -ora@^1.3.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/ora/-/ora-1.4.0.tgz#884458215b3a5d4097592285f93321bb7a79e2e5" - integrity sha512-iMK1DOQxzzh2MBlVsU42G80mnrvUhqsMh74phHtDlrcTZPK0pH6o7l7DRshK+0YsxDyEuaOkziVdvM3T0QTzpw== - dependencies: - chalk "^2.1.0" - cli-cursor "^2.1.0" - cli-spinners "^1.0.1" - log-symbols "^2.1.0" - -os-tmpdir@~1.0.1, os-tmpdir@~1.0.2: +os-tmpdir@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" -p-finally@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" - integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= - -package-json@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/package-json/-/package-json-4.0.1.tgz#8869a0401253661c4c4ca3da6c2121ed555f5eed" - integrity sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0= - dependencies: - got "^6.7.1" - registry-auth-token "^3.0.1" - registry-url "^3.0.3" - semver "^5.1.0" - parent-module@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" @@ -2192,13 +1275,6 @@ parse-json@^2.2.0: dependencies: error-ex "^1.2.0" -parse5@^3.0.1: - version "3.0.3" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-3.0.3.tgz#042f792ffdd36851551cf4e9e066b3874ab45b5c" - integrity sha512-rgO9Zg5LLLkfJF9E6CCmXlSE4UVceloys8JrFqCcHloC3usd/kJCyPDwH2SOlzix2j3xaP9sUX3e8+kvkuleAA== - dependencies: - "@types/node" "*" - parseqs@0.0.5: version "0.0.5" resolved "https://registry.yarnpkg.com/parseqs/-/parseqs-0.0.5.tgz#d5208a3738e46766e291ba2ea173684921a8b89d" @@ -2225,12 +1301,7 @@ path-is-absolute@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" -path-is-inside@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" - integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= - -path-key@^2.0.0, path-key@^2.0.1: +path-key@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" @@ -2250,25 +1321,10 @@ path-type@^1.0.0: pify "^2.0.0" pinkie-promise "^2.0.0" -performance-now@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" - integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= - -pidusage@^1.1.6: - version "1.2.0" - resolved "https://registry.yarnpkg.com/pidusage/-/pidusage-1.2.0.tgz#65ee96ace4e08a4cd3f9240996c85b367171ee92" - integrity sha512-OGo+iSOk44HRJ8q15AyG570UYxcm5u+R99DI8Khu8P3tKGkVu5EZX4ywHglWSTMNNXQ274oeGpYrvFEhDIFGPg== - pify@^2.0.0: version "2.3.0" resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" -pify@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" - integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= - pinkie-promise@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" @@ -2283,16 +1339,6 @@ prelude-ls@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" -prepend-http@^1.0.1: - version "1.0.4" - resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" - integrity sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw= - -present@^0.0.3: - version "0.0.3" - resolved "https://registry.yarnpkg.com/present/-/present-0.0.3.tgz#5aefb8a5ddf6b34c65743bf1cde53523aac1c05a" - integrity sha1-Wu+4pd32s0xldDvxzeU1I6rBwFo= - progress@^2.0.0: version "2.0.3" resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" @@ -2311,17 +1357,7 @@ proxy-addr@~2.0.5: forwarded "~0.1.2" ipaddr.js "1.9.1" -pseudomap@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" - integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= - -psl@^1.1.28: - version "1.8.0" - resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24" - integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ== - -punycode@^2.1.0, punycode@^2.1.1: +punycode@^2.1.0: version "2.1.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" @@ -2329,11 +1365,6 @@ qs@6.7.0: version "6.7.0" resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc" -qs@~6.5.2: - version "6.5.2" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" - integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== - range-parser@~1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" @@ -2347,16 +1378,6 @@ raw-body@2.4.0: iconv-lite "0.4.24" unpipe "1.0.0" -rc@^1.0.1, rc@^1.1.6: - version "1.2.8" - resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" - integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== - dependencies: - deep-extend "^0.6.0" - ini "~1.3.0" - minimist "^1.2.0" - strip-json-comments "~2.0.1" - read-pkg-up@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" @@ -2372,15 +1393,6 @@ read-pkg@^1.0.0: normalize-package-data "^2.3.2" path-type "^1.0.0" -readable-stream@^3.1.1: - version "3.6.0" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" - integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== - dependencies: - inherits "^2.0.3" - string_decoder "^1.1.1" - util-deprecate "^1.0.1" - redent@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde" @@ -2388,14 +1400,6 @@ redent@^1.0.0: indent-string "^2.1.0" strip-indent "^1.0.1" -regexp.prototype.flags@^1.2.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz#7aba89b3c13a64509dabcf3ca8d9fbb9bdf5cb75" - integrity sha512-2+Q0C5g951OlYlJz6yu5/M33IcsESLlLfsyIaLJaG4FA2r4yP8MvVMJUUP/fVBkSpbbbZlS5gynbEWLipiiXiQ== - dependencies: - define-properties "^1.1.3" - es-abstract "^1.17.0-next.1" - regexpp@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-2.0.1.tgz#8d19d31cf632482b589049f8281f93dbcba4d07f" @@ -2404,53 +1408,12 @@ regexpp@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.0.0.tgz#dd63982ee3300e67b41c1956f850aa680d9d330e" -registry-auth-token@^3.0.1: - version "3.4.0" - resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-3.4.0.tgz#d7446815433f5d5ed6431cd5dca21048f66b397e" - integrity sha512-4LM6Fw8eBQdwMYcES4yTnn2TqIasbXuwDx3um+QRs7S55aMKCBKBxvPXl2RiUjHwuJLTyYfxSpmfSAjQpcuP+A== - dependencies: - rc "^1.1.6" - safe-buffer "^5.0.1" - -registry-url@^3.0.3: - version "3.1.0" - resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-3.1.0.tgz#3d4ef870f73dde1d77f0cf9a381432444e174942" - integrity sha1-PU74cPc93h138M+aOBQyRE4XSUI= - dependencies: - rc "^1.0.1" - repeating@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" dependencies: is-finite "^1.0.0" -request@^2.88.0: - version "2.88.2" - resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" - integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== - dependencies: - aws-sign2 "~0.7.0" - aws4 "^1.8.0" - caseless "~0.12.0" - combined-stream "~1.0.6" - extend "~3.0.2" - forever-agent "~0.6.1" - form-data "~2.3.2" - har-validator "~5.1.3" - http-signature "~1.2.0" - is-typedarray "~1.0.0" - isstream "~0.1.2" - json-stringify-safe "~5.0.1" - mime-types "~2.1.19" - oauth-sign "~0.9.0" - performance-now "^2.1.0" - qs "~6.5.2" - safe-buffer "^5.1.2" - tough-cookie "~2.5.0" - tunnel-agent "^0.6.0" - uuid "^3.3.2" - resolve-from@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" @@ -2461,14 +1424,6 @@ resolve@^1.0.0, resolve@^1.10.0: dependencies: path-parse "^1.0.6" -restore-cursor@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" - integrity sha1-n37ih/gv0ybU/RYpI9YhKe7g368= - dependencies: - onetime "^2.0.0" - signal-exit "^3.0.2" - restore-cursor@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" @@ -2508,23 +1463,11 @@ safe-buffer@^5.0.1: version "5.2.0" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.0.tgz#b74daec49b1148f88c64b68d49b1e815c1f2f519" -safe-buffer@^5.1.2, safe-buffer@~5.2.0: - version "5.2.1" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" - integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== - -"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: +"safer-buffer@>= 2.1.2 < 3": version "2.1.2" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" -semver-diff@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-2.1.0.tgz#4bbb8437c8d37e4b0cf1a68fd726ec6d645d6d36" - integrity sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY= - dependencies: - semver "^5.0.3" - -"semver@2 || 3 || 4 || 5", semver@^5.0.3, semver@^5.1.0, semver@^5.5.0, semver@^5.6.0: +"semver@2 || 3 || 4 || 5", semver@^5.5.0, semver@^5.6.0: version "5.7.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" @@ -2593,7 +1536,7 @@ socket.io-adapter@~1.1.0: version "1.1.2" resolved "https://registry.yarnpkg.com/socket.io-adapter/-/socket.io-adapter-1.1.2.tgz#ab3f0d6f66b8fc7fca3959ab5991f82221789be9" -socket.io-client@2.3.0, socket.io-client@^2.1.0: +socket.io-client@2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/socket.io-client/-/socket.io-client-2.3.0.tgz#14d5ba2e00b9bcd145ae443ab96b3f86cbcc1bb4" dependencies: @@ -2639,11 +1582,6 @@ socket.io@^2.3.0: socket.io-client "2.3.0" socket.io-parser "~3.4.0" -socketio-wildcard@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/socketio-wildcard/-/socketio-wildcard-2.0.0.tgz#2466e832276b19163563bee772388747f912475b" - integrity sha1-JGboMidrGRY1Y77ncjiHR/kSR1s= - source-map-support@^0.5.12, source-map-support@^0.5.6: version "0.5.16" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.16.tgz#0ae069e7fe3ba7538c64c98515e35339eac5a042" @@ -2651,7 +1589,7 @@ source-map-support@^0.5.12, source-map-support@^0.5.6: buffer-from "^1.0.0" source-map "^0.6.0" -source-map@^0.6.0, source-map@~0.6.1: +source-map@^0.6.0: version "0.6.1" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" @@ -2681,52 +1619,10 @@ sprintf-js@~1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" -sshpk@^1.7.0: - version "1.16.1" - resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877" - integrity sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg== - dependencies: - asn1 "~0.2.3" - assert-plus "^1.0.0" - bcrypt-pbkdf "^1.0.0" - dashdash "^1.12.0" - ecc-jsbn "~0.1.1" - getpass "^0.1.1" - jsbn "~0.1.0" - safer-buffer "^2.0.2" - tweetnacl "~0.14.0" - -static-eval@2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/static-eval/-/static-eval-2.0.2.tgz#2d1759306b1befa688938454c546b7871f806a42" - integrity sha512-N/D219Hcr2bPjLxPiV+TQE++Tsmrady7TqAJugLy7Xk1EumfDWS/f5dtBbkRCGE7wKKXuYockQoj8Rm2/pVKyg== - dependencies: - escodegen "^1.8.1" - -stats-lite@^2.1.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/stats-lite/-/stats-lite-2.2.0.tgz#278a5571fa1d2e8b1691295dccc0235282393bbf" - integrity sha512-/Kz55rgUIv2KP2MKphwYT/NCuSfAlbbMRv2ZWw7wyXayu230zdtzhxxuXXcvsc6EmmhS8bSJl3uS1wmMHFumbA== - dependencies: - isnumber "~1.0.0" - -statsd-parser@~0.0.4: - version "0.0.4" - resolved "https://registry.yarnpkg.com/statsd-parser/-/statsd-parser-0.0.4.tgz#cbd243953cc42effd548b5d22388ed689ec639bd" - integrity sha1-y9JDlTzELv/VSLXSI4jtaJ7GOb0= - "statuses@>= 1.5.0 < 2", statuses@~1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" -string-width@^2.0.0, string-width@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" - integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== - dependencies: - is-fullwidth-code-point "^2.0.0" - strip-ansi "^4.0.0" - string-width@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" @@ -2743,43 +1639,6 @@ string-width@^4.1.0: is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.0" -string.prototype.trimend@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz#85812a6b847ac002270f5808146064c995fb6913" - integrity sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g== - dependencies: - define-properties "^1.1.3" - es-abstract "^1.17.5" - -string.prototype.trimstart@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz#14af6d9f34b053f7cfc89b72f8f2ee14b9039a54" - integrity sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw== - dependencies: - define-properties "^1.1.3" - es-abstract "^1.17.5" - -string_decoder@^1.1.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" - integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== - dependencies: - safe-buffer "~5.2.0" - -strip-ansi@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" - integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= - dependencies: - ansi-regex "^2.0.0" - -strip-ansi@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" - integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= - dependencies: - ansi-regex "^3.0.0" - strip-ansi@^5.1.0, strip-ansi@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" @@ -2802,18 +1661,13 @@ strip-bom@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" -strip-eof@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" - integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= - strip-indent@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2" dependencies: get-stdin "^4.0.1" -strip-json-comments@^2.0.0, strip-json-comments@~2.0.1: +strip-json-comments@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" @@ -2821,11 +1675,6 @@ strip-json-comments@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.0.1.tgz#85713975a91fb87bf1b305cca77395e40d2a64a7" -supports-color@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" - integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= - supports-color@^5.3.0: version "5.5.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" @@ -2858,13 +1707,6 @@ tdigest@^0.1.1: dependencies: bintrees "1.0.1" -term-size@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/term-size/-/term-size-1.2.0.tgz#458b83887f288fc56d6fffbfad262e26638efa69" - integrity sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk= - dependencies: - execa "^0.7.0" - text-table@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" @@ -2873,18 +1715,6 @@ through@^2.3.6: version "2.3.8" resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" -timed-out@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f" - integrity sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8= - -tmp@0.0.28: - version "0.0.28" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.28.tgz#172735b7f614ea7af39664fa84cf0de4e515d120" - integrity sha1-Fyc1t/YU6nrzlmT6hM8N5OUV0SA= - dependencies: - os-tmpdir "~1.0.1" - tmp@^0.0.33: version "0.0.33" resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" @@ -2899,14 +1729,6 @@ toidentifier@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" -tough-cookie@^2.3.4, tough-cookie@~2.5.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" - integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== - dependencies: - psl "^1.1.28" - punycode "^2.1.1" - tree-kill@^1.2.1: version "1.2.2" resolved "https://registry.yarnpkg.com/tree-kill/-/tree-kill-1.2.2.tgz#4ca09a9092c88b73a7cdc5e8a01b507b0790a0cc" @@ -2915,11 +1737,6 @@ trim-newlines@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613" -try-require@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/try-require/-/try-require-1.2.1.tgz#34489a2cac0c09c1cc10ed91ba011594d4333be2" - integrity sha1-NEiaLKwMCcHMEO2RugEVlNQzO+I= - ts-node-dev@^1.0.0-pre.44: version "1.0.0-pre.44" resolved "https://registry.yarnpkg.com/ts-node-dev/-/ts-node-dev-1.0.0-pre.44.tgz#2f4d666088481fb9c4e4f5bc8f15995bd8b06ecb" @@ -2966,18 +1783,6 @@ tsutils@^3.17.1: dependencies: tslib "^1.8.1" -tunnel-agent@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" - integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0= - dependencies: - safe-buffer "^5.0.1" - -tweetnacl@^0.14.3, tweetnacl@~0.14.0: - version "0.14.5" - resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" - integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= - type-check@~0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" @@ -3003,61 +1808,16 @@ typescript@^3.8.3: version "3.8.3" resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.8.3.tgz#409eb8544ea0335711205869ec458ab109ee1061" -underscore@1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.7.0.tgz#6bbaf0877500d36be34ecaa584e0db9fef035209" - integrity sha1-a7rwh3UA02vjTsqlhODbn+8DUgk= - -unique-string@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-1.0.0.tgz#9e1057cca851abb93398f8b33ae187b99caec11a" - integrity sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo= - dependencies: - crypto-random-string "^1.0.0" - unpipe@1.0.0, unpipe@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" -unzip-response@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/unzip-response/-/unzip-response-2.0.1.tgz#d2f0f737d16b0615e72a6935ed04214572d56f97" - integrity sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c= - -update-notifier@^2.1.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-2.5.0.tgz#d0744593e13f161e406acb1d9408b72cad08aff6" - integrity sha512-gwMdhgJHGuj/+wHJJs9e6PcCszpxR1b236igrOkUofGhqJuG+amlIKwApH1IW1WWl7ovZxsX49lMBWLxSdm5Dw== - dependencies: - boxen "^1.2.1" - chalk "^2.0.1" - configstore "^3.0.0" - import-lazy "^2.1.0" - is-ci "^1.0.10" - is-installed-globally "^0.1.0" - is-npm "^1.0.0" - latest-version "^3.0.0" - semver-diff "^2.0.0" - xdg-basedir "^3.0.0" - uri-js@^4.2.2: version "4.2.2" resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" dependencies: punycode "^2.1.0" -url-parse-lax@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-1.0.0.tgz#7af8f303645e9bd79a272e7a14ac68bc0609da73" - integrity sha1-evjzA2Rem9eaJy56FKxovAYJ2nM= - dependencies: - prepend-http "^1.0.1" - -util-deprecate@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" - integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= - utils-merge@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" @@ -3066,16 +1826,6 @@ uuid@7.0.3: version "7.0.3" resolved "https://registry.yarnpkg.com/uuid/-/uuid-7.0.3.tgz#c5c9f2c8cf25dc0a372c4df1441c41f5bd0c680b" -uuid@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-2.0.3.tgz#67e2e863797215530dff318e5bf9dcebfd47b21a" - integrity sha1-Z+LoY3lyFVMN/zGOW/nc6/1Hsho= - -uuid@^3.3.2: - version "3.4.0" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" - integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== - uuidv4@*, uuidv4@^6.0.7: version "6.0.7" resolved "https://registry.yarnpkg.com/uuidv4/-/uuidv4-6.0.7.tgz#15e920848e1afbbd97b4919bc50f4f2f2278f880" @@ -3097,28 +1847,12 @@ vary@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" -verror@1.10.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" - integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA= - dependencies: - assert-plus "^1.0.0" - core-util-is "1.0.2" - extsprintf "^1.2.0" - which@^1.2.9, which@^1.3.0: version "1.3.1" resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" dependencies: isexe "^2.0.0" -widest-line@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-2.0.1.tgz#7438764730ec7ef4381ce4df82fb98a53142a3fc" - integrity sha512-Ba5m9/Fa4Xt9eb2ELXt77JxVDV8w7qQrH0zS/TWSJdLyAwQjWoOzpzj5lwVftDz6n/EOu3tNACS84v509qwnJA== - dependencies: - string-width "^2.1.1" - word-wrap@~1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" @@ -3127,28 +1861,12 @@ wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" -write-file-atomic@^2.0.0: - version "2.4.3" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.4.3.tgz#1fd2e9ae1df3e75b8d8c367443c692d4ca81f481" - integrity sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ== - dependencies: - graceful-fs "^4.1.11" - imurmurhash "^0.1.4" - signal-exit "^3.0.2" - write@1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/write/-/write-1.0.3.tgz#0800e14523b923a387e415123c865616aae0f5c3" dependencies: mkdirp "^0.5.1" -ws@^5.1.1: - version "5.2.2" - resolved "https://registry.yarnpkg.com/ws/-/ws-5.2.2.tgz#dffef14866b8e8dc9133582514d1befaf96e980f" - integrity sha512-jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA== - dependencies: - async-limiter "~1.0.0" - ws@^7.1.2: version "7.2.3" resolved "https://registry.yarnpkg.com/ws/-/ws-7.2.3.tgz#a5411e1fb04d5ed0efee76d26d5c46d830c39b46" @@ -3159,11 +1877,6 @@ ws@~6.1.0: dependencies: async-limiter "~1.0.0" -xdg-basedir@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-3.0.0.tgz#496b2cc109eca8dbacfe2dc72b603c17c5870ad4" - integrity sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ= - xmlhttprequest-ssl@~1.5.4: version "1.5.5" resolved "https://registry.yarnpkg.com/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz#c2876b06168aadc40e57d97e81191ac8f4398b3e" @@ -3172,11 +1885,6 @@ xtend@^4.0.0: version "4.0.2" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" -yallist@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" - integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= - yeast@0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/yeast/-/yeast-0.1.2.tgz#008e06d8094320c372dbc2f8ed76a0ca6c8ac419" diff --git a/benchmark/README.md b/benchmark/README.md new file mode 100644 index 00000000..41454d4c --- /dev/null +++ b/benchmark/README.md @@ -0,0 +1,69 @@ +# Load testing + +Load testing is performed with Artillery. + +Install: + +```bash +cd benchmark +npm install +``` + +Running the tests (on one core): + +```bash +cd benchmark +npm run start +``` + +You can adapt the `socketio-load-test.yaml` file to increase/decrease load. + +Default settings are: + +```yaml + phases: + - duration: 20 + arrivalRate: 2 +``` + +which means: during 20 seconds, 2 users will be added every second (peaking at 40 simultaneous users). + +Important: don't go above 40 simultaneous users for Artillery, otherwise, it is Artillery that will fail to run the tests properly. +To know, simply run "top". The "node" process for Artillery should never reach 100%. + +Reports are generated in `artillery_output.html`. + +# Multicore tests + +You will want to test with Artillery running on multiple cores. + +You can use + +```bash +./artillery_multi_core.sh +``` + +This will trigger 4 Artillery instances in parallel. + +Beware, the report generated is generated for only one instance. + +# How to test, what to track? + +While testing, you can check: + +- CPU load of WorkAdventure API node process (it should not reach 100%) +- Get metrics at the end of the run: `http://api.workadventure.localhost/metrics` + In particular, look for: + ``` + # HELP nodejs_eventloop_lag_max_seconds The maximum recorded event loop delay. + # TYPE nodejs_eventloop_lag_max_seconds gauge + nodejs_eventloop_lag_max_seconds 23.991418879 + ``` + This is the maximum time it took Node to process an event (you need to restart node after each test to reset this counter) +- Generate a profiling using "node --prof" by switching the command in docker-compose.yaml: + ``` + #command: yarn dev + command: yarn run profile + ``` + Read https://nodejs.org/en/docs/guides/simple-profiling/ on how to generate a profile. + diff --git a/benchmark/artillery_multi_core.sh b/benchmark/artillery_multi_core.sh new file mode 100755 index 00000000..5eeb4d60 --- /dev/null +++ b/benchmark/artillery_multi_core.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +npm run start & +pid1=$! +npm run start:nooutput & +pid2=$! +npm run start:nooutput & +pid3=$! +npm run start:nooutput & +pid4=$! + +wait $pid1 +wait $pid2 +wait $pid3 +wait $pid4 + + diff --git a/benchmark/package.json b/benchmark/package.json new file mode 100644 index 00000000..59b182bc --- /dev/null +++ b/benchmark/package.json @@ -0,0 +1,27 @@ +{ + "name": "workadventure-artillery", + "version": "1.0.0", + "description": "Load testing for WorkAdventure", + "scripts": { + "start": "artillery run socketio-load-test.yaml -o artillery_output.json && artillery report --output artillery_output.html artillery_output.json", + "start:nooutput": "artillery run socketio-load-test.yaml" + }, + "contributors": [ + { + "name": "Grégoire Parant", + "email": "g.parant@thecodingmachine.com" + }, + { + "name": "David Négrier", + "email": "d.negrier@thecodingmachine.com" + }, + { + "name": "Arthmaël Poly", + "email": "a.poly@thecodingmachine.com" + } + ], + "license": "SEE LICENSE IN LICENSE.txt", + "dependencies": { + "artillery": "^1.6.1" + } +} diff --git a/back/socketio-load-test.yaml b/benchmark/socketio-load-test.yaml similarity index 76% rename from back/socketio-load-test.yaml rename to benchmark/socketio-load-test.yaml index dda4fded..2f9f689d 100644 --- a/back/socketio-load-test.yaml +++ b/benchmark/socketio-load-test.yaml @@ -5,21 +5,14 @@ config: query: token: "test" phases: - - duration: 10 - arrivalRate: 10 - - duration: 10 - arrivalRate: 10 + - duration: 20 + arrivalRate: 2 processor: "./socketioLoadTest.js" scenarios: - - name: "Connect and send a bunch of messages" + - name: "Connects and moves player for 20 seconds" weight: 90 engine: "socketio" flow: - #- loop: - #- emit: - # channel: "connection" - # data: "hello world!" - #- think: 5 - emit: channel: "set-player-details" data: @@ -45,6 +38,6 @@ scenarios: y: "{{ y }}" direction: 'down' moving: false - - think: 1 - count: 10 + - think: 0.2 + count: 100 - think: 10 diff --git a/back/socketioLoadTest.js b/benchmark/socketioLoadTest.js similarity index 54% rename from back/socketioLoadTest.js rename to benchmark/socketioLoadTest.js index ca7fc39d..907982b2 100644 --- a/back/socketioLoadTest.js +++ b/benchmark/socketioLoadTest.js @@ -1,7 +1,3 @@ -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ - 'use strict'; module.exports = { @@ -12,4 +8,4 @@ function setYRandom(context, events, done) { context.vars.x = (883 + Math.round(Math.random() * 300)); context.vars.y = (270 + Math.round(Math.random() * 300)); return done(); -} \ No newline at end of file +} diff --git a/docker-compose.yaml b/docker-compose.yaml index e731bbed..07aad692 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -45,11 +45,12 @@ services: back: image: thecodingmachine/nodejs:12 - command: yarn dev - #command: yarn run profile + #command: yarn dev + command: yarn run profile environment: STARTUP_COMMAND_1: yarn install SECRET_KEY: yourSecretKey + ALLOW_ARTILLERY: "true" volumes: - ./back:/usr/src/app labels: From f55fa76e86411be2bd609ec33cabb93377c6a29c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20N=C3=A9grier?= Date: Fri, 11 Sep 2020 10:01:45 +0200 Subject: [PATCH 131/313] Removing profiling mode --- docker-compose.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docker-compose.yaml b/docker-compose.yaml index 07aad692..472426e4 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -45,8 +45,8 @@ services: back: image: thecodingmachine/nodejs:12 - #command: yarn dev - command: yarn run profile + command: yarn dev + #command: yarn run profile environment: STARTUP_COMMAND_1: yarn install SECRET_KEY: yourSecretKey From 9b702c75e3f17b7a4f200eecc173150b7501cbed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20N=C3=A9grier?= Date: Tue, 15 Sep 2020 10:06:11 +0200 Subject: [PATCH 132/313] Adding batched messages + the notion of notifier / zones (not plugged in the system yet) --- back/src/Controller/IoSocketController.ts | 52 ++++- back/src/Model/PositionNotifier.ts | 106 ++++++++++ back/src/Model/UserInterface.ts | 4 +- back/src/Model/Websocket/ExSocketInterface.ts | 8 + back/src/Model/Websocket/UserMovesMessage.ts | 11 + back/src/Model/Websocket/ViewportMessage.ts | 10 + back/src/Model/World.ts | 4 +- back/src/Model/Zone.ts | 85 ++++++++ back/tests/PositionNotifierTest.ts | 193 ++++++++++++++++++ benchmark/socketio-load-test.yaml | 14 +- benchmark/socketioLoadTest.js | 8 +- front/src/Connection.ts | 37 +++- front/src/Phaser/Game/GameScene.ts | 8 +- 13 files changed, 518 insertions(+), 22 deletions(-) create mode 100644 back/src/Model/PositionNotifier.ts create mode 100644 back/src/Model/Websocket/UserMovesMessage.ts create mode 100644 back/src/Model/Websocket/ViewportMessage.ts create mode 100644 back/src/Model/Zone.ts create mode 100644 back/tests/PositionNotifierTest.ts diff --git a/back/src/Controller/IoSocketController.ts b/back/src/Controller/IoSocketController.ts index 34e0dbc8..228a0da8 100644 --- a/back/src/Controller/IoSocketController.ts +++ b/back/src/Controller/IoSocketController.ts @@ -6,8 +6,8 @@ import {ExSocketInterface} from "../Model/Websocket/ExSocketInterface"; //TODO f import Jwt, {JsonWebTokenError} from "jsonwebtoken"; import {SECRET_KEY, MINIMUM_DISTANCE, GROUP_RADIUS, ALLOW_ARTILLERY} from "../Enum/EnvironmentVariable"; //TODO fix import by "_Enum/..." import {World} from "../Model/World"; -import {Group} from "_Model/Group"; -import {UserInterface} from "_Model/UserInterface"; +import {Group} from "../Model/Group"; +import {UserInterface} from "../Model/UserInterface"; import {isSetPlayerDetailsMessage,} from "../Model/Websocket/SetPlayerDetailsMessage"; import {MessageUserJoined} from "../Model/Websocket/MessageUserJoined"; import {MessageUserMoved} from "../Model/Websocket/MessageUserMoved"; @@ -19,12 +19,13 @@ import {isPointInterface, PointInterface} from "../Model/Websocket/PointInterfac import {isWebRtcSignalMessageInterface} from "../Model/Websocket/WebRtcSignalMessage"; import {UserInGroupInterface} from "../Model/Websocket/UserInGroupInterface"; import {uuid} from 'uuidv4'; +import {isUserMovesInterface} from "../Model/Websocket/UserMovesMessage"; enum SockerIoEvent { CONNECTION = "connection", DISCONNECT = "disconnect", JOIN_ROOM = "join-room", // bi-directional - USER_POSITION = "user-position", // bi-directional + USER_POSITION = "user-position", // From client to server USER_MOVED = "user-moved", // From server to client USER_LEFT = "user-left", // From server to client WEBRTC_SIGNAL = "webrtc-signal", @@ -36,6 +37,20 @@ enum SockerIoEvent { GROUP_DELETE = "group-delete", SET_PLAYER_DETAILS = "set-player-details", SET_SILENT = "set_silent", // Set or unset the silent mode for this user. + SET_VIEWPORT = "set-viewport", + BATCH = "batch", +} + +function emitInBatch(socket: ExSocketInterface, event: string | symbol, payload: any): void { + socket.batchedMessages.push({ event, payload}); + + if (socket.batchTimeout === null) { + socket.batchTimeout = setTimeout(() => { + socket.emit(SockerIoEvent.BATCH, socket.batchedMessages); + socket.batchedMessages = []; + socket.batchTimeout = null; + }, 100); + } } export class IoSocketController { @@ -152,6 +167,11 @@ export class IoSocketController { ioConnection() { this.Io.on(SockerIoEvent.CONNECTION, (socket: Socket) => { const client : ExSocketInterface = socket as ExSocketInterface; + client.batchedMessages = []; + client.batchTimeout = null; + client.emitInBatch = (event: string | symbol, payload: any): void => { + emitInBatch(client, event, payload); + } this.sockets.set(client.userId, client); // Let's log server load when a user joins @@ -215,19 +235,20 @@ export class IoSocketController { } }); - socket.on(SockerIoEvent.USER_POSITION, (position: unknown): void => { - console.log(SockerIoEvent.USER_POSITION, position); + socket.on(SockerIoEvent.USER_POSITION, (userMovesMessage: unknown): void => { + console.log(SockerIoEvent.USER_POSITION, userMovesMessage); try { - if (!isPointInterface(position)) { + if (!isUserMovesInterface(userMovesMessage)) { socket.emit(SockerIoEvent.MESSAGE_ERROR, {message: 'Invalid USER_POSITION message.'}); - console.warn('Invalid USER_POSITION message received: ', position); + console.warn('Invalid USER_POSITION message received: ', userMovesMessage); return; } const Client = (socket as ExSocketInterface); // sending to all clients in room except sender - Client.position = position; + Client.position = userMovesMessage.position; + Client.viewport = userMovesMessage.viewport; // update position in the world const world = this.Worlds.get(Client.roomId); @@ -235,9 +256,20 @@ export class IoSocketController { console.error("Could not find world with id '", Client.roomId, "'"); return; } - world.updatePosition(Client, position); + world.updatePosition(Client, Client.position); - socket.to(Client.roomId).emit(SockerIoEvent.USER_MOVED, new MessageUserMoved(Client.userId, Client.position)); + const clientsInRoom = this.Io.sockets.adapter.rooms[Client.roomId]; + console.log('clientsInRoom', clientsInRoom); + for (const clientId in clientsInRoom.sockets) { + console.log('client: %s', clientId); + const targetSocket = this.Io.sockets.connected[clientId] as ExSocketInterface; + if (socket === targetSocket) { + continue; + } + //targetSocket.emit(SockerIoEvent.USER_MOVED, new MessageUserMoved(Client.userId, Client.position)); + targetSocket.emitInBatch(SockerIoEvent.USER_MOVED, new MessageUserMoved(Client.userId, Client.position)); + } + //socket.to(Client.roomId).emit(SockerIoEvent.USER_MOVED, new MessageUserMoved(Client.userId, Client.position)); } catch (e) { console.error('An error occurred on "user_position" event'); console.error(e); diff --git a/back/src/Model/PositionNotifier.ts b/back/src/Model/PositionNotifier.ts new file mode 100644 index 00000000..f5edf8d3 --- /dev/null +++ b/back/src/Model/PositionNotifier.ts @@ -0,0 +1,106 @@ +/** + * Tracks the position of every player on the map, and sends notifications to the players interested in knowing about the move + * (i.e. players that are looking at the zone the player is currently in) + * + * Internally, the PositionNotifier works with Zones. A zone is a square area of a map. + * Each player is in a given zone, and each player tracks one or many zones (depending on the player viewport) + * + * The PositionNotifier is important for performance. It allows us to send the position of players only to a restricted + * number of players around the current player. + */ +import {UserEntersCallback, UserLeavesCallback, UserMovesCallback, Zone} from "./Zone"; +import {PointInterface} from "_Model/Websocket/PointInterface"; +import {UserInterface} from "_Model/UserInterface"; +import {ViewportInterface} from "_Model/Websocket/ViewportMessage"; + +interface ZoneDescriptor { + i: number; + j: number; +} + +export class PositionNotifier { + + // TODO: we need a way to clean the zones if noone is in the zone and noone listening (to free memory!) + + private zones: Zone[][] = []; + + constructor(private zoneWidth: number, private zoneHeight: number, private onUserEnters: UserEntersCallback, private onUserMoves: UserMovesCallback, private onUserLeaves: UserLeavesCallback) { + } + + private getZoneDescriptorFromCoordinates(x: number, y: number): ZoneDescriptor { + return { + i: Math.floor(x / this.zoneWidth), + j: Math.floor(y / this.zoneHeight), + } + } + + public setViewport(user: UserInterface, viewport: ViewportInterface): void { + if (viewport.left > viewport.right || viewport.top > viewport.bottom) { + console.warn('Invalid viewport received: ', viewport); + return; + } + + const oldZones = user.listenedZones; + const newZones = new Set(); + + const topLeftDesc = this.getZoneDescriptorFromCoordinates(viewport.left, viewport.top); + const bottomRightDesc = this.getZoneDescriptorFromCoordinates(viewport.right, viewport.bottom); + + for (let j = topLeftDesc.j; j <= bottomRightDesc.j; j++) { + for (let i = topLeftDesc.i; i <= bottomRightDesc.i; i++) { + newZones.add(this.getZone(i, j)); + } + } + + const addedZones = [...newZones].filter(x => !oldZones.has(x)); + const removedZones = [...oldZones].filter(x => !newZones.has(x)); + + for (const zone of addedZones) { + zone.startListening(user); + } + for (const zone of removedZones) { + zone.stopListening(user); + } + } + + public updatePosition(user: UserInterface, userPosition: PointInterface): void { + // Did we change zone? + const oldZoneDesc = this.getZoneDescriptorFromCoordinates(user.position.x, user.position.y); + const newZoneDesc = this.getZoneDescriptorFromCoordinates(userPosition.x, userPosition.y); + + if (oldZoneDesc.i != newZoneDesc.i || oldZoneDesc.j != newZoneDesc.j) { + const oldZone = this.getZone(oldZoneDesc.i, oldZoneDesc.j); + const newZone = this.getZone(newZoneDesc.i, newZoneDesc.j); + + // Leave old zone + oldZone.leave(user, newZone); + + // Enter new zone + newZone.enter(user, oldZone, userPosition); + } else { + const zone = this.getZone(oldZoneDesc.i, oldZoneDesc.j); + zone.move(user, userPosition); + } + } + + public leave(user: UserInterface): void { + const oldZoneDesc = this.getZoneDescriptorFromCoordinates(user.position.x, user.position.y); + const oldZone = this.getZone(oldZoneDesc.i, oldZoneDesc.j); + oldZone.leave(user, null); + } + + private getZone(i: number, j: number): Zone { + let zoneRow = this.zones[j]; + if (zoneRow === undefined) { + zoneRow = new Array(); + this.zones[j] = zoneRow; + } + + let zone = this.zones[j][i]; + if (zone === undefined) { + zone = new Zone(this.onUserEnters, this.onUserMoves, this.onUserLeaves); + this.zones[j][i] = zone; + } + return zone; + } +} diff --git a/back/src/Model/UserInterface.ts b/back/src/Model/UserInterface.ts index 89994a31..d19ecd6f 100644 --- a/back/src/Model/UserInterface.ts +++ b/back/src/Model/UserInterface.ts @@ -1,9 +1,11 @@ import { Group } from "./Group"; import { PointInterface } from "./Websocket/PointInterface"; +import {Zone} from "_Model/Zone"; export interface UserInterface { id: string, group?: Group, position: PointInterface, - silent: boolean + silent: boolean, + listenedZones: Set } diff --git a/back/src/Model/Websocket/ExSocketInterface.ts b/back/src/Model/Websocket/ExSocketInterface.ts index 974fe63d..c5132eb7 100644 --- a/back/src/Model/Websocket/ExSocketInterface.ts +++ b/back/src/Model/Websocket/ExSocketInterface.ts @@ -2,6 +2,7 @@ import {Socket} from "socket.io"; import {PointInterface} from "./PointInterface"; import {Identificable} from "./Identificable"; import {TokenInterface} from "../../Controller/AuthenticateController"; +import {ViewportInterface} from "_Model/Websocket/ViewportMessage"; export interface ExSocketInterface extends Socket, Identificable { token: string; @@ -11,5 +12,12 @@ export interface ExSocketInterface extends Socket, Identificable { name: string; characterLayers: string[]; position: PointInterface; + viewport: ViewportInterface; isArtillery: boolean; // Whether this socket is opened by Artillery for load testing (hack) + /** + * Pushes an event that will be sent in the next batch of events + */ + emitInBatch: (event: string | symbol, payload: any) => void; + batchedMessages: Array<{ event: string | symbol, payload: any }>; + batchTimeout: NodeJS.Timeout|null; } diff --git a/back/src/Model/Websocket/UserMovesMessage.ts b/back/src/Model/Websocket/UserMovesMessage.ts new file mode 100644 index 00000000..2277d4c4 --- /dev/null +++ b/back/src/Model/Websocket/UserMovesMessage.ts @@ -0,0 +1,11 @@ +import * as tg from "generic-type-guard"; +import {isPointInterface} from "./PointInterface"; +import {isViewport} from "./ViewportMessage"; + + +export const isUserMovesInterface = + new tg.IsInterface().withProperties({ + position: isPointInterface, + viewport: isViewport, + }).get(); +export type UserMovesInterface = tg.GuardedType; diff --git a/back/src/Model/Websocket/ViewportMessage.ts b/back/src/Model/Websocket/ViewportMessage.ts new file mode 100644 index 00000000..62e2fc81 --- /dev/null +++ b/back/src/Model/Websocket/ViewportMessage.ts @@ -0,0 +1,10 @@ +import * as tg from "generic-type-guard"; + +export const isViewport = + new tg.IsInterface().withProperties({ + left: tg.isNumber, + top: tg.isNumber, + right: tg.isNumber, + bottom: tg.isNumber, + }).get(); +export type ViewportInterface = tg.GuardedType; diff --git a/back/src/Model/World.ts b/back/src/Model/World.ts index 8855702e..0f2cb050 100644 --- a/back/src/Model/World.ts +++ b/back/src/Model/World.ts @@ -6,6 +6,7 @@ import {UserInterface} from "./UserInterface"; import {ExSocketInterface} from "_Model/Websocket/ExSocketInterface"; import {PositionInterface} from "_Model/PositionInterface"; import {Identificable} from "_Model/Websocket/Identificable"; +import {Zone} from "_Model/Zone"; export type ConnectCallback = (user: string, group: Group) => void; export type DisconnectCallback = (user: string, group: Group) => void; @@ -56,7 +57,8 @@ export class World { this.users.set(socket.userId, { id: socket.userId, position: userPosition, - silent: false // FIXME: silent should be set at the correct value when joining a room. + silent: false, // FIXME: silent should be set at the correct value when joining a room. + listenedZones: new Set() }); // Let's call update position to trigger the join / leave room this.updatePosition(socket, userPosition); diff --git a/back/src/Model/Zone.ts b/back/src/Model/Zone.ts new file mode 100644 index 00000000..45d6cdd2 --- /dev/null +++ b/back/src/Model/Zone.ts @@ -0,0 +1,85 @@ +import {UserInterface} from "./UserInterface"; +import {PointInterface} from "_Model/Websocket/PointInterface"; +import {PositionInterface} from "_Model/PositionInterface"; + +export type UserEntersCallback = (user: UserInterface) => void; +export type UserMovesCallback = (user: UserInterface, position: PointInterface) => void; +export type UserLeavesCallback = (user: UserInterface) => void; + +export class Zone { + private players: Set = new Set(); + private listeners: Set = new Set(); + + constructor(private onUserEnters: UserEntersCallback, private onUserMoves: UserMovesCallback, private onUserLeaves: UserLeavesCallback) { + } + + /** + * A user leaves the zone + */ + public leave(user: UserInterface, newZone: Zone|null) { + this.players.delete(user); + this.notifyUserLeft(user, newZone); + } + + /** + * Notify listeners of this zone that this user left + */ + private notifyUserLeft(user: UserInterface, newZone: Zone|null) { + for (const listener of this.listeners) { + if (listener !== user && (newZone === null || !listener.listenedZones.has(newZone))) { + this.onUserLeaves(user); + } + } + } + + public enter(user: UserInterface, oldZone: Zone|null, position: PointInterface) { + this.players.add(user); + this.notifyUserEnter(user, oldZone, position); + } + + /** + * Notify listeners of this zone that this user entered + */ + private notifyUserEnter(user: UserInterface, oldZone: Zone|null, position: PointInterface) { + for (const listener of this.listeners) { + if (listener === user) { + continue; + } + if (oldZone === null || !listener.listenedZones.has(oldZone)) { + this.onUserEnters(user); + } else { + this.onUserMoves(user, position); + } + } + } + + public move(user: UserInterface, position: PointInterface) { + for (const listener of this.listeners) { + if (listener !== user) { + this.onUserMoves(user,position); + } + } + } + + public startListening(user: UserInterface): void { + for (const player of this.players) { + if (player !== user) { + this.onUserEnters(user); + } + } + + this.listeners.add(user); + user.listenedZones.add(this); + } + + public stopListening(user: UserInterface): void { + for (const player of this.players) { + if (player !== user) { + this.onUserLeaves(user); + } + } + + this.listeners.delete(user); + user.listenedZones.delete(this); + } +} diff --git a/back/tests/PositionNotifierTest.ts b/back/tests/PositionNotifierTest.ts new file mode 100644 index 00000000..833852b0 --- /dev/null +++ b/back/tests/PositionNotifierTest.ts @@ -0,0 +1,193 @@ +import "jasmine"; +import {World, ConnectCallback, DisconnectCallback } from "../src/Model/World"; +import {Point} from "../src/Model/Websocket/MessageUserPosition"; +import { Group } from "../src/Model/Group"; +import {PositionNotifier} from "../src/Model/PositionNotifier"; +import {UserInterface} from "../src/Model/UserInterface"; +import {PointInterface} from "../src/Model/Websocket/PointInterface"; +import {Zone} from "_Model/Zone"; + +function move(user: UserInterface, x: number, y: number, positionNotifier: PositionNotifier): void { + positionNotifier.updatePosition(user, { + x, + y, + moving: false, + direction: 'down' + }); + user.position.x = x; + user.position.y = y; +} + +describe("PositionNotifier", () => { + it("should receive notifications when player moves", () => { + let enterTriggered = false; + let moveTriggered = false; + let leaveTriggered = false; + + const positionNotifier = new PositionNotifier(300, 300, (user: UserInterface) => { + enterTriggered = true; + }, (user: UserInterface, position: PointInterface) => { + moveTriggered = true; + }, (user: UserInterface) => { + leaveTriggered = true; + }); + + let user1 = { + id: "1", + position: { + x: 500, + y: 500, + moving: false, + direction: 'down' + }, + listenedZones: new Set(), + } as UserInterface; + + let user2 = { + id: "2", + position: { + x: -9999, + y: -9999, + moving: false, + direction: 'down' + }, + listenedZones: new Set(), + } as UserInterface; + + positionNotifier.setViewport(user1, { + left: 200, + right: 600, + top: 100, + bottom: 500 + }); + + move(user2, 500, 500, positionNotifier); + + expect(enterTriggered).toBe(true); + expect(moveTriggered).toBe(false); + enterTriggered = false; + + // Move inside the zone + move(user2, 501, 500, positionNotifier); + + expect(enterTriggered).toBe(false); + expect(moveTriggered).toBe(true); + moveTriggered = false; + + // Move out of the zone in a zone that we don't track + move(user2, 901, 500, positionNotifier); + + expect(enterTriggered).toBe(false); + expect(moveTriggered).toBe(false); + expect(leaveTriggered).toBe(true); + leaveTriggered = false; + + // Move back in + move(user2, 500, 500, positionNotifier); + expect(enterTriggered).toBe(true); + expect(moveTriggered).toBe(false); + expect(leaveTriggered).toBe(false); + enterTriggered = false; + + // Move out of the zone in a zone that we do track + move(user2, 200, 500, positionNotifier); + expect(enterTriggered).toBe(false); + expect(moveTriggered).toBe(true); + expect(leaveTriggered).toBe(false); + moveTriggered = false; + + // Leave the room + positionNotifier.leave(user2); + expect(enterTriggered).toBe(false); + expect(moveTriggered).toBe(false); + expect(leaveTriggered).toBe(true); + leaveTriggered = false; + }); + + it("should receive notifications when camera moves", () => { + let enterTriggered = false; + let moveTriggered = false; + let leaveTriggered = false; + + const positionNotifier = new PositionNotifier(300, 300, (user: UserInterface) => { + enterTriggered = true; + }, (user: UserInterface, position: PointInterface) => { + moveTriggered = true; + }, (user: UserInterface) => { + leaveTriggered = true; + }); + + let user1 = { + id: "1", + position: { + x: 500, + y: 500, + moving: false, + direction: 'down' + }, + listenedZones: new Set(), + } as UserInterface; + + let user2 = { + id: "2", + position: { + x: -9999, + y: -9999, + moving: false, + direction: 'down' + }, + listenedZones: new Set(), + } as UserInterface; + + positionNotifier.setViewport(user1, { + left: 200, + right: 600, + top: 100, + bottom: 500 + }); + + move(user2, 500, 500, positionNotifier); + + expect(enterTriggered).toBe(true); + expect(moveTriggered).toBe(false); + enterTriggered = false; + + // Move the viewport but the user stays inside. + positionNotifier.setViewport(user1, { + left: 201, + right: 601, + top: 100, + bottom: 500 + }); + + expect(enterTriggered).toBe(false); + expect(moveTriggered).toBe(false); + expect(leaveTriggered).toBe(false); + + // Move the viewport out of the user. + positionNotifier.setViewport(user1, { + left: 901, + right: 1001, + top: 100, + bottom: 500 + }); + + expect(enterTriggered).toBe(false); + expect(moveTriggered).toBe(false); + expect(leaveTriggered).toBe(true); + leaveTriggered = false; + + // Move the viewport back on the user. + positionNotifier.setViewport(user1, { + left: 200, + right: 600, + top: 100, + bottom: 500 + }); + + expect(enterTriggered).toBe(true); + expect(moveTriggered).toBe(false); + expect(leaveTriggered).toBe(false); + enterTriggered = false; + }); +}) diff --git a/benchmark/socketio-load-test.yaml b/benchmark/socketio-load-test.yaml index 2f9f689d..e84b0402 100644 --- a/benchmark/socketio-load-test.yaml +++ b/benchmark/socketio-load-test.yaml @@ -34,10 +34,16 @@ scenarios: - emit: channel: "user-position" data: - x: "{{ x }}" - y: "{{ y }}" - direction: 'down' - moving: false + position: + x: "{{ x }}" + y: "{{ y }}" + direction: 'down' + moving: false + viewport: + left: "{{ left }}" + top: "{{ top }}" + right: "{{ right }}" + bottom: "{{ bottom }}" - think: 0.2 count: 100 - think: 10 diff --git a/benchmark/socketioLoadTest.js b/benchmark/socketioLoadTest.js index 907982b2..540cd8bd 100644 --- a/benchmark/socketioLoadTest.js +++ b/benchmark/socketioLoadTest.js @@ -5,7 +5,11 @@ module.exports = { }; function setYRandom(context, events, done) { - context.vars.x = (883 + Math.round(Math.random() * 300)); - context.vars.y = (270 + Math.round(Math.random() * 300)); + context.vars.x = (0 + Math.round(Math.random() * 1472)); + context.vars.y = (0 + Math.round(Math.random() * 1090)); + context.vars.left = context.vars.x - 320; + context.vars.top = context.vars.y - 200; + context.vars.right = context.vars.x + 320; + context.vars.bottom = context.vars.y + 200; return done(); } diff --git a/front/src/Connection.ts b/front/src/Connection.ts index 4a184c52..fd06329d 100644 --- a/front/src/Connection.ts +++ b/front/src/Connection.ts @@ -14,7 +14,7 @@ enum EventMessage{ WEBRTC_SCREEN_SHARING_SIGNAL = "webrtc-screen-sharing-signal", WEBRTC_START = "webrtc-start", JOIN_ROOM = "join-room", // bi-directional - USER_POSITION = "user-position", // bi-directional + USER_POSITION = "user-position", // From client to server USER_MOVED = "user-moved", // From server to client USER_LEFT = "user-left", // From server to client MESSAGE_ERROR = "message-error", @@ -25,6 +25,8 @@ enum EventMessage{ CONNECT_ERROR = "connect_error", SET_SILENT = "set_silent", // Set or unset the silent mode for this user. + SET_VIEWPORT = "set-viewport", + BATCH = "batch", } export interface PointInterface { @@ -95,6 +97,23 @@ export interface StartMapInterface { startInstance: string } +export interface ViewportInterface { + left: number, + top: number, + right: number, + bottom: number, +} + +export interface UserMovesInterface { + position: PositionInterface, + viewport: ViewportInterface, +} + +export interface BatchedMessageInterface { + event: string, + payload: any +} + export class Connection implements Connection { private readonly socket: Socket; private userId: string|null = null; @@ -111,6 +130,18 @@ export class Connection implements Connection { this.socket.on(EventMessage.MESSAGE_ERROR, (message: string) => { console.error(EventMessage.MESSAGE_ERROR, message); }) + + /** + * Messages inside batched messages are extracted and sent to listeners directly. + */ + this.socket.on(EventMessage.BATCH, (batchedMessages: BatchedMessageInterface[]) => { + for (const message of batchedMessages) { + const listeners = this.socket.listeners(message.event); + for (const listener of listeners) { + listener(message.payload); + } + } + }) } public static createConnection(name: string, characterLayersSelected: string[]): Promise { @@ -160,12 +191,12 @@ export class Connection implements Connection { return promise; } - public sharePosition(x : number, y : number, direction : string, moving: boolean) : void{ + public sharePosition(x : number, y : number, direction : string, moving: boolean, viewport: ViewportInterface) : void{ if(!this.socket){ return; } const point = new Point(x, y, direction, moving); - this.socket.emit(EventMessage.USER_POSITION, point); + this.socket.emit(EventMessage.USER_POSITION, { position: point, viewport } as UserMovesInterface); } public setSilent(silent: boolean): void { diff --git a/front/src/Phaser/Game/GameScene.ts b/front/src/Phaser/Game/GameScene.ts index 8a5630dc..595fc9d3 100644 --- a/front/src/Phaser/Game/GameScene.ts +++ b/front/src/Phaser/Game/GameScene.ts @@ -677,7 +677,13 @@ export class GameScene extends Phaser.Scene implements CenterListener { private doPushPlayerPosition(event: HasMovedEvent): void { this.lastMoveEventSent = event; this.lastSentTick = this.currentTick; - this.connection.sharePosition(event.x, event.y, event.direction, event.moving); + const camera = this.cameras.main; + this.connection.sharePosition(event.x, event.y, event.direction, event.moving, { + left: camera.scrollX, + top: camera.scrollY, + right: camera.scrollX + camera.width, + bottom: camera.scrollY + camera.height, + }); } EventToClickOnTile(){ From f8d462b0d7231bc244b95b87983103e9d512b31d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20N=C3=A9grier?= Date: Tue, 15 Sep 2020 10:10:35 +0200 Subject: [PATCH 133/313] Fixing "any" type --- back/src/Controller/IoSocketController.ts | 4 ++-- back/src/Model/Websocket/ExSocketInterface.ts | 4 ++-- back/tests/PositionNotifierTest.ts | 8 ++++---- front/src/Connection.ts | 2 +- 4 files changed, 9 insertions(+), 9 deletions(-) diff --git a/back/src/Controller/IoSocketController.ts b/back/src/Controller/IoSocketController.ts index 228a0da8..e18a5beb 100644 --- a/back/src/Controller/IoSocketController.ts +++ b/back/src/Controller/IoSocketController.ts @@ -41,7 +41,7 @@ enum SockerIoEvent { BATCH = "batch", } -function emitInBatch(socket: ExSocketInterface, event: string | symbol, payload: any): void { +function emitInBatch(socket: ExSocketInterface, event: string | symbol, payload: unknown): void { socket.batchedMessages.push({ event, payload}); if (socket.batchTimeout === null) { @@ -169,7 +169,7 @@ export class IoSocketController { const client : ExSocketInterface = socket as ExSocketInterface; client.batchedMessages = []; client.batchTimeout = null; - client.emitInBatch = (event: string | symbol, payload: any): void => { + client.emitInBatch = (event: string | symbol, payload: unknown): void => { emitInBatch(client, event, payload); } this.sockets.set(client.userId, client); diff --git a/back/src/Model/Websocket/ExSocketInterface.ts b/back/src/Model/Websocket/ExSocketInterface.ts index c5132eb7..bbe18cbb 100644 --- a/back/src/Model/Websocket/ExSocketInterface.ts +++ b/back/src/Model/Websocket/ExSocketInterface.ts @@ -17,7 +17,7 @@ export interface ExSocketInterface extends Socket, Identificable { /** * Pushes an event that will be sent in the next batch of events */ - emitInBatch: (event: string | symbol, payload: any) => void; - batchedMessages: Array<{ event: string | symbol, payload: any }>; + emitInBatch: (event: string | symbol, payload: unknown) => void; + batchedMessages: Array<{ event: string | symbol, payload: unknown }>; batchTimeout: NodeJS.Timeout|null; } diff --git a/back/tests/PositionNotifierTest.ts b/back/tests/PositionNotifierTest.ts index 833852b0..ac82878b 100644 --- a/back/tests/PositionNotifierTest.ts +++ b/back/tests/PositionNotifierTest.ts @@ -32,7 +32,7 @@ describe("PositionNotifier", () => { leaveTriggered = true; }); - let user1 = { + const user1 = { id: "1", position: { x: 500, @@ -43,7 +43,7 @@ describe("PositionNotifier", () => { listenedZones: new Set(), } as UserInterface; - let user2 = { + const user2 = { id: "2", position: { x: -9999, @@ -117,7 +117,7 @@ describe("PositionNotifier", () => { leaveTriggered = true; }); - let user1 = { + const user1 = { id: "1", position: { x: 500, @@ -128,7 +128,7 @@ describe("PositionNotifier", () => { listenedZones: new Set(), } as UserInterface; - let user2 = { + const user2 = { id: "2", position: { x: -9999, diff --git a/front/src/Connection.ts b/front/src/Connection.ts index fd06329d..c04e5b4f 100644 --- a/front/src/Connection.ts +++ b/front/src/Connection.ts @@ -111,7 +111,7 @@ export interface UserMovesInterface { export interface BatchedMessageInterface { event: string, - payload: any + payload: unknown } export class Connection implements Connection { From d24ec0bd75d7930ed698137391357a94d49b3d55 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20N=C3=A9grier?= Date: Tue, 15 Sep 2020 16:21:41 +0200 Subject: [PATCH 134/313] Plugin PositionNotifier into the main application. --- back/src/Controller/IoSocketController.ts | 74 ++++++++++++++------- back/src/Model/PositionNotifier.ts | 18 ++++- back/src/Model/Websocket/JoinRoomMessage.ts | 2 + back/src/Model/World.ts | 27 +++++++- back/src/Model/Zone.ts | 45 ++++++++----- back/tests/PositionNotifierTest.ts | 7 +- back/tests/WorldTest.ts | 6 +- back/tsconfig.json | 2 +- front/src/Connection.ts | 16 +++-- front/src/Phaser/Game/GameScene.ts | 35 ++++++++-- 10 files changed, 170 insertions(+), 62 deletions(-) diff --git a/back/src/Controller/IoSocketController.ts b/back/src/Controller/IoSocketController.ts index e18a5beb..878c6c75 100644 --- a/back/src/Controller/IoSocketController.ts +++ b/back/src/Controller/IoSocketController.ts @@ -20,6 +20,7 @@ import {isWebRtcSignalMessageInterface} from "../Model/Websocket/WebRtcSignalMes import {UserInGroupInterface} from "../Model/Websocket/UserInGroupInterface"; import {uuid} from 'uuidv4'; import {isUserMovesInterface} from "../Model/Websocket/UserMovesMessage"; +import {isViewport} from "../Model/Websocket/ViewportMessage"; enum SockerIoEvent { CONNECTION = "connection", @@ -212,22 +213,16 @@ export class IoSocketController { //join new previous room const world = this.joinRoom(Client, roomId, message.position); - //add function to refresh position user in real time. - //this.refreshUserPosition(Client); - - const messageUserJoined = new MessageUserJoined(Client.userId, Client.name, Client.characterLayers, Client.position); - - socket.to(roomId).emit(SockerIoEvent.JOIN_ROOM, messageUserJoined); - - // The answer shall contain the list of all users of the room with their positions: - const listOfUsers = Array.from(world.getUsers(), ([key, user]) => { + const users = world.setViewport(Client, message.viewport); + const listOfUsers = users.map((user: UserInterface) => { const player: ExSocketInterface|undefined = this.sockets.get(user.id); if (player === undefined) { console.warn('Something went wrong. The World contains a user "'+user.id+"' but this user does not exist in the sockets list!"); return null; } return new MessageUserPosition(user.id, player.name, player.characterLayers, player.position); - }).filter((item: MessageUserPosition|null) => item !== null); + }, users); + answerFn(listOfUsers); } catch (e) { console.error('An error occurred on "join_room" event'); @@ -235,6 +230,30 @@ export class IoSocketController { } }); + socket.on(SockerIoEvent.SET_VIEWPORT, (message: unknown): void => { + try { + //console.log('SET_VIEWPORT') + if (!isViewport(message)) { + socket.emit(SockerIoEvent.MESSAGE_ERROR, {message: 'Invalid SET_VIEWPORT message.'}); + console.warn('Invalid SET_VIEWPORT message received: ', message); + return; + } + + const Client = (socket as ExSocketInterface); + Client.viewport = message; + + const world = this.Worlds.get(Client.roomId); + if (!world) { + console.error("Could not find world with id '", Client.roomId, "'"); + return; + } + world.setViewport(Client, Client.viewport); + } catch (e) { + console.error('An error occurred on "SET_VIEWPORT" event'); + console.error(e); + } + }); + socket.on(SockerIoEvent.USER_POSITION, (userMovesMessage: unknown): void => { console.log(SockerIoEvent.USER_POSITION, userMovesMessage); try { @@ -257,19 +276,7 @@ export class IoSocketController { return; } world.updatePosition(Client, Client.position); - - const clientsInRoom = this.Io.sockets.adapter.rooms[Client.roomId]; - console.log('clientsInRoom', clientsInRoom); - for (const clientId in clientsInRoom.sockets) { - console.log('client: %s', clientId); - const targetSocket = this.Io.sockets.connected[clientId] as ExSocketInterface; - if (socket === targetSocket) { - continue; - } - //targetSocket.emit(SockerIoEvent.USER_MOVED, new MessageUserMoved(Client.userId, Client.position)); - targetSocket.emitInBatch(SockerIoEvent.USER_MOVED, new MessageUserMoved(Client.userId, Client.position)); - } - //socket.to(Client.roomId).emit(SockerIoEvent.USER_MOVED, new MessageUserMoved(Client.userId, Client.position)); + world.setViewport(Client, Client.viewport); } catch (e) { console.error('An error occurred on "user_position" event'); console.error(e); @@ -404,8 +411,6 @@ export class IoSocketController { // leave previous room and world if(Client.roomId){ try { - Client.to(Client.roomId).emit(SockerIoEvent.USER_LEFT, Client.userId); - //user leave previous world const world: World | undefined = this.Worlds.get(Client.roomId); if (world) { @@ -441,6 +446,25 @@ export class IoSocketController { this.sendUpdateGroupEvent(group); }, (groupUuid: string, lastUser: UserInterface) => { this.sendDeleteGroupEvent(groupUuid, lastUser); + }, (user, listener) => { + const clientUser = this.searchClientByIdOrFail(user.id); + const clientListener = this.searchClientByIdOrFail(listener.id); + const messageUserJoined = new MessageUserJoined(clientUser.userId, clientUser.name, clientUser.characterLayers, clientUser.position); + + clientListener.emit(SockerIoEvent.JOIN_ROOM, messageUserJoined); + //console.log("Sending JOIN_ROOM event"); + }, (user, position, listener) => { + const clientUser = this.searchClientByIdOrFail(user.id); + const clientListener = this.searchClientByIdOrFail(listener.id); + + clientListener.emitInBatch(SockerIoEvent.USER_MOVED, new MessageUserMoved(clientUser.userId, clientUser.position)); + //console.log("Sending USER_MOVED event"); + }, (user, listener) => { + const clientUser = this.searchClientByIdOrFail(user.id); + const clientListener = this.searchClientByIdOrFail(listener.id); + + clientListener.emit(SockerIoEvent.USER_LEFT, clientUser.userId); + //console.log("Sending USER_LEFT event"); }); this.Worlds.set(roomId, world); } diff --git a/back/src/Model/PositionNotifier.ts b/back/src/Model/PositionNotifier.ts index f5edf8d3..9d6975e3 100644 --- a/back/src/Model/PositionNotifier.ts +++ b/back/src/Model/PositionNotifier.ts @@ -34,10 +34,14 @@ export class PositionNotifier { } } - public setViewport(user: UserInterface, viewport: ViewportInterface): void { + /** + * Sets the viewport coordinates. + * Returns the list of new users to add + */ + public setViewport(user: UserInterface, viewport: ViewportInterface): UserInterface[] { if (viewport.left > viewport.right || viewport.top > viewport.bottom) { console.warn('Invalid viewport received: ', viewport); - return; + return []; } const oldZones = user.listenedZones; @@ -55,12 +59,17 @@ export class PositionNotifier { const addedZones = [...newZones].filter(x => !oldZones.has(x)); const removedZones = [...oldZones].filter(x => !newZones.has(x)); + + let users: UserInterface[] = []; for (const zone of addedZones) { zone.startListening(user); + users = users.concat(Array.from(zone.getPlayers())) } for (const zone of removedZones) { zone.stopListening(user); } + + return users; } public updatePosition(user: UserInterface, userPosition: PointInterface): void { @@ -87,6 +96,11 @@ export class PositionNotifier { const oldZoneDesc = this.getZoneDescriptorFromCoordinates(user.position.x, user.position.y); const oldZone = this.getZone(oldZoneDesc.i, oldZoneDesc.j); oldZone.leave(user, null); + + // Also, let's stop listening on viewports + for (const zone of user.listenedZones) { + zone.stopListening(user); + } } private getZone(i: number, j: number): Zone { diff --git a/back/src/Model/Websocket/JoinRoomMessage.ts b/back/src/Model/Websocket/JoinRoomMessage.ts index 16613488..2036a441 100644 --- a/back/src/Model/Websocket/JoinRoomMessage.ts +++ b/back/src/Model/Websocket/JoinRoomMessage.ts @@ -1,9 +1,11 @@ import * as tg from "generic-type-guard"; import {isPointInterface} from "./PointInterface"; +import {isViewport} from "./ViewportMessage"; export const isJoinRoomMessageInterface = new tg.IsInterface().withProperties({ roomId: tg.isString, position: isPointInterface, + viewport: isViewport }).get(); export type JoinRoomMessageInterface = tg.GuardedType; diff --git a/back/src/Model/World.ts b/back/src/Model/World.ts index 0f2cb050..4422e95f 100644 --- a/back/src/Model/World.ts +++ b/back/src/Model/World.ts @@ -6,7 +6,9 @@ import {UserInterface} from "./UserInterface"; import {ExSocketInterface} from "_Model/Websocket/ExSocketInterface"; import {PositionInterface} from "_Model/PositionInterface"; import {Identificable} from "_Model/Websocket/Identificable"; -import {Zone} from "_Model/Zone"; +import {UserEntersCallback, UserLeavesCallback, UserMovesCallback, Zone} from "_Model/Zone"; +import {PositionNotifier} from "./PositionNotifier"; +import {ViewportInterface} from "_Model/Websocket/ViewportMessage"; export type ConnectCallback = (user: string, group: Group) => void; export type DisconnectCallback = (user: string, group: Group) => void; @@ -28,12 +30,17 @@ export class World { private readonly groupUpdatedCallback: GroupUpdatedCallback; private readonly groupDeletedCallback: GroupDeletedCallback; + private readonly positionNotifier: PositionNotifier; + constructor(connectCallback: ConnectCallback, disconnectCallback: DisconnectCallback, minDistance: number, groupRadius: number, groupUpdatedCallback: GroupUpdatedCallback, - groupDeletedCallback: GroupDeletedCallback) + groupDeletedCallback: GroupDeletedCallback, + onUserEnters: UserEntersCallback, + onUserMoves: UserMovesCallback, + onUserLeaves: UserLeavesCallback) { this.users = new Map(); this.groups = new Set(); @@ -43,6 +50,8 @@ export class World { this.groupRadius = groupRadius; this.groupUpdatedCallback = groupUpdatedCallback; this.groupDeletedCallback = groupDeletedCallback; + // A zone is 10 sprites wide. + this.positionNotifier = new PositionNotifier(320, 320, onUserEnters, onUserMoves, onUserLeaves); } public getGroups(): Group[] { @@ -73,6 +82,10 @@ export class World { this.leaveGroup(userObj); } this.users.delete(user.userId); + + if (userObj !== undefined) { + this.positionNotifier.leave(userObj); + } } public isEmpty(): boolean { @@ -85,6 +98,8 @@ export class World { return; } + this.positionNotifier.updatePosition(user, userPosition); + user.position = userPosition; if (user.silent) { @@ -318,4 +333,12 @@ export class World { } return 0; }*/ + setViewport(socket : Identificable, viewport: ViewportInterface): UserInterface[] { + const user = this.users.get(socket.userId); + if(typeof user === 'undefined') { + console.warn('In setViewport, could not find user with ID "'+socket.userId+'" in world.'); + return []; + } + return this.positionNotifier.setViewport(user, viewport); + } } diff --git a/back/src/Model/Zone.ts b/back/src/Model/Zone.ts index 45d6cdd2..bd748b0f 100644 --- a/back/src/Model/Zone.ts +++ b/back/src/Model/Zone.ts @@ -2,9 +2,9 @@ import {UserInterface} from "./UserInterface"; import {PointInterface} from "_Model/Websocket/PointInterface"; import {PositionInterface} from "_Model/PositionInterface"; -export type UserEntersCallback = (user: UserInterface) => void; -export type UserMovesCallback = (user: UserInterface, position: PointInterface) => void; -export type UserLeavesCallback = (user: UserInterface) => void; +export type UserEntersCallback = (user: UserInterface, listener: UserInterface) => void; +export type UserMovesCallback = (user: UserInterface, position: PointInterface, listener: UserInterface) => void; +export type UserLeavesCallback = (user: UserInterface, listener: UserInterface) => void; export class Zone { private players: Set = new Set(); @@ -27,7 +27,7 @@ export class Zone { private notifyUserLeft(user: UserInterface, newZone: Zone|null) { for (const listener of this.listeners) { if (listener !== user && (newZone === null || !listener.listenedZones.has(newZone))) { - this.onUserLeaves(user); + this.onUserLeaves(user, listener); } } } @@ -46,40 +46,51 @@ export class Zone { continue; } if (oldZone === null || !listener.listenedZones.has(oldZone)) { - this.onUserEnters(user); + this.onUserEnters(user, listener); } else { - this.onUserMoves(user, position); + this.onUserMoves(user, position, listener); } } } public move(user: UserInterface, position: PointInterface) { + if (!this.players.has(user)) { + this.players.add(user); + const foo = this.players; + this.notifyUserEnter(user, null, position); + return; + } + for (const listener of this.listeners) { if (listener !== user) { - this.onUserMoves(user,position); + this.onUserMoves(user,position, listener); } } } - public startListening(user: UserInterface): void { + public startListening(listener: UserInterface): void { for (const player of this.players) { - if (player !== user) { - this.onUserEnters(user); + if (player !== listener) { + this.onUserEnters(player, listener); } } - this.listeners.add(user); - user.listenedZones.add(this); + this.listeners.add(listener); + listener.listenedZones.add(this); } - public stopListening(user: UserInterface): void { + public stopListening(listener: UserInterface): void { for (const player of this.players) { - if (player !== user) { - this.onUserLeaves(user); + if (player !== listener) { + this.onUserLeaves(player, listener); } } - this.listeners.delete(user); - user.listenedZones.delete(this); + this.listeners.delete(listener); + listener.listenedZones.delete(this); + } + + public getPlayers(): Set { + return this.players; } } diff --git a/back/tests/PositionNotifierTest.ts b/back/tests/PositionNotifierTest.ts index ac82878b..0b8b466f 100644 --- a/back/tests/PositionNotifierTest.ts +++ b/back/tests/PositionNotifierTest.ts @@ -139,13 +139,15 @@ describe("PositionNotifier", () => { listenedZones: new Set(), } as UserInterface; - positionNotifier.setViewport(user1, { + let newUsers = positionNotifier.setViewport(user1, { left: 200, right: 600, top: 100, bottom: 500 }); + expect(newUsers.length).toBe(0); + move(user2, 500, 500, positionNotifier); expect(enterTriggered).toBe(true); @@ -178,7 +180,7 @@ describe("PositionNotifier", () => { leaveTriggered = false; // Move the viewport back on the user. - positionNotifier.setViewport(user1, { + newUsers = positionNotifier.setViewport(user1, { left: 200, right: 600, top: 100, @@ -189,5 +191,6 @@ describe("PositionNotifier", () => { expect(moveTriggered).toBe(false); expect(leaveTriggered).toBe(false); enterTriggered = false; + expect(newUsers.length).toBe(1); }); }) diff --git a/back/tests/WorldTest.ts b/back/tests/WorldTest.ts index c436eed7..580677c7 100644 --- a/back/tests/WorldTest.ts +++ b/back/tests/WorldTest.ts @@ -13,7 +13,7 @@ describe("World", () => { } - const world = new World(connect, disconnect, 160, 160, () => {}, () => {}); + const world = new World(connect, disconnect, 160, 160, () => {}, () => {}, () => {}, () => {}, () => {}); world.join({ userId: "foo" }, new Point(100, 100)); @@ -40,7 +40,7 @@ describe("World", () => { } - const world = new World(connect, disconnect, 160, 160, () => {}, () => {}); + const world = new World(connect, disconnect, 160, 160, () => {}, () => {}, () => {}, () => {}, () => {}); world.join({ userId: "foo" }, new Point(100, 100)); @@ -69,7 +69,7 @@ describe("World", () => { disconnectCallNumber++; } - const world = new World(connect, disconnect, 160, 160, () => {}, () => {}); + const world = new World(connect, disconnect, 160, 160, () => {}, () => {}, () => {}, () => {}, () => {}); world.join({ userId: "foo" }, new Point(100, 100)); diff --git a/back/tsconfig.json b/back/tsconfig.json index 397bb8a2..de6314a3 100644 --- a/back/tsconfig.json +++ b/back/tsconfig.json @@ -12,7 +12,7 @@ // "jsx": "preserve", /* Specify JSX code generation: 'preserve', 'react-native', or 'react'. */ // "declaration": true, /* Generates corresponding '.d.ts' file. */ // "declarationMap": true, /* Generates a sourcemap for each corresponding '.d.ts' file. */ - // "sourceMap": true, /* Generates corresponding '.map' file. */ + "sourceMap": true, /* Generates corresponding '.map' file. */ // "outFile": "./", /* Concatenate and emit output to single file. */ "outDir": "./dist", /* Redirect output structure to the directory. */ // "rootDir": "./", /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */ diff --git a/front/src/Connection.ts b/front/src/Connection.ts index c04e5b4f..dee27ae5 100644 --- a/front/src/Connection.ts +++ b/front/src/Connection.ts @@ -182,11 +182,15 @@ export class Connection implements Connection { } - public joinARoom(roomId: string, startX: number, startY: number, direction: string, moving: boolean): Promise { + public joinARoom(roomId: string, startX: number, startY: number, direction: string, moving: boolean, viewport: ViewportInterface): Promise { const promise = new Promise((resolve, reject) => { - this.socket.emit(EventMessage.JOIN_ROOM, { roomId, position: {x: startX, y: startY, direction, moving }}, (userPositions: MessageUserPositionInterface[]) => { - resolve(userPositions); - }); + this.socket.emit(EventMessage.JOIN_ROOM, { + roomId, + position: {x: startX, y: startY, direction, moving }, + viewport, + }, (userPositions: MessageUserPositionInterface[]) => { + resolve(userPositions); + }); }) return promise; } @@ -203,6 +207,10 @@ export class Connection implements Connection { this.socket.emit(EventMessage.SET_SILENT, silent); } + public setViewport(viewport: ViewportInterface): void { + this.socket.emit(EventMessage.SET_VIEWPORT, viewport); + } + public onUserJoins(callback: (message: MessageUserJoined) => void): void { this.socket.on(EventMessage.JOIN_ROOM, callback); } diff --git a/front/src/Phaser/Game/GameScene.ts b/front/src/Phaser/Game/GameScene.ts index 595fc9d3..6a6656c2 100644 --- a/front/src/Phaser/Game/GameScene.ts +++ b/front/src/Phaser/Game/GameScene.ts @@ -111,7 +111,7 @@ export class GameScene extends Phaser.Scene implements CenterListener { private startLayerName: string|undefined; private presentationModeSprite!: Sprite; private chatModeSprite!: Sprite; - private repositionCallback!: (this: Window, ev: UIEvent) => void; + private onResizeCallback!: (this: Window, ev: UIEvent) => void; private gameMap!: GameMap; static createFromUrl(mapUrlFile: string, instance: string, key: string|null = null): GameScene { @@ -226,7 +226,7 @@ export class GameScene extends Phaser.Scene implements CenterListener { this.scene.stop(this.scene.key); this.scene.remove(this.scene.key); - window.removeEventListener('resize', this.repositionCallback); + window.removeEventListener('resize', this.onResizeCallback); }) // When connection is performed, let's connect SimplePeer @@ -412,8 +412,8 @@ export class GameScene extends Phaser.Scene implements CenterListener { this.switchLayoutMode(); }); - this.repositionCallback = this.reposition.bind(this); - window.addEventListener('resize', this.repositionCallback); + this.onResizeCallback = this.onResize.bind(this); + window.addEventListener('resize', this.onResizeCallback); this.reposition(); // From now, this game scene will be notified of reposition events @@ -636,7 +636,17 @@ export class GameScene extends Phaser.Scene implements CenterListener { //join room this.connectionPromise.then((connection: Connection) => { - connection.joinARoom(this.RoomId, this.startX, this.startY, PlayerAnimationNames.WalkDown, false).then((userPositions: MessageUserPositionInterface[]) => { + const camera = this.cameras.main; + connection.joinARoom(this.RoomId, + this.startX, + this.startY, + PlayerAnimationNames.WalkDown, + false, { + left: camera.scrollX, + top: camera.scrollY, + right: camera.scrollX + camera.width, + bottom: camera.scrollY + camera.height, + }).then((userPositions: MessageUserPositionInterface[]) => { this.initUsersPosition(userPositions); }); @@ -747,7 +757,7 @@ export class GameScene extends Phaser.Scene implements CenterListener { this.simplePeer.unregister(); this.scene.stop(); this.scene.remove(this.scene.key); - window.removeEventListener('resize', this.repositionCallback); + window.removeEventListener('resize', this.onResizeCallback); this.scene.start(nextSceneKey.key, { startLayerName: nextSceneKey.hash }); @@ -936,6 +946,19 @@ export class GameScene extends Phaser.Scene implements CenterListener { return mapUrlStart.substring(startPos, endPos); } + private onResize(): void { + this.reposition(); + + // Send new viewport to server + const camera = this.cameras.main; + this.connection.setViewport({ + left: camera.scrollX, + top: camera.scrollY, + right: camera.scrollX + camera.width, + bottom: camera.scrollY + camera.height, + }); + } + private reposition(): void { this.presentationModeSprite.setY(this.game.renderer.height - 2); this.chatModeSprite.setY(this.game.renderer.height - 2); From 7e7b42ce19eb64502b1af2a1c9443bef000b0016 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20N=C3=A9grier?= Date: Wed, 16 Sep 2020 09:31:44 +0200 Subject: [PATCH 135/313] Changing load test to run in circles --- back/src/Controller/IoSocketController.ts | 16 ++++++++++++---- benchmark/socketio-load-test.yaml | 5 +++++ benchmark/socketioLoadTest.js | 9 +++++++-- 3 files changed, 24 insertions(+), 6 deletions(-) diff --git a/back/src/Controller/IoSocketController.ts b/back/src/Controller/IoSocketController.ts index 878c6c75..c1c00761 100644 --- a/back/src/Controller/IoSocketController.ts +++ b/back/src/Controller/IoSocketController.ts @@ -223,6 +223,14 @@ export class IoSocketController { return new MessageUserPosition(user.id, player.name, player.characterLayers, player.position); }, users); + //console.warn('ANSWER PLAYER POSITIONS', listOfUsers); + if (answerFn === undefined && ALLOW_ARTILLERY === true) { + /*console.error("TYPEOF answerFn", typeof(answerFn)); + console.error("answerFn", answerFn); + process.exit(1)*/ + // For some reason, answerFn can be undefined if we use Artillery (?) + return; + } answerFn(listOfUsers); } catch (e) { console.error('An error occurred on "join_room" event'); @@ -244,7 +252,7 @@ export class IoSocketController { const world = this.Worlds.get(Client.roomId); if (!world) { - console.error("Could not find world with id '", Client.roomId, "'"); + console.error("In SET_VIEWPORT, could not find world with id '", Client.roomId, "'"); return; } world.setViewport(Client, Client.viewport); @@ -255,7 +263,7 @@ export class IoSocketController { }); socket.on(SockerIoEvent.USER_POSITION, (userMovesMessage: unknown): void => { - console.log(SockerIoEvent.USER_POSITION, userMovesMessage); + //console.log(SockerIoEvent.USER_POSITION, userMovesMessage); try { if (!isUserMovesInterface(userMovesMessage)) { socket.emit(SockerIoEvent.MESSAGE_ERROR, {message: 'Invalid USER_POSITION message.'}); @@ -272,7 +280,7 @@ export class IoSocketController { // update position in the world const world = this.Worlds.get(Client.roomId); if (!world) { - console.error("Could not find world with id '", Client.roomId, "'"); + console.error("In USER_POSITION, could not find world with id '", Client.roomId, "'"); return; } world.updatePosition(Client, Client.position); @@ -351,7 +359,7 @@ export class IoSocketController { // update position in the world const world = this.Worlds.get(Client.roomId); if (!world) { - console.error("Could not find world with id '", Client.roomId, "'"); + console.error("In SET_SILENT, could not find world with id '", Client.roomId, "'"); return; } world.setSilent(Client, silent); diff --git a/benchmark/socketio-load-test.yaml b/benchmark/socketio-load-test.yaml index e84b0402..df2f580b 100644 --- a/benchmark/socketio-load-test.yaml +++ b/benchmark/socketio-load-test.yaml @@ -28,6 +28,11 @@ scenarios: y: 170 direction: 'down' moving: false + viewport: + left: 500 + top: 0 + right: 800 + bottom: 200 - think: 1 - loop: - function: "setYRandom" diff --git a/benchmark/socketioLoadTest.js b/benchmark/socketioLoadTest.js index 540cd8bd..f898d7b9 100644 --- a/benchmark/socketioLoadTest.js +++ b/benchmark/socketioLoadTest.js @@ -5,8 +5,13 @@ module.exports = { }; function setYRandom(context, events, done) { - context.vars.x = (0 + Math.round(Math.random() * 1472)); - context.vars.y = (0 + Math.round(Math.random() * 1090)); + if (context.angle === undefined) { + context.angle = Math.random() * Math.PI * 2; + } + context.angle += 0.05; + + context.vars.x = 320 + 1472/2 * (1 + Math.sin(context.angle)); + context.vars.y = 200 + 1090/2 * (1 + Math.cos(context.angle)); context.vars.left = context.vars.x - 320; context.vars.top = context.vars.y - 200; context.vars.right = context.vars.x + 320; From f5f9dcac04dcc13c66aa2e0dab550d5357dcf96c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20N=C3=A9grier?= Date: Wed, 16 Sep 2020 16:06:43 +0200 Subject: [PATCH 136/313] Making groups part of zones --- back/src/Controller/IoSocketController.ts | 97 +++++++++++++------ back/src/Model/Group.ts | 21 ++-- back/src/Model/Movable.ts | 8 ++ back/src/Model/PositionNotifier.ts | 37 ++++--- back/src/Model/User.ts | 23 +++++ back/src/Model/UserInterface.ts | 11 --- .../Model/Websocket/GroupUpdateInterface.ts | 6 ++ back/src/Model/World.ts | 58 +++++------ back/src/Model/Zone.ts | 80 +++++++-------- back/tests/PositionNotifierTest.ts | 88 +++++++---------- front/src/Connection.ts | 3 +- front/src/Phaser/Game/GameScene.ts | 1 + 12 files changed, 245 insertions(+), 188 deletions(-) create mode 100644 back/src/Model/Movable.ts create mode 100644 back/src/Model/User.ts delete mode 100644 back/src/Model/UserInterface.ts create mode 100644 back/src/Model/Websocket/GroupUpdateInterface.ts diff --git a/back/src/Controller/IoSocketController.ts b/back/src/Controller/IoSocketController.ts index 1ce0c2db..f220aedb 100644 --- a/back/src/Controller/IoSocketController.ts +++ b/back/src/Controller/IoSocketController.ts @@ -7,7 +7,7 @@ import Jwt, {JsonWebTokenError} from "jsonwebtoken"; import {SECRET_KEY, MINIMUM_DISTANCE, GROUP_RADIUS, ALLOW_ARTILLERY} from "../Enum/EnvironmentVariable"; //TODO fix import by "_Enum/..." import {World} from "../Model/World"; import {Group} from "../Model/Group"; -import {UserInterface} from "../Model/UserInterface"; +import {User} from "../Model/User"; import {isSetPlayerDetailsMessage,} from "../Model/Websocket/SetPlayerDetailsMessage"; import {MessageUserJoined} from "../Model/Websocket/MessageUserJoined"; import {MessageUserMoved} from "../Model/Websocket/MessageUserMoved"; @@ -22,6 +22,8 @@ import {isItemEventMessageInterface} from "../Model/Websocket/ItemEventMessage"; import {uuid} from 'uuidv4'; import {isUserMovesInterface} from "../Model/Websocket/UserMovesMessage"; import {isViewport} from "../Model/Websocket/ViewportMessage"; +import {GroupUpdateInterface} from "_Model/Websocket/GroupUpdateInterface"; +import {Movable} from "../Model/Movable"; enum SockerIoEvent { CONNECTION = "connection", @@ -159,7 +161,7 @@ export class IoSocketController { }); } - private sendDeleteGroupEvent(uuid: string, lastUser: UserInterface): void { + private sendDeleteGroupEvent(uuid: string, lastUser: User): void { // Let's get the room of the group. To do this, let's get anyone in the group and find its room. const userId = lastUser.id; const client: ExSocketInterface = this.searchClientByIdOrFail(userId); @@ -215,15 +217,29 @@ export class IoSocketController { //join new previous room const world = this.joinRoom(Client, roomId, message.position); - const users = world.setViewport(Client, message.viewport); - const listOfUsers = users.map((user: UserInterface) => { - const player: ExSocketInterface|undefined = this.sockets.get(user.id); - if (player === undefined) { - console.warn('Something went wrong. The World contains a user "'+user.id+"' but this user does not exist in the sockets list!"); - return null; + const things = world.setViewport(Client, message.viewport); + + const listOfUsers: Array = []; + const listOfGroups: Array = []; + + for (const thing of things) { + if (thing instanceof User) { + const player: ExSocketInterface|undefined = this.sockets.get(thing.id); + if (player === undefined) { + console.warn('Something went wrong. The World contains a user "'+thing.id+"' but this user does not exist in the sockets list!"); + continue; + } + + listOfUsers.push(new MessageUserPosition(thing.id, player.name, player.characterLayers, player.position)); + } else if (thing instanceof Group) { + listOfGroups.push({ + groupId: thing.getId(), + position: thing.getPosition(), + }); + } else { + console.error("Unexpected type for Movable returned by setViewport"); } - return new MessageUserPosition(user.id, player.name, player.characterLayers, player.position); - }, users); + } const listOfItems: {[itemId: string]: unknown} = {}; for (const [itemId, item] of world.getItemsState().entries()) { @@ -232,15 +248,13 @@ export class IoSocketController { //console.warn('ANSWER PLAYER POSITIONS', listOfUsers); if (answerFn === undefined && ALLOW_ARTILLERY === true) { - /*console.error("TYPEOF answerFn", typeof(answerFn)); - console.error("answerFn", answerFn); - process.exit(1)*/ // For some reason, answerFn can be undefined if we use Artillery (?) return; } answerFn({ users: listOfUsers, + groups: listOfGroups, items: listOfItems }); } catch (e) { @@ -485,28 +499,51 @@ export class IoSocketController { }, (user1: string, group: Group) => { this.disConnectedUser(user1, group); }, MINIMUM_DISTANCE, GROUP_RADIUS, (group: Group) => { - this.sendUpdateGroupEvent(group); - }, (groupUuid: string, lastUser: UserInterface) => { - this.sendDeleteGroupEvent(groupUuid, lastUser); - }, (user, listener) => { - const clientUser = this.searchClientByIdOrFail(user.id); + //this.sendUpdateGroupEvent(group); + }, (groupUuid: string, lastUser: User) => { + //this.sendDeleteGroupEvent(groupUuid, lastUser); + }, (thing: Movable, listener: User) => { const clientListener = this.searchClientByIdOrFail(listener.id); - const messageUserJoined = new MessageUserJoined(clientUser.userId, clientUser.name, clientUser.characterLayers, clientUser.position); + if (thing instanceof User) { + const clientUser = this.searchClientByIdOrFail(thing.id); + const messageUserJoined = new MessageUserJoined(clientUser.userId, clientUser.name, clientUser.characterLayers, clientUser.position); - clientListener.emit(SockerIoEvent.JOIN_ROOM, messageUserJoined); - //console.log("Sending JOIN_ROOM event"); - }, (user, position, listener) => { - const clientUser = this.searchClientByIdOrFail(user.id); + clientListener.emit(SockerIoEvent.JOIN_ROOM, messageUserJoined); + } else if (thing instanceof Group) { + clientListener.emit(SockerIoEvent.GROUP_CREATE_UPDATE, { + position: thing.getPosition(), + groupId: thing.getId() + } as GroupUpdateInterface); + } else { + console.error('Unexpected type for Movable.'); + } + }, (thing: Movable, position, listener) => { const clientListener = this.searchClientByIdOrFail(listener.id); + if (thing instanceof User) { + const clientUser = this.searchClientByIdOrFail(thing.id); - clientListener.emitInBatch(SockerIoEvent.USER_MOVED, new MessageUserMoved(clientUser.userId, clientUser.position)); - //console.log("Sending USER_MOVED event"); - }, (user, listener) => { - const clientUser = this.searchClientByIdOrFail(user.id); + clientListener.emitInBatch(SockerIoEvent.USER_MOVED, new MessageUserMoved(clientUser.userId, clientUser.position)); + //console.log("Sending USER_MOVED event"); + } else if (thing instanceof Group) { + clientListener.emit(SockerIoEvent.GROUP_CREATE_UPDATE, { + position: thing.getPosition(), + groupId: thing.getId() + } as GroupUpdateInterface); + } else { + console.error('Unexpected type for Movable.'); + } + }, (thing: Movable, listener) => { const clientListener = this.searchClientByIdOrFail(listener.id); + if (thing instanceof User) { + const clientUser = this.searchClientByIdOrFail(thing.id); + clientListener.emit(SockerIoEvent.USER_LEFT, clientUser.userId); + //console.log("Sending USER_LEFT event"); + } else if (thing instanceof Group) { + clientListener.emit(SockerIoEvent.GROUP_DELETE, thing.getId()); + } else { + console.error('Unexpected type for Movable.'); + } - clientListener.emit(SockerIoEvent.USER_LEFT, clientUser.userId); - //console.log("Sending USER_LEFT event"); }); this.Worlds.set(roomId, world); } @@ -516,7 +553,7 @@ export class IoSocketController { Client.emit(SockerIoEvent.GROUP_CREATE_UPDATE, { position: group.getPosition(), groupId: group.getId() - }); + } as GroupUpdateInterface); }); //join world world.join(Client, Client.position); diff --git a/back/src/Model/Group.ts b/back/src/Model/Group.ts index 4c597557..4909b660 100644 --- a/back/src/Model/Group.ts +++ b/back/src/Model/Group.ts @@ -1,29 +1,30 @@ import { World, ConnectCallback, DisconnectCallback } from "./World"; -import { UserInterface } from "./UserInterface"; +import { User } from "./User"; import {PositionInterface} from "_Model/PositionInterface"; import {uuid} from "uuidv4"; +import {Movable} from "_Model/Movable"; -export class Group { +export class Group implements Movable { static readonly MAX_PER_GROUP = 4; private id: string; - private users: Set; + private users: Set; private connectCallback: ConnectCallback; private disconnectCallback: DisconnectCallback; - constructor(users: UserInterface[], connectCallback: ConnectCallback, disconnectCallback: DisconnectCallback) { - this.users = new Set(); + constructor(users: User[], connectCallback: ConnectCallback, disconnectCallback: DisconnectCallback) { + this.users = new Set(); this.connectCallback = connectCallback; this.disconnectCallback = disconnectCallback; this.id = uuid(); - users.forEach((user: UserInterface) => { + users.forEach((user: User) => { this.join(user); }); } - getUsers(): UserInterface[] { + getUsers(): User[] { return Array.from(this.users.values()); } @@ -38,7 +39,7 @@ export class Group { let x = 0; let y = 0; // Let's compute the barycenter of all users. - this.users.forEach((user: UserInterface) => { + this.users.forEach((user: User) => { x += user.position.x; y += user.position.y; }); @@ -58,7 +59,7 @@ export class Group { return this.users.size <= 1; } - join(user: UserInterface): void + join(user: User): void { // Broadcast on the right event this.connectCallback(user.id, this); @@ -66,7 +67,7 @@ export class Group { user.group = this; } - leave(user: UserInterface): void + leave(user: User): void { const success = this.users.delete(user); if (success === false) { diff --git a/back/src/Model/Movable.ts b/back/src/Model/Movable.ts new file mode 100644 index 00000000..173db0ae --- /dev/null +++ b/back/src/Model/Movable.ts @@ -0,0 +1,8 @@ +import {PositionInterface} from "_Model/PositionInterface"; + +/** + * A physical object that can be placed into a Zone + */ +export interface Movable { + getPosition(): PositionInterface +} diff --git a/back/src/Model/PositionNotifier.ts b/back/src/Model/PositionNotifier.ts index 9d6975e3..0e5b4b2f 100644 --- a/back/src/Model/PositionNotifier.ts +++ b/back/src/Model/PositionNotifier.ts @@ -8,10 +8,12 @@ * The PositionNotifier is important for performance. It allows us to send the position of players only to a restricted * number of players around the current player. */ -import {UserEntersCallback, UserLeavesCallback, UserMovesCallback, Zone} from "./Zone"; +import {EntersCallback, LeavesCallback, MovesCallback, Zone} from "./Zone"; import {PointInterface} from "_Model/Websocket/PointInterface"; -import {UserInterface} from "_Model/UserInterface"; +import {User} from "_Model/User"; import {ViewportInterface} from "_Model/Websocket/ViewportMessage"; +import {Movable} from "_Model/Movable"; +import {PositionInterface} from "_Model/PositionInterface"; interface ZoneDescriptor { i: number; @@ -24,7 +26,7 @@ export class PositionNotifier { private zones: Zone[][] = []; - constructor(private zoneWidth: number, private zoneHeight: number, private onUserEnters: UserEntersCallback, private onUserMoves: UserMovesCallback, private onUserLeaves: UserLeavesCallback) { + constructor(private zoneWidth: number, private zoneHeight: number, private onUserEnters: EntersCallback, private onUserMoves: MovesCallback, private onUserLeaves: LeavesCallback) { } private getZoneDescriptorFromCoordinates(x: number, y: number): ZoneDescriptor { @@ -38,7 +40,7 @@ export class PositionNotifier { * Sets the viewport coordinates. * Returns the list of new users to add */ - public setViewport(user: UserInterface, viewport: ViewportInterface): UserInterface[] { + public setViewport(user: User, viewport: ViewportInterface): Movable[] { if (viewport.left > viewport.right || viewport.top > viewport.bottom) { console.warn('Invalid viewport received: ', viewport); return []; @@ -60,43 +62,46 @@ export class PositionNotifier { const removedZones = [...oldZones].filter(x => !newZones.has(x)); - let users: UserInterface[] = []; + let things: Movable[] = []; for (const zone of addedZones) { zone.startListening(user); - users = users.concat(Array.from(zone.getPlayers())) + things = things.concat(Array.from(zone.getThings())) } for (const zone of removedZones) { zone.stopListening(user); } - return users; + return things; } - public updatePosition(user: UserInterface, userPosition: PointInterface): void { + public updatePosition(thing: Movable, newPosition: PositionInterface, oldPosition: PositionInterface): void { // Did we change zone? - const oldZoneDesc = this.getZoneDescriptorFromCoordinates(user.position.x, user.position.y); - const newZoneDesc = this.getZoneDescriptorFromCoordinates(userPosition.x, userPosition.y); + const oldZoneDesc = this.getZoneDescriptorFromCoordinates(oldPosition.x, oldPosition.y); + const newZoneDesc = this.getZoneDescriptorFromCoordinates(newPosition.x, newPosition.y); if (oldZoneDesc.i != newZoneDesc.i || oldZoneDesc.j != newZoneDesc.j) { const oldZone = this.getZone(oldZoneDesc.i, oldZoneDesc.j); const newZone = this.getZone(newZoneDesc.i, newZoneDesc.j); // Leave old zone - oldZone.leave(user, newZone); + oldZone.leave(thing, newZone); // Enter new zone - newZone.enter(user, oldZone, userPosition); + newZone.enter(thing, oldZone, newPosition); } else { const zone = this.getZone(oldZoneDesc.i, oldZoneDesc.j); - zone.move(user, userPosition); + zone.move(thing, newPosition); } } - public leave(user: UserInterface): void { - const oldZoneDesc = this.getZoneDescriptorFromCoordinates(user.position.x, user.position.y); + public leave(thing: Movable): void { + const oldPosition = thing.getPosition(); + const oldZoneDesc = this.getZoneDescriptorFromCoordinates(oldPosition.x, oldPosition.y); const oldZone = this.getZone(oldZoneDesc.i, oldZoneDesc.j); - oldZone.leave(user, null); + oldZone.leave(thing, null); + } + public removeViewport(user: User): void { // Also, let's stop listening on viewports for (const zone of user.listenedZones) { zone.stopListening(user); diff --git a/back/src/Model/User.ts b/back/src/Model/User.ts new file mode 100644 index 00000000..160a101c --- /dev/null +++ b/back/src/Model/User.ts @@ -0,0 +1,23 @@ +import { Group } from "./Group"; +import { PointInterface } from "./Websocket/PointInterface"; +import {Zone} from "_Model/Zone"; +import {Movable} from "_Model/Movable"; +import {PositionInterface} from "_Model/PositionInterface"; + +export class User implements Movable { + public listenedZones: Set; + public group?: Group; + + public constructor( + public id: string, + public position: PointInterface, + public silent: boolean, + + ) { + this.listenedZones = new Set(); + } + + public getPosition(): PositionInterface { + return this.position; + } +} diff --git a/back/src/Model/UserInterface.ts b/back/src/Model/UserInterface.ts deleted file mode 100644 index d19ecd6f..00000000 --- a/back/src/Model/UserInterface.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { Group } from "./Group"; -import { PointInterface } from "./Websocket/PointInterface"; -import {Zone} from "_Model/Zone"; - -export interface UserInterface { - id: string, - group?: Group, - position: PointInterface, - silent: boolean, - listenedZones: Set -} diff --git a/back/src/Model/Websocket/GroupUpdateInterface.ts b/back/src/Model/Websocket/GroupUpdateInterface.ts new file mode 100644 index 00000000..45e64ea4 --- /dev/null +++ b/back/src/Model/Websocket/GroupUpdateInterface.ts @@ -0,0 +1,6 @@ +import {PositionInterface} from "_Model/PositionInterface"; + +export interface GroupUpdateInterface { + position: PositionInterface, + groupId: string, +} diff --git a/back/src/Model/World.ts b/back/src/Model/World.ts index 05651ad4..9a5e35ff 100644 --- a/back/src/Model/World.ts +++ b/back/src/Model/World.ts @@ -2,27 +2,28 @@ import {MessageUserPosition, Point} from "./Websocket/MessageUserPosition"; import {PointInterface} from "./Websocket/PointInterface"; import {Group} from "./Group"; import {Distance} from "./Distance"; -import {UserInterface} from "./UserInterface"; +import {User} from "./User"; import {ExSocketInterface} from "_Model/Websocket/ExSocketInterface"; import {PositionInterface} from "_Model/PositionInterface"; import {Identificable} from "_Model/Websocket/Identificable"; -import {UserEntersCallback, UserLeavesCallback, UserMovesCallback, Zone} from "_Model/Zone"; +import {EntersCallback, LeavesCallback, MovesCallback, Zone} from "_Model/Zone"; import {PositionNotifier} from "./PositionNotifier"; import {ViewportInterface} from "_Model/Websocket/ViewportMessage"; +import {Movable} from "_Model/Movable"; export type ConnectCallback = (user: string, group: Group) => void; export type DisconnectCallback = (user: string, group: Group) => void; // callback called when a group is created or moved or changes users export type GroupUpdatedCallback = (group: Group) => void; -export type GroupDeletedCallback = (uuid: string, lastUser: UserInterface) => void; +export type GroupDeletedCallback = (uuid: string, lastUser: User) => void; export class World { private readonly minDistance: number; private readonly groupRadius: number; // Users, sorted by ID - private readonly users: Map; + private readonly users: Map; private readonly groups: Set; private readonly connectCallback: ConnectCallback; @@ -40,11 +41,11 @@ export class World { groupRadius: number, groupUpdatedCallback: GroupUpdatedCallback, groupDeletedCallback: GroupDeletedCallback, - onUserEnters: UserEntersCallback, - onUserMoves: UserMovesCallback, - onUserLeaves: UserLeavesCallback) + onEnters: EntersCallback, + onMoves: MovesCallback, + onLeaves: LeavesCallback) { - this.users = new Map(); + this.users = new Map(); this.groups = new Set(); this.connectCallback = connectCallback; this.disconnectCallback = disconnectCallback; @@ -53,24 +54,19 @@ export class World { this.groupUpdatedCallback = groupUpdatedCallback; this.groupDeletedCallback = groupDeletedCallback; // A zone is 10 sprites wide. - this.positionNotifier = new PositionNotifier(320, 320, onUserEnters, onUserMoves, onUserLeaves); + this.positionNotifier = new PositionNotifier(320, 320, onEnters, onMoves, onLeaves); } public getGroups(): Group[] { return Array.from(this.groups.values()); } - public getUsers(): Map { + public getUsers(): Map { return this.users; } public join(socket : Identificable, userPosition: PointInterface): void { - this.users.set(socket.userId, { - id: socket.userId, - position: userPosition, - silent: false, // FIXME: silent should be set at the correct value when joining a room. - listenedZones: new Set() - }); + this.users.set(socket.userId, new User(socket.userId, userPosition, false)); // Let's call update position to trigger the join / leave room this.updatePosition(socket, userPosition); } @@ -87,6 +83,7 @@ export class World { if (userObj !== undefined) { this.positionNotifier.leave(userObj); + this.positionNotifier.removeViewport(userObj); } } @@ -100,7 +97,9 @@ export class World { return; } - this.positionNotifier.updatePosition(user, userPosition); + this.positionNotifier.updatePosition(user, userPosition, user.position); + + const oldGroupPosition = user.group?.getPosition(); user.position = userPosition; @@ -108,17 +107,17 @@ export class World { return; } - if (typeof user.group === 'undefined') { + if (user.group === undefined) { // If the user is not part of a group: // should he join a group? - const closestItem: UserInterface|Group|null = this.searchClosestAvailableUserOrGroup(user); + const closestItem: User|Group|null = this.searchClosestAvailableUserOrGroup(user); if (closestItem !== null) { if (closestItem instanceof Group) { // Let's join the group! closestItem.join(user); } else { - const closestUser : UserInterface = closestItem; + const closestUser : User = closestItem; const group: Group = new Group([ user, closestUser @@ -138,7 +137,8 @@ export class World { // At the very end, if the user is part of a group, let's call the callback to update group position if (typeof user.group !== 'undefined') { - this.groupUpdatedCallback(user.group); + this.positionNotifier.updatePosition(user.group, user.group.getPosition(), oldGroupPosition ? oldGroupPosition : user.group.getPosition()); + //this.groupUpdatedCallback(user.group); } } @@ -167,21 +167,23 @@ export class World { * * @param user */ - private leaveGroup(user: UserInterface): void { + private leaveGroup(user: User): void { const group = user.group; if (typeof group === 'undefined') { throw new Error("The user is part of no group"); } group.leave(user); if (group.isEmpty()) { - this.groupDeletedCallback(group.getId(), user); + //this.groupDeletedCallback(group.getId(), user); + this.positionNotifier.leave(group); group.destroy(); if (!this.groups.has(group)) { throw new Error("Could not find group "+group.getId()+" referenced by user "+user.id+" in World."); } this.groups.delete(group); } else { - this.groupUpdatedCallback(group); + this.positionNotifier.updatePosition(group, group.getPosition(), group.getPosition()); + //this.groupUpdatedCallback(group); } } @@ -193,10 +195,10 @@ export class World { * OR * - close enough to a group (distance <= groupRadius) */ - private searchClosestAvailableUserOrGroup(user: UserInterface): UserInterface|Group|null + private searchClosestAvailableUserOrGroup(user: User): User|Group|null { let minimumDistanceFound: number = Math.max(this.minDistance, this.groupRadius); - let matchingItem: UserInterface | Group | null = null; + let matchingItem: User | Group | null = null; this.users.forEach((currentUser, userId) => { // Let's only check users that are not part of a group if (typeof currentUser.group !== 'undefined') { @@ -265,7 +267,7 @@ export class World { return matchingItem; } - public static computeDistance(user1: UserInterface, user2: UserInterface): number + public static computeDistance(user1: User, user2: User): number { return Math.sqrt(Math.pow(user2.position.x - user1.position.x, 2) + Math.pow(user2.position.y - user1.position.y, 2)); } @@ -343,7 +345,7 @@ export class World { } return 0; }*/ - setViewport(socket : Identificable, viewport: ViewportInterface): UserInterface[] { + setViewport(socket : Identificable, viewport: ViewportInterface): Movable[] { const user = this.users.get(socket.userId); if(typeof user === 'undefined') { console.warn('In setViewport, could not find user with ID "'+socket.userId+'" in world.'); diff --git a/back/src/Model/Zone.ts b/back/src/Model/Zone.ts index bd748b0f..9933637c 100644 --- a/back/src/Model/Zone.ts +++ b/back/src/Model/Zone.ts @@ -1,77 +1,77 @@ -import {UserInterface} from "./UserInterface"; -import {PointInterface} from "_Model/Websocket/PointInterface"; +import {User} from "./User"; import {PositionInterface} from "_Model/PositionInterface"; +import {Movable} from "_Model/Movable"; -export type UserEntersCallback = (user: UserInterface, listener: UserInterface) => void; -export type UserMovesCallback = (user: UserInterface, position: PointInterface, listener: UserInterface) => void; -export type UserLeavesCallback = (user: UserInterface, listener: UserInterface) => void; +export type EntersCallback = (thing: Movable, listener: User) => void; +export type MovesCallback = (thing: Movable, position: PositionInterface, listener: User) => void; +export type LeavesCallback = (thing: Movable, listener: User) => void; export class Zone { - private players: Set = new Set(); - private listeners: Set = new Set(); + private things: Set = new Set(); + private listeners: Set = new Set(); - constructor(private onUserEnters: UserEntersCallback, private onUserMoves: UserMovesCallback, private onUserLeaves: UserLeavesCallback) { + constructor(private onEnters: EntersCallback, private onMoves: MovesCallback, private onLeaves: LeavesCallback) { } /** - * A user leaves the zone + * A user/thing leaves the zone */ - public leave(user: UserInterface, newZone: Zone|null) { - this.players.delete(user); - this.notifyUserLeft(user, newZone); + public leave(thing: Movable, newZone: Zone|null) { + this.things.delete(thing); + this.notifyLeft(thing, newZone); } /** - * Notify listeners of this zone that this user left + * Notify listeners of this zone that this user/thing left */ - private notifyUserLeft(user: UserInterface, newZone: Zone|null) { + private notifyLeft(thing: Movable, newZone: Zone|null) { for (const listener of this.listeners) { - if (listener !== user && (newZone === null || !listener.listenedZones.has(newZone))) { - this.onUserLeaves(user, listener); + if (listener !== thing && (newZone === null || !listener.listenedZones.has(newZone))) { + this.onLeaves(thing, listener); } } } - public enter(user: UserInterface, oldZone: Zone|null, position: PointInterface) { - this.players.add(user); - this.notifyUserEnter(user, oldZone, position); + public enter(thing: Movable, oldZone: Zone|null, position: PositionInterface) { + this.things.add(thing); + this.notifyUserEnter(thing, oldZone, position); } /** * Notify listeners of this zone that this user entered */ - private notifyUserEnter(user: UserInterface, oldZone: Zone|null, position: PointInterface) { + private notifyUserEnter(thing: Movable, oldZone: Zone|null, position: PositionInterface) { for (const listener of this.listeners) { - if (listener === user) { + if (listener === thing) { continue; } if (oldZone === null || !listener.listenedZones.has(oldZone)) { - this.onUserEnters(user, listener); + this.onEnters(thing, listener); } else { - this.onUserMoves(user, position, listener); + this.onMoves(thing, position, listener); } } } - public move(user: UserInterface, position: PointInterface) { - if (!this.players.has(user)) { - this.players.add(user); - const foo = this.players; - this.notifyUserEnter(user, null, position); + public move(thing: Movable, position: PositionInterface) { + if (!this.things.has(thing)) { + this.things.add(thing); + const foo = this.things; + this.notifyUserEnter(thing, null, position); return; } for (const listener of this.listeners) { - if (listener !== user) { - this.onUserMoves(user,position, listener); + if (listener !== thing) { + this.onMoves(thing,position, listener); } } } - public startListening(listener: UserInterface): void { - for (const player of this.players) { - if (player !== listener) { - this.onUserEnters(player, listener); + public startListening(listener: User): void { + for (const thing of this.things) { + if (thing !== listener) { + this.onEnters(thing, listener); } } @@ -79,10 +79,10 @@ export class Zone { listener.listenedZones.add(this); } - public stopListening(listener: UserInterface): void { - for (const player of this.players) { - if (player !== listener) { - this.onUserLeaves(player, listener); + public stopListening(listener: User): void { + for (const thing of this.things) { + if (thing !== listener) { + this.onLeaves(thing, listener); } } @@ -90,7 +90,7 @@ export class Zone { listener.listenedZones.delete(this); } - public getPlayers(): Set { - return this.players; + public getThings(): Set { + return this.things; } } diff --git a/back/tests/PositionNotifierTest.ts b/back/tests/PositionNotifierTest.ts index 0b8b466f..936efb08 100644 --- a/back/tests/PositionNotifierTest.ts +++ b/back/tests/PositionNotifierTest.ts @@ -3,17 +3,16 @@ import {World, ConnectCallback, DisconnectCallback } from "../src/Model/World"; import {Point} from "../src/Model/Websocket/MessageUserPosition"; import { Group } from "../src/Model/Group"; import {PositionNotifier} from "../src/Model/PositionNotifier"; -import {UserInterface} from "../src/Model/UserInterface"; +import {User} from "../src/Model/User"; import {PointInterface} from "../src/Model/Websocket/PointInterface"; import {Zone} from "_Model/Zone"; +import {Movable} from "_Model/Movable"; -function move(user: UserInterface, x: number, y: number, positionNotifier: PositionNotifier): void { +function move(user: User, x: number, y: number, positionNotifier: PositionNotifier): void { positionNotifier.updatePosition(user, { x, - y, - moving: false, - direction: 'down' - }); + y + }, user.position); user.position.x = x; user.position.y = y; } @@ -24,35 +23,27 @@ describe("PositionNotifier", () => { let moveTriggered = false; let leaveTriggered = false; - const positionNotifier = new PositionNotifier(300, 300, (user: UserInterface) => { + const positionNotifier = new PositionNotifier(300, 300, (thing: Movable) => { enterTriggered = true; - }, (user: UserInterface, position: PointInterface) => { + }, (thing: Movable, position: PointInterface) => { moveTriggered = true; - }, (user: UserInterface) => { + }, (thing: Movable) => { leaveTriggered = true; }); - const user1 = { - id: "1", - position: { - x: 500, - y: 500, - moving: false, - direction: 'down' - }, - listenedZones: new Set(), - } as UserInterface; + const user1 = new User("1", { + x: 500, + y: 500, + moving: false, + direction: 'down' + }, false); - const user2 = { - id: "2", - position: { - x: -9999, - y: -9999, - moving: false, - direction: 'down' - }, - listenedZones: new Set(), - } as UserInterface; + const user2 = new User("2", { + x: -9999, + y: -9999, + moving: false, + direction: 'down' + }, false); positionNotifier.setViewport(user1, { left: 200, @@ -98,6 +89,7 @@ describe("PositionNotifier", () => { // Leave the room positionNotifier.leave(user2); + positionNotifier.removeViewport(user2); expect(enterTriggered).toBe(false); expect(moveTriggered).toBe(false); expect(leaveTriggered).toBe(true); @@ -109,35 +101,27 @@ describe("PositionNotifier", () => { let moveTriggered = false; let leaveTriggered = false; - const positionNotifier = new PositionNotifier(300, 300, (user: UserInterface) => { + const positionNotifier = new PositionNotifier(300, 300, (thing: Movable) => { enterTriggered = true; - }, (user: UserInterface, position: PointInterface) => { + }, (thing: Movable, position: PointInterface) => { moveTriggered = true; - }, (user: UserInterface) => { + }, (thing: Movable) => { leaveTriggered = true; }); - const user1 = { - id: "1", - position: { - x: 500, - y: 500, - moving: false, - direction: 'down' - }, - listenedZones: new Set(), - } as UserInterface; + const user1 = new User("1", { + x: 500, + y: 500, + moving: false, + direction: 'down' + }, false); - const user2 = { - id: "2", - position: { - x: -9999, - y: -9999, - moving: false, - direction: 'down' - }, - listenedZones: new Set(), - } as UserInterface; + const user2 = new User("2", { + x: -9999, + y: -9999, + moving: false, + direction: 'down' + }, false); let newUsers = positionNotifier.setViewport(user1, { left: 200, diff --git a/front/src/Connection.ts b/front/src/Connection.ts index 68fcc206..5062ca7f 100644 --- a/front/src/Connection.ts +++ b/front/src/Connection.ts @@ -123,7 +123,8 @@ export interface ItemEventMessageInterface { } export interface RoomJoinedMessageInterface { - users: MessageUserPositionInterface[] + users: MessageUserPositionInterface[], + groups: GroupCreatedUpdatedMessageInterface[], items: { [itemId: number] : unknown } } diff --git a/front/src/Phaser/Game/GameScene.ts b/front/src/Phaser/Game/GameScene.ts index 62c7c97a..ad378bc3 100644 --- a/front/src/Phaser/Game/GameScene.ts +++ b/front/src/Phaser/Game/GameScene.ts @@ -780,6 +780,7 @@ export class GameScene extends Phaser.Scene implements CenterListener { this.initUsersPosition(roomJoinedMessage.users); this.connectionAnswerPromiseResolve(roomJoinedMessage); }); + // FIXME: weirdly enough we don't use the result of joinARoom !!!!!! //listen event to share position of user this.CurrentPlayer.on(hasMovedEventName, this.pushPlayerPosition.bind(this)) From 7410cc8a4bfd98327e4b523978023ad1d444bd89 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20N=C3=A9grier?= Date: Wed, 16 Sep 2020 16:10:20 +0200 Subject: [PATCH 137/313] Fixing tests --- back/tests/PositionNotifierTest.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/back/tests/PositionNotifierTest.ts b/back/tests/PositionNotifierTest.ts index 936efb08..dd1e3b4b 100644 --- a/back/tests/PositionNotifierTest.ts +++ b/back/tests/PositionNotifierTest.ts @@ -7,6 +7,7 @@ import {User} from "../src/Model/User"; import {PointInterface} from "../src/Model/Websocket/PointInterface"; import {Zone} from "_Model/Zone"; import {Movable} from "_Model/Movable"; +import {PositionInterface} from "_Model/PositionInterface"; function move(user: User, x: number, y: number, positionNotifier: PositionNotifier): void { positionNotifier.updatePosition(user, { @@ -25,7 +26,7 @@ describe("PositionNotifier", () => { const positionNotifier = new PositionNotifier(300, 300, (thing: Movable) => { enterTriggered = true; - }, (thing: Movable, position: PointInterface) => { + }, (thing: Movable, position: PositionInterface) => { moveTriggered = true; }, (thing: Movable) => { leaveTriggered = true; @@ -103,7 +104,7 @@ describe("PositionNotifier", () => { const positionNotifier = new PositionNotifier(300, 300, (thing: Movable) => { enterTriggered = true; - }, (thing: Movable, position: PointInterface) => { + }, (thing: Movable, position: PositionInterface) => { moveTriggered = true; }, (thing: Movable) => { leaveTriggered = true; From f6458a833509054418de164b4ef61d2d147ab9de Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20N=C3=A9grier?= Date: Wed, 16 Sep 2020 16:13:47 +0200 Subject: [PATCH 138/313] Removing useless group callbacks at the World level --- back/src/Controller/IoSocketController.ts | 26 +---------------------- back/src/Model/World.ts | 13 ------------ back/tests/WorldTest.ts | 6 +++--- 3 files changed, 4 insertions(+), 41 deletions(-) diff --git a/back/src/Controller/IoSocketController.ts b/back/src/Controller/IoSocketController.ts index f220aedb..56168804 100644 --- a/back/src/Controller/IoSocketController.ts +++ b/back/src/Controller/IoSocketController.ts @@ -149,26 +149,6 @@ export class IoSocketController { return null; } - private sendUpdateGroupEvent(group: Group): void { - // Let's get the room of the group. To do this, let's get anyone in the group and find its room. - // Note: this is suboptimal - const userId = group.getUsers()[0].id; - const client: ExSocketInterface = this.searchClientByIdOrFail(userId); - const roomId = client.roomId; - this.Io.in(roomId).emit(SockerIoEvent.GROUP_CREATE_UPDATE, { - position: group.getPosition(), - groupId: group.getId() - }); - } - - private sendDeleteGroupEvent(uuid: string, lastUser: User): void { - // Let's get the room of the group. To do this, let's get anyone in the group and find its room. - const userId = lastUser.id; - const client: ExSocketInterface = this.searchClientByIdOrFail(userId); - const roomId = client.roomId; - this.Io.in(roomId).emit(SockerIoEvent.GROUP_DELETE, uuid); - } - ioConnection() { this.Io.on(SockerIoEvent.CONNECTION, (socket: Socket) => { const client : ExSocketInterface = socket as ExSocketInterface; @@ -498,11 +478,7 @@ export class IoSocketController { this.connectedUser(user1, group); }, (user1: string, group: Group) => { this.disConnectedUser(user1, group); - }, MINIMUM_DISTANCE, GROUP_RADIUS, (group: Group) => { - //this.sendUpdateGroupEvent(group); - }, (groupUuid: string, lastUser: User) => { - //this.sendDeleteGroupEvent(groupUuid, lastUser); - }, (thing: Movable, listener: User) => { + }, MINIMUM_DISTANCE, GROUP_RADIUS, (thing: Movable, listener: User) => { const clientListener = this.searchClientByIdOrFail(listener.id); if (thing instanceof User) { const clientUser = this.searchClientByIdOrFail(thing.id); diff --git a/back/src/Model/World.ts b/back/src/Model/World.ts index 9a5e35ff..6e739c02 100644 --- a/back/src/Model/World.ts +++ b/back/src/Model/World.ts @@ -14,10 +14,6 @@ import {Movable} from "_Model/Movable"; export type ConnectCallback = (user: string, group: Group) => void; export type DisconnectCallback = (user: string, group: Group) => void; -// callback called when a group is created or moved or changes users -export type GroupUpdatedCallback = (group: Group) => void; -export type GroupDeletedCallback = (uuid: string, lastUser: User) => void; - export class World { private readonly minDistance: number; private readonly groupRadius: number; @@ -28,8 +24,6 @@ export class World { private readonly connectCallback: ConnectCallback; private readonly disconnectCallback: DisconnectCallback; - private readonly groupUpdatedCallback: GroupUpdatedCallback; - private readonly groupDeletedCallback: GroupDeletedCallback; private itemsState: Map = new Map(); @@ -39,8 +33,6 @@ export class World { disconnectCallback: DisconnectCallback, minDistance: number, groupRadius: number, - groupUpdatedCallback: GroupUpdatedCallback, - groupDeletedCallback: GroupDeletedCallback, onEnters: EntersCallback, onMoves: MovesCallback, onLeaves: LeavesCallback) @@ -51,8 +43,6 @@ export class World { this.disconnectCallback = disconnectCallback; this.minDistance = minDistance; this.groupRadius = groupRadius; - this.groupUpdatedCallback = groupUpdatedCallback; - this.groupDeletedCallback = groupDeletedCallback; // A zone is 10 sprites wide. this.positionNotifier = new PositionNotifier(320, 320, onEnters, onMoves, onLeaves); } @@ -138,7 +128,6 @@ export class World { // At the very end, if the user is part of a group, let's call the callback to update group position if (typeof user.group !== 'undefined') { this.positionNotifier.updatePosition(user.group, user.group.getPosition(), oldGroupPosition ? oldGroupPosition : user.group.getPosition()); - //this.groupUpdatedCallback(user.group); } } @@ -174,7 +163,6 @@ export class World { } group.leave(user); if (group.isEmpty()) { - //this.groupDeletedCallback(group.getId(), user); this.positionNotifier.leave(group); group.destroy(); if (!this.groups.has(group)) { @@ -183,7 +171,6 @@ export class World { this.groups.delete(group); } else { this.positionNotifier.updatePosition(group, group.getPosition(), group.getPosition()); - //this.groupUpdatedCallback(group); } } diff --git a/back/tests/WorldTest.ts b/back/tests/WorldTest.ts index 580677c7..63e46928 100644 --- a/back/tests/WorldTest.ts +++ b/back/tests/WorldTest.ts @@ -13,7 +13,7 @@ describe("World", () => { } - const world = new World(connect, disconnect, 160, 160, () => {}, () => {}, () => {}, () => {}, () => {}); + const world = new World(connect, disconnect, 160, 160, () => {}, () => {}, () => {}); world.join({ userId: "foo" }, new Point(100, 100)); @@ -40,7 +40,7 @@ describe("World", () => { } - const world = new World(connect, disconnect, 160, 160, () => {}, () => {}, () => {}, () => {}, () => {}); + const world = new World(connect, disconnect, 160, 160, () => {}, () => {}, () => {}); world.join({ userId: "foo" }, new Point(100, 100)); @@ -69,7 +69,7 @@ describe("World", () => { disconnectCallNumber++; } - const world = new World(connect, disconnect, 160, 160, () => {}, () => {}, () => {}, () => {}, () => {}); + const world = new World(connect, disconnect, 160, 160, () => {}, () => {}, () => {}); world.join({ userId: "foo" }, new Point(100, 100)); From 2e8fa8d676c413a09d32117ce278269f9107e5f4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20N=C3=A9grier?= Date: Wed, 16 Sep 2020 18:34:24 +0200 Subject: [PATCH 139/313] Adding protocol buffers to the project with Typescript support --- back/package.json | 7 +++++-- back/src/proto/generated/.gitkeep | 0 back/src/proto/messages.proto | 6 ++++++ back/yarn.lock | 12 ++++++++++++ docker-compose.yaml | 2 +- 5 files changed, 24 insertions(+), 3 deletions(-) create mode 100644 back/src/proto/generated/.gitkeep create mode 100644 back/src/proto/messages.proto diff --git a/back/package.json b/back/package.json index a20c876f..fc7ad60e 100644 --- a/back/package.json +++ b/back/package.json @@ -10,7 +10,8 @@ "profile": "tsc && node --prof ./dist/server.js", "test": "ts-node node_modules/jasmine/bin/jasmine --config=jasmine.json", "lint": "node_modules/.bin/eslint src/ . --ext .ts", - "fix": "node_modules/.bin/eslint --fix src/ . --ext .ts" + "fix": "node_modules/.bin/eslint --fix src/ . --ext .ts", + "proto": "protoc --plugin=\"protoc-gen-ts=./node_modules/.bin/protoc-gen-ts\" --js_out=\"import_style=commonjs,binary:src/proto/generated\" --ts_out=\"src/proto/generated\" src/proto/messages.proto" }, "repository": { "type": "git", @@ -44,6 +45,7 @@ "body-parser": "^1.19.0", "express": "^4.17.1", "generic-type-guard": "^3.2.0", + "google-protobuf": "^3.13.0", "http-status-codes": "^1.4.0", "jsonwebtoken": "^8.5.1", "prom-client": "^12.0.0", @@ -58,6 +60,7 @@ "@typescript-eslint/eslint-plugin": "^2.26.0", "@typescript-eslint/parser": "^2.26.0", "eslint": "^6.8.0", - "jasmine": "^3.5.0" + "jasmine": "^3.5.0", + "ts-protoc-gen": "^0.13.0" } } diff --git a/back/src/proto/generated/.gitkeep b/back/src/proto/generated/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/back/src/proto/messages.proto b/back/src/proto/messages.proto new file mode 100644 index 00000000..ea9fafe2 --- /dev/null +++ b/back/src/proto/messages.proto @@ -0,0 +1,6 @@ +syntax = "proto3"; + +message SetPlayerDetailsMessage { + string name = 1; + repeated string characterLayers = 2; +} diff --git a/back/yarn.lock b/back/yarn.lock index f660a5c8..fe5c26e1 100644 --- a/back/yarn.lock +++ b/back/yarn.lock @@ -822,6 +822,11 @@ globals@^12.1.0: dependencies: type-fest "^0.8.1" +google-protobuf@^3.13.0, google-protobuf@^3.6.1: + version "3.13.0" + resolved "https://registry.yarnpkg.com/google-protobuf/-/google-protobuf-3.13.0.tgz#909c5983d75dd6101ed57c79e0528d000cdc3251" + integrity sha512-ZIf3qfLFayVrPvAjeKKxO5FRF1/NwRxt6Dko+fWEMuHwHbZx8/fcaAao9b0wCM6kr8qeg2te8XTpyuvKuD9aKw== + graceful-fs@^4.1.2: version "4.2.3" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.3.tgz#4a12ff1b60376ef09862c2093edd908328be8423" @@ -1764,6 +1769,13 @@ ts-node@*: source-map-support "^0.5.6" yn "3.1.1" +ts-protoc-gen@^0.13.0: + version "0.13.0" + resolved "https://registry.yarnpkg.com/ts-protoc-gen/-/ts-protoc-gen-0.13.0.tgz#2763ae4e4a1a7d7001d53d2f3043357c691701ea" + integrity sha512-j18X4rkDBbG/ZHUJy88WFeZP6mStGow5uREaohowlHXTu3/N7WcpyPhb7Vh6wN38ERmc/AkT9gqT98+vtlRhJA== + dependencies: + google-protobuf "^3.6.1" + tsconfig@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/tsconfig/-/tsconfig-7.0.0.tgz#84538875a4dc216e5c4a5432b3a4dec3d54e91b7" diff --git a/docker-compose.yaml b/docker-compose.yaml index 6f859759..beddf025 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -66,7 +66,7 @@ services: - "traefik.http.routers.maps-ssl.service=maps" back: - image: thecodingmachine/nodejs:12 + image: thecodingmachine/workadventure-back-base:latest command: yarn dev #command: yarn run profile environment: From 509196785b49fa5be2d11400c2b49b9788eb661e Mon Sep 17 00:00:00 2001 From: Gregoire Parant Date: Wed, 16 Sep 2020 18:38:50 +0200 Subject: [PATCH 140/313] Initialise global message - Create new class to manager global message. My idea is that this class permit to manage audio or text message. - Update html to have main content id and inject html in this. - Create front event to receive startMessage and stopMessage. - Delete impoted variable not used. --- front/.gitignore | 1 + front/dist/index.html | 2 +- front/dist/resources/style/style.css | 11 ++++++ front/src/Connection.ts | 18 ++++++++- front/src/Phaser/Game/GameScene.ts | 4 ++ front/src/Phaser/Login/EnableCameraScene.ts | 5 +-- front/src/WebRtc/GlobalMessageManager.ts | 43 +++++++++++++++++++++ front/src/WebRtc/HtmlUtils.ts | 10 +++++ front/src/WebRtc/SimplePeer.ts | 2 - 9 files changed, 88 insertions(+), 8 deletions(-) create mode 100644 front/src/WebRtc/GlobalMessageManager.ts diff --git a/front/.gitignore b/front/.gitignore index a74d68d5..e207e30a 100644 --- a/front/.gitignore +++ b/front/.gitignore @@ -4,3 +4,4 @@ /dist/webpack.config.js /dist/webpack.config.js.map /dist/src +*.sh \ No newline at end of file diff --git a/front/dist/index.html b/front/dist/index.html index 5de00b3b..4fd514a8 100644 --- a/front/dist/index.html +++ b/front/dist/index.html @@ -39,7 +39,7 @@ WorkAdventure -
    +
    diff --git a/front/dist/resources/style/style.css b/front/dist/resources/style/style.css index 807544ad..bf495f90 100644 --- a/front/dist/resources/style/style.css +++ b/front/dist/resources/style/style.css @@ -403,3 +403,14 @@ body { .chat-mode > div:last-child { flex-grow: 5; } + +.message-container{ + top: 0; + left: 20%; + position: absolute; + width: 60%; + height: auto; + z-index: 200; + background-color: #00000096; + border-radius: 0 0 10px 10px; +} diff --git a/front/src/Connection.ts b/front/src/Connection.ts index 5062ca7f..b930f198 100644 --- a/front/src/Connection.ts +++ b/front/src/Connection.ts @@ -1,6 +1,5 @@ import Axios from "axios"; import {API_URL} from "./Enum/EnvironmentVariable"; -import {MessageUI} from "./Logger/MessageUI"; import {SetPlayerDetailsMessage} from "./Messages/SetPlayerDetailsMessage"; const SocketIo = require('socket.io-client'); @@ -28,6 +27,9 @@ enum EventMessage{ SET_SILENT = "set_silent", // Set or unset the silent mode for this user. SET_VIEWPORT = "set-viewport", BATCH = "batch", + + PLAY_GLOBAL_MESSAGE = "play-global-message", + STOP_GLOBAL_MESSAGE = "stop-global-message", } export interface PointInterface { @@ -128,6 +130,12 @@ export interface RoomJoinedMessageInterface { items: { [itemId: number] : unknown } } +export interface GlobalMessageInterface { + id: number + type: string + message: string +} + export class Connection implements Connection { private readonly socket: Socket; private userId: string|null = null; @@ -275,6 +283,14 @@ export class Connection implements Connection { return this.socket.on(EventMessage.WEBRTC_SCREEN_SHARING_SIGNAL, callback); } + public receivePlayGlobalMessage(callback: (message: GlobalMessageInterface) => void) { + return this.socket.on(EventMessage.PLAY_GLOBAL_MESSAGE, callback); + } + + public receiveStopGlobalMessage(callback: (message: GlobalMessageInterface) => void) { + return this.socket.on(EventMessage.STOP_GLOBAL_MESSAGE, callback); + } + public onServerDisconnected(callback: (reason: string) => void): void { this.socket.on('disconnect', (reason: string) => { if (reason === 'io client disconnect') { diff --git a/front/src/Phaser/Game/GameScene.ts b/front/src/Phaser/Game/GameScene.ts index ad378bc3..37e7c2ef 100644 --- a/front/src/Phaser/Game/GameScene.ts +++ b/front/src/Phaser/Game/GameScene.ts @@ -40,6 +40,7 @@ import {FourOFourSceneName} from "../Reconnecting/FourOFourScene"; import {ItemFactoryInterface} from "../Items/ItemFactoryInterface"; import {ActionableItem} from "../Items/ActionableItem"; import {UserInputManager} from "../UserInput/UserInputManager"; +import {GlobalMessageManager} from "../../WebRtc/GlobalMessageManager"; export enum Textures { @@ -100,6 +101,7 @@ export class GameScene extends Phaser.Scene implements CenterListener { private playersPositionInterpolator = new PlayersPositionInterpolator(); private connection!: Connection; private simplePeer!: SimplePeer; + private GlobalMessageManager!: GlobalMessageManager; private connectionPromise!: Promise private connectionAnswerPromise: Promise; private connectionAnswerPromiseResolve!: (value?: RoomJoinedMessageInterface | PromiseLike) => void; @@ -265,6 +267,8 @@ export class GameScene extends Phaser.Scene implements CenterListener { // When connection is performed, let's connect SimplePeer this.simplePeer = new SimplePeer(this.connection); + this.GlobalMessageManager = new GlobalMessageManager(this.connection); + const self = this; this.simplePeer.registerPeerConnectionListener({ onConnect(user: UserSimplePeerInterface) { diff --git a/front/src/Phaser/Login/EnableCameraScene.ts b/front/src/Phaser/Login/EnableCameraScene.ts index 6fc1cd54..b280dd1c 100644 --- a/front/src/Phaser/Login/EnableCameraScene.ts +++ b/front/src/Phaser/Login/EnableCameraScene.ts @@ -1,12 +1,9 @@ import {gameManager} from "../Game/GameManager"; import {TextField} from "../Components/TextField"; -import {ClickButton} from "../Components/ClickButton"; import Image = Phaser.GameObjects.Image; -import Rectangle = Phaser.GameObjects.Rectangle; -import {PLAYER_RESOURCES, PlayerResourceDescriptionInterface} from "../Entity/Character"; import {GameSceneInitInterface} from "../Game/GameScene"; import {StartMapInterface} from "../../Connection"; -import {mediaManager, MediaManager} from "../../WebRtc/MediaManager"; +import {mediaManager} from "../../WebRtc/MediaManager"; import {RESOLUTION} from "../../Enum/EnvironmentVariable"; import {SoundMeter} from "../Components/SoundMeter"; import {SoundMeterSprite} from "../Components/SoundMeterSprite"; diff --git a/front/src/WebRtc/GlobalMessageManager.ts b/front/src/WebRtc/GlobalMessageManager.ts new file mode 100644 index 00000000..91dc64c3 --- /dev/null +++ b/front/src/WebRtc/GlobalMessageManager.ts @@ -0,0 +1,43 @@ +import {HtmlUtils} from "./HtmlUtils"; +import {Connection, GlobalMessageInterface} from "../Connection"; + +export class GlobalMessageManager { + + private Connection: Connection; + + constructor(Connection: Connection) { + this.Connection = Connection; + this.initialise(); + } + + initialise(){ + //receive signal to show message + this.Connection.receivePlayGlobalMessage((message: GlobalMessageInterface) => { + this.playMessage(message.id, message.message); + }); + + //receive signal to close message + this.Connection.receiveStopGlobalMessage((message: GlobalMessageInterface) => { + this.stopMessage(message.id); + }); + } + + playMessage(messageId : number, htmlMessage: string){ + const div = document.createElement('div'); + div.innerHTML = htmlMessage; + div.id = this.getHtmlMessageId(messageId); + div.className = "message-container"; + + const mainSectionDiv = HtmlUtils.getElementByIdOrFail('main-container'); + mainSectionDiv.appendChild(div); + } + + stopMessage(messageId: number){ + HtmlUtils.removeElementByIdOrFail(this.getHtmlMessageId(messageId)); + } + + private getHtmlMessageId(messageId: number){ + return `message-${messageId}`; + } + +} diff --git a/front/src/WebRtc/HtmlUtils.ts b/front/src/WebRtc/HtmlUtils.ts index c2e6ff6d..b7cb2124 100644 --- a/front/src/WebRtc/HtmlUtils.ts +++ b/front/src/WebRtc/HtmlUtils.ts @@ -7,4 +7,14 @@ export class HtmlUtils { // FIXME: does not check the type of the returned type return elem as T; } + + public static removeElementByIdOrFail(id: string): T { + const elem = document.getElementById(id); + if (elem === null) { + throw new Error("Cannot find HTML element with id '"+id+"'"); + } + // FIXME: does not check the type of the returned type + elem.remove(); + return elem as T; + } } diff --git a/front/src/WebRtc/SimplePeer.ts b/front/src/WebRtc/SimplePeer.ts index f388b2ec..f78e83e4 100644 --- a/front/src/WebRtc/SimplePeer.ts +++ b/front/src/WebRtc/SimplePeer.ts @@ -10,10 +10,8 @@ import { StopScreenSharingCallback, UpdatedLocalStreamCallback } from "./MediaManager"; -import * as SimplePeerNamespace from "simple-peer"; import {ScreenSharingPeer} from "./ScreenSharingPeer"; import {VideoPeer} from "./VideoPeer"; -const Peer: SimplePeerNamespace.SimplePeer = require('simple-peer'); export interface UserSimplePeerInterface{ userId: string; From e59cbcfaa7cb3890a3d7ea03fb40262e2e769ccb Mon Sep 17 00:00:00 2001 From: Gregoire Parant Date: Wed, 16 Sep 2020 21:50:04 +0200 Subject: [PATCH 141/313] Create console global message - Add style - Create zone and button to show the admin console --- front/dist/resources/style/style.css | 37 ++++++++++++++ front/src/Connection.ts | 20 +++++--- front/src/Phaser/Game/GameScene.ts | 4 ++ .../src/WebRtc/ConsoleGlobalMessageManager.ts | 51 +++++++++++++++++++ front/src/WebRtc/GlobalMessageManager.ts | 6 +-- 5 files changed, 107 insertions(+), 11 deletions(-) create mode 100644 front/src/WebRtc/ConsoleGlobalMessageManager.ts diff --git a/front/dist/resources/style/style.css b/front/dist/resources/style/style.css index bf495f90..39a7af02 100644 --- a/front/dist/resources/style/style.css +++ b/front/dist/resources/style/style.css @@ -414,3 +414,40 @@ body { background-color: #00000096; border-radius: 0 0 10px 10px; } + +.main-console{ + position: absolute; + width: 80%; + top: 0; + left: 10%; + background: #000000a6; + z-index: 200; + height: auto; + transition: all 0.1s ease-out; +} +.main-console div{ + position: absolute; + background: none repeat scroll 0% 0% #ccc0; + border-color: #000000 #ffffff00 #ffffff00 #ffffff00; + border-style: solid; + border-width: 20px 7px; + height: auto; + width: 10%; + color: white; + z-index: 200; + left: 45%; + transition: all 0.1s ease-out; + display: none; +} +.main-console div.active{ + display: block; +} +.main-console div span{ + position: absolute; + top: -20px; + left: 30%; +} +.main-console div:hover{ + cursor: pointer; + transform: scale(1.2) translateY(3px); +} \ No newline at end of file diff --git a/front/src/Connection.ts b/front/src/Connection.ts index b930f198..1341347b 100644 --- a/front/src/Connection.ts +++ b/front/src/Connection.ts @@ -283,14 +283,6 @@ export class Connection implements Connection { return this.socket.on(EventMessage.WEBRTC_SCREEN_SHARING_SIGNAL, callback); } - public receivePlayGlobalMessage(callback: (message: GlobalMessageInterface) => void) { - return this.socket.on(EventMessage.PLAY_GLOBAL_MESSAGE, callback); - } - - public receiveStopGlobalMessage(callback: (message: GlobalMessageInterface) => void) { - return this.socket.on(EventMessage.STOP_GLOBAL_MESSAGE, callback); - } - public onServerDisconnected(callback: (reason: string) => void): void { this.socket.on('disconnect', (reason: string) => { if (reason === 'io client disconnect') { @@ -322,4 +314,16 @@ export class Connection implements Connection { onActionableEvent(callback: (message: ItemEventMessageInterface) => void): void { this.socket.on(EventMessage.ITEM_EVENT, callback); } + + public receivePlayGlobalMessage(callback: (message: GlobalMessageInterface) => void) { + return this.socket.on(EventMessage.PLAY_GLOBAL_MESSAGE, callback); + } + + public receiveStopGlobalMessage(callback: (message: GlobalMessageInterface) => void) { + return this.socket.on(EventMessage.STOP_GLOBAL_MESSAGE, callback); + } + + public emitGlobalMessage(message: GlobalMessageInterface){ + return this.socket.emit(EventMessage.PLAY_GLOBAL_MESSAGE, message); + } } diff --git a/front/src/Phaser/Game/GameScene.ts b/front/src/Phaser/Game/GameScene.ts index 37e7c2ef..332c3bcd 100644 --- a/front/src/Phaser/Game/GameScene.ts +++ b/front/src/Phaser/Game/GameScene.ts @@ -41,6 +41,7 @@ import {ItemFactoryInterface} from "../Items/ItemFactoryInterface"; import {ActionableItem} from "../Items/ActionableItem"; import {UserInputManager} from "../UserInput/UserInputManager"; import {GlobalMessageManager} from "../../WebRtc/GlobalMessageManager"; +import {ConsoleGlobalMessageManager} from "../../WebRtc/ConsoleGlobalMessageManager"; export enum Textures { @@ -102,6 +103,7 @@ export class GameScene extends Phaser.Scene implements CenterListener { private connection!: Connection; private simplePeer!: SimplePeer; private GlobalMessageManager!: GlobalMessageManager; + private ConsoleGlobalMessageManager!: ConsoleGlobalMessageManager; private connectionPromise!: Promise private connectionAnswerPromise: Promise; private connectionAnswerPromiseResolve!: (value?: RoomJoinedMessageInterface | PromiseLike) => void; @@ -268,6 +270,8 @@ export class GameScene extends Phaser.Scene implements CenterListener { // When connection is performed, let's connect SimplePeer this.simplePeer = new SimplePeer(this.connection); this.GlobalMessageManager = new GlobalMessageManager(this.connection); + //TODO check right of user + this.ConsoleGlobalMessageManager = new ConsoleGlobalMessageManager(this.connection); const self = this; this.simplePeer.registerPeerConnectionListener({ diff --git a/front/src/WebRtc/ConsoleGlobalMessageManager.ts b/front/src/WebRtc/ConsoleGlobalMessageManager.ts new file mode 100644 index 00000000..fe7fa216 --- /dev/null +++ b/front/src/WebRtc/ConsoleGlobalMessageManager.ts @@ -0,0 +1,51 @@ +import {HtmlUtils} from "./HtmlUtils"; +import {Connection, GlobalMessageInterface} from "../Connection"; + +export const CLASS_CONSOLE_MESSAGE = 'main-console'; +export const INPUT_CONSOLE_MESSAGE = 'input-send-text'; +export const UPLOAD_CONSOLE_MESSAGE = 'input-upload-music'; +export const BUTTON_CONSOLE_SEND = 'button-send'; +export const INPUT_TYPE_CONSOLE = 'input-type'; + +export const AUDIO_TYPE = 'audio'; +export const MESSAGE_TYPE = 'message'; + +export class ConsoleGlobalMessageManager { + + private Connection: Connection; + + constructor(Connection: Connection) { + this.Connection = Connection; + this.initialise(); + } + + initialise(){ + const buttonText = document.createElement('span'); + buttonText.innerText = 'Console'; + + const buttonMainConsole = document.createElement('div'); + buttonMainConsole.classList.add('active'); + buttonMainConsole.appendChild(buttonText) + + const divMainConsole = document.createElement('div'); + divMainConsole.className = CLASS_CONSOLE_MESSAGE; + divMainConsole.appendChild(buttonMainConsole) + + const mainSectionDiv = HtmlUtils.getElementByIdOrFail('main-container'); + mainSectionDiv.appendChild(divMainConsole); + } + + sendMessage(html: string){ + const inputText = HtmlUtils.getElementByIdOrFail(INPUT_CONSOLE_MESSAGE); + const inputType = HtmlUtils.getElementByIdOrFail(INPUT_TYPE_CONSOLE); + if(AUDIO_TYPE !== inputType.innerText && MESSAGE_TYPE !== inputType.innerText){ + throw "Error event type"; + } + let GlobalMessage : GlobalMessageInterface = { + id: 1, + message: inputText.innerText, + type: inputType.innerText + }; + this.Connection.emitGlobalMessage(GlobalMessage); + } +} \ No newline at end of file diff --git a/front/src/WebRtc/GlobalMessageManager.ts b/front/src/WebRtc/GlobalMessageManager.ts index 91dc64c3..29868957 100644 --- a/front/src/WebRtc/GlobalMessageManager.ts +++ b/front/src/WebRtc/GlobalMessageManager.ts @@ -22,7 +22,7 @@ export class GlobalMessageManager { }); } - playMessage(messageId : number, htmlMessage: string){ + private playMessage(messageId : number, htmlMessage: string){ const div = document.createElement('div'); div.innerHTML = htmlMessage; div.id = this.getHtmlMessageId(messageId); @@ -32,11 +32,11 @@ export class GlobalMessageManager { mainSectionDiv.appendChild(div); } - stopMessage(messageId: number){ + private stopMessage(messageId: number){ HtmlUtils.removeElementByIdOrFail(this.getHtmlMessageId(messageId)); } - private getHtmlMessageId(messageId: number){ + private getHtmlMessageId(messageId: number) : string{ return `message-${messageId}`; } From 9dd3d4bac803a2d74e2387a8564679cb853c4fef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20N=C3=A9grier?= Date: Wed, 16 Sep 2020 22:27:37 +0200 Subject: [PATCH 142/313] Watching protoc in dev mode --- back/package.json | 6 +- back/yarn.lock | 194 ++++++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 192 insertions(+), 8 deletions(-) diff --git a/back/package.json b/back/package.json index fc7ad60e..411beb94 100644 --- a/back/package.json +++ b/back/package.json @@ -5,13 +5,14 @@ "main": "index.js", "scripts": { "tsc": "tsc", - "dev": "ts-node-dev --respawn --transpileOnly ./server.ts", + "dev": "concurrently \"yarn run proto:watch\" \"ts-node-dev --respawn --transpileOnly ./server.ts\"", "prod": "tsc && node ./dist/server.js", "profile": "tsc && node --prof ./dist/server.js", "test": "ts-node node_modules/jasmine/bin/jasmine --config=jasmine.json", "lint": "node_modules/.bin/eslint src/ . --ext .ts", "fix": "node_modules/.bin/eslint --fix src/ . --ext .ts", - "proto": "protoc --plugin=\"protoc-gen-ts=./node_modules/.bin/protoc-gen-ts\" --js_out=\"import_style=commonjs,binary:src/proto/generated\" --ts_out=\"src/proto/generated\" src/proto/messages.proto" + "proto": "protoc --plugin=\"protoc-gen-ts=./node_modules/.bin/protoc-gen-ts\" --js_out=\"import_style=commonjs,binary:src/proto/generated\" --ts_out=\"src/proto/generated\" src/proto/messages.proto", + "proto:watch": "inotifywait -q -m -e close_write src/proto/messages.proto | while read -r filename event; do yarn run proto; done" }, "repository": { "type": "git", @@ -59,6 +60,7 @@ "@types/jasmine": "^3.5.10", "@typescript-eslint/eslint-plugin": "^2.26.0", "@typescript-eslint/parser": "^2.26.0", + "concurrently": "^5.3.0", "eslint": "^6.8.0", "jasmine": "^3.5.0", "ts-protoc-gen": "^0.13.0" diff --git a/back/yarn.lock b/back/yarn.lock index fe5c26e1..5384de4c 100644 --- a/back/yarn.lock +++ b/back/yarn.lock @@ -328,7 +328,12 @@ camelcase@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f" -chalk@^2.0.0, chalk@^2.1.0: +camelcase@^5.0.0: + version "5.3.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" + integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== + +chalk@^2.0.0, chalk@^2.1.0, chalk@^2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" dependencies: @@ -357,6 +362,15 @@ cli-width@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639" +cliui@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5" + integrity sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA== + dependencies: + string-width "^3.1.0" + strip-ansi "^5.2.0" + wrap-ansi "^5.1.0" + color-convert@^1.9.0: version "1.9.3" resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" @@ -393,6 +407,21 @@ concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" +concurrently@^5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/concurrently/-/concurrently-5.3.0.tgz#7500de6410d043c912b2da27de3202cb489b1e7b" + integrity sha512-8MhqOB6PWlBfA2vJ8a0bSFKATOdWlHiQlk11IfmQBPaHVP8oP2gsh2MObE6UR3hqDHqvaIvLTyceNW6obVuFHQ== + dependencies: + chalk "^2.4.2" + date-fns "^2.0.1" + lodash "^4.17.15" + read-pkg "^4.0.1" + rxjs "^6.5.2" + spawn-command "^0.0.2-1" + supports-color "^6.1.0" + tree-kill "^1.2.2" + yargs "^13.3.0" + content-disposition@0.5.3: version "0.5.3" resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.3.tgz#e130caf7e7279087c5616c2007d0485698984fbd" @@ -431,6 +460,11 @@ currently-unhandled@^0.4.1: dependencies: array-find-index "^1.0.1" +date-fns@^2.0.1: + version "2.16.1" + resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.16.1.tgz#05775792c3f3331da812af253e1a935851d3834b" + integrity sha512-sAJVKx/FqrLYHAQeN7VpJrPhagZc9R4ImZIWYRFZaaohR3KzmuK88touwsSwSVT8Qcbd4zoDsnGfX4GFB4imyQ== + dateformat@~1.0.4-1.2.3: version "1.0.12" resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-1.0.12.tgz#9f124b67594c937ff706932e4a642cca8dbbfee9" @@ -460,7 +494,7 @@ debug@~3.1.0: dependencies: ms "2.0.0" -decamelize@^1.1.2: +decamelize@^1.1.2, decamelize@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" @@ -551,7 +585,7 @@ engine.io@~3.4.0: engine.io-parser "~2.2.0" ws "^7.1.2" -error-ex@^1.2.0: +error-ex@^1.2.0, error-ex@^1.3.1: version "1.3.2" resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" dependencies: @@ -762,6 +796,13 @@ find-up@^1.0.0: path-exists "^2.0.0" pinkie-promise "^2.0.0" +find-up@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" + integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== + dependencies: + locate-path "^3.0.0" + flat-cache@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-2.0.1.tgz#5d296d6f04bda44a4630a301413bdbc2ec085ec0" @@ -795,6 +836,11 @@ generic-type-guard@^3.2.0: resolved "https://registry.yarnpkg.com/generic-type-guard/-/generic-type-guard-3.2.0.tgz#1fb136f934730c776486526b8a21fe96b067e691" integrity sha512-EkkrXYbOtJ3VPB+SOrU7EhwY65rZErItGtBg5wAqywaj07BOubwOZqMYaxOWekJ9akioGqXIsw1fYk3wwbWsDQ== +get-caller-file@^2.0.1: + version "2.0.5" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== + get-stdin@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe" @@ -1017,6 +1063,11 @@ js-yaml@^3.13.1: argparse "^1.0.7" esprima "^4.0.0" +json-parse-better-errors@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" + integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== + json-schema-traverse@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" @@ -1072,6 +1123,14 @@ load-json-file@^1.0.0: pinkie-promise "^2.0.0" strip-bom "^2.0.0" +locate-path@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" + integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== + dependencies: + p-locate "^3.0.0" + path-exists "^3.0.0" + lodash.includes@^4.3.0: version "4.3.0" resolved "https://registry.yarnpkg.com/lodash.includes/-/lodash.includes-4.3.0.tgz#60bb98a87cb923c68ca1e51325483314849f553f" @@ -1268,6 +1327,25 @@ os-tmpdir@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" +p-limit@^2.0.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" + integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== + dependencies: + p-try "^2.0.0" + +p-locate@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" + integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== + dependencies: + p-limit "^2.0.0" + +p-try@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" + integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== + parent-module@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" @@ -1280,6 +1358,14 @@ parse-json@^2.2.0: dependencies: error-ex "^1.2.0" +parse-json@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" + integrity sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA= + dependencies: + error-ex "^1.3.1" + json-parse-better-errors "^1.0.1" + parseqs@0.0.5: version "0.0.5" resolved "https://registry.yarnpkg.com/parseqs/-/parseqs-0.0.5.tgz#d5208a3738e46766e291ba2ea173684921a8b89d" @@ -1302,6 +1388,11 @@ path-exists@^2.0.0: dependencies: pinkie-promise "^2.0.0" +path-exists@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" + integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= + path-is-absolute@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" @@ -1330,6 +1421,11 @@ pify@^2.0.0: version "2.3.0" resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" +pify@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" + integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= + pinkie-promise@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" @@ -1398,6 +1494,15 @@ read-pkg@^1.0.0: normalize-package-data "^2.3.2" path-type "^1.0.0" +read-pkg@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-4.0.1.tgz#963625378f3e1c4d48c85872b5a6ec7d5d093237" + integrity sha1-ljYlN48+HE1IyFhytabsfV0JMjc= + dependencies: + normalize-package-data "^2.3.2" + parse-json "^4.0.0" + pify "^3.0.0" + redent@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde" @@ -1419,6 +1524,16 @@ repeating@^2.0.0: dependencies: is-finite "^1.0.0" +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= + +require-main-filename@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" + integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== + resolve-from@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" @@ -1454,6 +1569,13 @@ run-async@^2.4.0: dependencies: is-promise "^2.1.0" +rxjs@^6.5.2: + version "6.6.3" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.3.tgz#8ca84635c4daa900c0d3967a6ee7ac60271ee552" + integrity sha512-trsQc+xYYXZ3urjOiJOuCOa5N3jAZ3eiSpQB5hIT8zGlL2QfnHLJ2r7GMkBGuIausdJN1OneaI6gQlsqNHHmZQ== + dependencies: + tslib "^1.9.0" + rxjs@^6.5.3: version "6.5.5" resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.5.5.tgz#c5c884e3094c8cfee31bf27eb87e54ccfc87f9ec" @@ -1507,6 +1629,11 @@ serve-static@1.14.1: parseurl "~1.3.3" send "0.17.1" +set-blocking@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" + integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= + setprototypeof@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683" @@ -1598,6 +1725,11 @@ source-map@^0.6.0: version "0.6.1" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" +spawn-command@^0.0.2-1: + version "0.0.2-1" + resolved "https://registry.yarnpkg.com/spawn-command/-/spawn-command-0.0.2-1.tgz#62f5e9466981c1b796dc5929937e11c9c6921bd0" + integrity sha1-YvXpRmmBwbeW3Fkpk34RycaSG9A= + spdx-correct@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.0.tgz#fb83e504445268f154b074e218c87c003cd31df4" @@ -1628,7 +1760,7 @@ sprintf-js@~1.0.2: version "1.5.0" resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" -string-width@^3.0.0: +string-width@^3.0.0, string-width@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" dependencies: @@ -1644,7 +1776,7 @@ string-width@^4.1.0: is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.0" -strip-ansi@^5.1.0, strip-ansi@^5.2.0: +strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" dependencies: @@ -1686,6 +1818,13 @@ supports-color@^5.3.0: dependencies: has-flag "^3.0.0" +supports-color@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3" + integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ== + dependencies: + has-flag "^3.0.0" + supports-color@^7.1.0: version "7.1.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.1.0.tgz#68e32591df73e25ad1c4b49108a2ec507962bfd1" @@ -1734,7 +1873,7 @@ toidentifier@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" -tree-kill@^1.2.1: +tree-kill@^1.2.1, tree-kill@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/tree-kill/-/tree-kill-1.2.2.tgz#4ca09a9092c88b73a7cdc5e8a01b507b0790a0cc" @@ -1859,6 +1998,11 @@ vary@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" +which-module@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" + integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= + which@^1.2.9, which@^1.3.0: version "1.3.1" resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" @@ -1869,6 +2013,15 @@ word-wrap@~1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" +wrap-ansi@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09" + integrity sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q== + dependencies: + ansi-styles "^3.2.0" + string-width "^3.0.0" + strip-ansi "^5.0.0" + wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" @@ -1897,6 +2050,35 @@ xtend@^4.0.0: version "4.0.2" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" +y18n@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" + integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w== + +yargs-parser@^13.1.2: + version "13.1.2" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38" + integrity sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg== + dependencies: + camelcase "^5.0.0" + decamelize "^1.2.0" + +yargs@^13.3.0: + version "13.3.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.2.tgz#ad7ffefec1aa59565ac915f82dccb38a9c31a2dd" + integrity sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw== + dependencies: + cliui "^5.0.0" + find-up "^3.0.0" + get-caller-file "^2.0.1" + require-directory "^2.1.1" + require-main-filename "^2.0.0" + set-blocking "^2.0.0" + string-width "^3.0.0" + which-module "^2.0.0" + y18n "^4.0.0" + yargs-parser "^13.1.2" + yeast@0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/yeast/-/yeast-0.1.2.tgz#008e06d8094320c372dbc2f8ed76a0ca6c8ac419" From 4b55b54a07d1c7eff8636e55a35914b67c394cbe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20N=C3=A9grier?= Date: Thu, 17 Sep 2020 17:14:47 +0200 Subject: [PATCH 143/313] Adding first protobuf message exchange --- back/package.json | 6 +- back/src/Controller/IoSocketController.ts | 9 +- back/src/proto/generated/.gitkeep | 0 back/yarn.lock | 7 +- benchmark/.gitignore | 3 + benchmark/package-lock.json | 1970 +++++++++++++++++ docker-compose.yaml | 2 + front/src/Connection.ts | 10 +- front/src/Messages/SetPlayerDetailsMessage.ts | 4 - messages/.gitignore | 1 + messages/generated/.gitignore | 1 + messages/generated/src/proto/messages_pb.d.ts | 31 + messages/generated/src/proto/messages_pb.js | 223 ++ {back/src/proto => messages}/messages.proto | 0 messages/package.json | 43 + messages/yarn.lock | 889 ++++++++ 16 files changed, 3185 insertions(+), 14 deletions(-) delete mode 100644 back/src/proto/generated/.gitkeep create mode 100644 benchmark/.gitignore create mode 100644 benchmark/package-lock.json delete mode 100644 front/src/Messages/SetPlayerDetailsMessage.ts create mode 100644 messages/.gitignore create mode 100644 messages/generated/.gitignore create mode 100644 messages/generated/src/proto/messages_pb.d.ts create mode 100644 messages/generated/src/proto/messages_pb.js rename {back/src/proto => messages}/messages.proto (100%) create mode 100644 messages/package.json create mode 100644 messages/yarn.lock diff --git a/back/package.json b/back/package.json index 411beb94..e9a4d4fc 100644 --- a/back/package.json +++ b/back/package.json @@ -11,8 +11,8 @@ "test": "ts-node node_modules/jasmine/bin/jasmine --config=jasmine.json", "lint": "node_modules/.bin/eslint src/ . --ext .ts", "fix": "node_modules/.bin/eslint --fix src/ . --ext .ts", - "proto": "protoc --plugin=\"protoc-gen-ts=./node_modules/.bin/protoc-gen-ts\" --js_out=\"import_style=commonjs,binary:src/proto/generated\" --ts_out=\"src/proto/generated\" src/proto/messages.proto", - "proto:watch": "inotifywait -q -m -e close_write src/proto/messages.proto | while read -r filename event; do yarn run proto; done" + "proto": "protoc --plugin=\"protoc-gen-ts=./node_modules/.bin/protoc-gen-ts\" --js_out=\"import_style=commonjs,binary:src/messages/generated\" --ts_out=\"src/messages/generated\" src/messages/messages.proto", + "proto:watch": "inotifywait -q -m -e close_write src/messages/messages.proto | while read -r filename event; do yarn run proto; done" }, "repository": { "type": "git", @@ -46,7 +46,6 @@ "body-parser": "^1.19.0", "express": "^4.17.1", "generic-type-guard": "^3.2.0", - "google-protobuf": "^3.13.0", "http-status-codes": "^1.4.0", "jsonwebtoken": "^8.5.1", "prom-client": "^12.0.0", @@ -57,6 +56,7 @@ "uuidv4": "^6.0.7" }, "devDependencies": { + "@types/google-protobuf": "^3.7.3", "@types/jasmine": "^3.5.10", "@typescript-eslint/eslint-plugin": "^2.26.0", "@typescript-eslint/parser": "^2.26.0", diff --git a/back/src/Controller/IoSocketController.ts b/back/src/Controller/IoSocketController.ts index 56168804..38950e35 100644 --- a/back/src/Controller/IoSocketController.ts +++ b/back/src/Controller/IoSocketController.ts @@ -24,6 +24,7 @@ import {isUserMovesInterface} from "../Model/Websocket/UserMovesMessage"; import {isViewport} from "../Model/Websocket/ViewportMessage"; import {GroupUpdateInterface} from "_Model/Websocket/GroupUpdateInterface"; import {Movable} from "../Model/Movable"; +import {SetPlayerDetailsMessage} from "../../../messages/generated/src/proto/messages_pb"; enum SockerIoEvent { CONNECTION = "connection", @@ -334,7 +335,13 @@ export class IoSocketController { }); // Let's send the user id to the user - socket.on(SockerIoEvent.SET_PLAYER_DETAILS, (playerDetails: unknown, answerFn) => { + socket.on(SockerIoEvent.SET_PLAYER_DETAILS, (message: any, answerFn) => { + console.log(SockerIoEvent.SET_PLAYER_DETAILS, message); + const playerDetailsMessage = SetPlayerDetailsMessage.deserializeBinary(new Uint8Array(message)); + const playerDetails = { + name: playerDetailsMessage.getName(), + characterLayers: playerDetailsMessage.getCharacterlayersList() + }; console.log(SockerIoEvent.SET_PLAYER_DETAILS, playerDetails); if (!isSetPlayerDetailsMessage(playerDetails)) { socket.emit(SockerIoEvent.MESSAGE_ERROR, {message: 'Invalid SET_PLAYER_DETAILS message.'}); diff --git a/back/src/proto/generated/.gitkeep b/back/src/proto/generated/.gitkeep deleted file mode 100644 index e69de29b..00000000 diff --git a/back/yarn.lock b/back/yarn.lock index 5384de4c..a3269cb5 100644 --- a/back/yarn.lock +++ b/back/yarn.lock @@ -57,6 +57,11 @@ "@types/qs" "*" "@types/serve-static" "*" +"@types/google-protobuf@^3.7.3": + version "3.7.3" + resolved "https://registry.yarnpkg.com/@types/google-protobuf/-/google-protobuf-3.7.3.tgz#429512e541bbd777f2c867692e6335ee08d1f6d4" + integrity sha512-FRwj40euE2bYkG+0X5w2nEA8yAzgJRcEa7RBd0Gsdkb9/tPM2pctVVAvnOUTbcXo2VmIHPo0Ae94Gl9vRHfKzg== + "@types/http-status-codes@^1.2.0": version "1.2.0" resolved "https://registry.yarnpkg.com/@types/http-status-codes/-/http-status-codes-1.2.0.tgz#6e5244835aaf7164dd306f1d4d2dfdbb2159d909" @@ -868,7 +873,7 @@ globals@^12.1.0: dependencies: type-fest "^0.8.1" -google-protobuf@^3.13.0, google-protobuf@^3.6.1: +google-protobuf@^3.6.1: version "3.13.0" resolved "https://registry.yarnpkg.com/google-protobuf/-/google-protobuf-3.13.0.tgz#909c5983d75dd6101ed57c79e0528d000cdc3251" integrity sha512-ZIf3qfLFayVrPvAjeKKxO5FRF1/NwRxt6Dko+fWEMuHwHbZx8/fcaAao9b0wCM6kr8qeg2te8XTpyuvKuD9aKw== diff --git a/benchmark/.gitignore b/benchmark/.gitignore new file mode 100644 index 00000000..cbff8d41 --- /dev/null +++ b/benchmark/.gitignore @@ -0,0 +1,3 @@ +/node_modules/ +/artillery_output.html +/artillery_output.json diff --git a/benchmark/package-lock.json b/benchmark/package-lock.json new file mode 100644 index 00000000..4d8a4edf --- /dev/null +++ b/benchmark/package-lock.json @@ -0,0 +1,1970 @@ +{ + "name": "workadventure-artillery", + "version": "1.0.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@types/node": { + "version": "14.6.4", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.6.4.tgz", + "integrity": "sha512-Wk7nG1JSaMfMpoMJDKUsWYugliB2Vy55pdjLpmLixeyMi7HizW2I/9QoxsPCkXl3dO+ZOVqPumKaDUv5zJu2uQ==" + }, + "after": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz", + "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=" + }, + "ajv": { + "version": "6.12.4", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.4.tgz", + "integrity": "sha512-eienB2c9qVQs2KWexhkrdMLVDoIQCz5KSeLxwg9Lzk4DOfBtIK9PQwwufcsn1jjGuf9WZmqPMbGxOzfcuphJCQ==", + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ansi-align": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-2.0.0.tgz", + "integrity": "sha1-w2rsy6VjuJzrVW82kPCx2eNUf38=", + "requires": { + "string-width": "^2.0.0" + } + }, + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "arraybuffer.slice": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz", + "integrity": "sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog==" + }, + "arrivals": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/arrivals/-/arrivals-2.1.2.tgz", + "integrity": "sha512-g3+rxhxUen2H4+PPBOz6U6pkQ4esBuQPna1rPskgK1jamBdDZeoppyB2vPUM/l0ccunwRrq4r2rKgCvc2FnrFA==", + "requires": { + "debug": "^4.0.1", + "nanotimer": "0.3.14" + }, + "dependencies": { + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "requires": { + "ms": "^2.1.1" + } + }, + "nanotimer": { + "version": "0.3.14", + "resolved": "https://registry.npmjs.org/nanotimer/-/nanotimer-0.3.14.tgz", + "integrity": "sha1-ENgR+NBkeIGACWzh+WxwhG/Voro=" + } + } + }, + "artillery": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/artillery/-/artillery-1.6.1.tgz", + "integrity": "sha512-yRUqYziBsnAuzBM4G3d1uJ0YvbyxLF3e7BsjMxguzOaNxxdAFAady2CBJWe1BrPM4yLnW6lH/O6AcSG/CPzjfw==", + "requires": { + "arrivals": "^2.1.2", + "artillery-plugin-statsd": "^2.2.1", + "async": "^1.5.2", + "chalk": "1.1.3", + "cheerio": "^1.0.0-rc.2", + "commander": "2.9.0", + "csv-parse": "^4.4.6", + "debug": "^2.2.0", + "deep-equal": "^1.0.1", + "deep-for-each": "^3.0.0", + "driftless": "^2.0.3", + "esprima": "^4.0.0", + "filtrex": "^0.5.4", + "js-yaml": "^3.13.1", + "jsck": "^0.3.2", + "jsonpath": "^1.0.2", + "lodash": "^4.17.13", + "moment": "^2.22.1", + "nanotimer": "^0.3.15", + "opn": "^5.3.0", + "ora": "^1.3.0", + "pidusage": "^1.1.6", + "rc": "^1.1.6", + "request": "^2.88.0", + "socket.io-client": "^2.1.0", + "socketio-wildcard": "^2.0.0", + "stats-lite": "^2.1.0", + "tmp": "0.0.28", + "tough-cookie": "^2.3.4", + "try-require": "^1.2.1", + "update-notifier": "^2.1.0", + "uuid": "^2.0.3", + "ws": "^5.1.1" + } + }, + "artillery-plugin-statsd": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/artillery-plugin-statsd/-/artillery-plugin-statsd-2.2.1.tgz", + "integrity": "sha512-Zn6hxi11p1Rpazopm8bZkIqhIA5laTE3/amEhLsE933o8bgvrAJBblpsZ45vhmURztsglqC9yxSCQyW27yUZmQ==", + "requires": { + "debug": "^3.1.0", + "lodash": "^4.17.11", + "lynx": "^0.2.0" + }, + "dependencies": { + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "asn1": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", + "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", + "requires": { + "safer-buffer": "~2.1.0" + } + }, + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" + }, + "async": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=" + }, + "async-limiter": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", + "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==" + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" + }, + "aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" + }, + "aws4": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.10.1.tgz", + "integrity": "sha512-zg7Hz2k5lI8kb7U32998pRRFin7zJlkfezGJjUc2heaD4Pw2wObakCDVzkKztTm/Ln7eiVvYsjqak0Ed4LkMDA==" + }, + "backo2": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", + "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=" + }, + "base64-arraybuffer": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz", + "integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg=" + }, + "bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "requires": { + "tweetnacl": "^0.14.3" + } + }, + "better-assert": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz", + "integrity": "sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI=", + "requires": { + "callsite": "1.0.0" + } + }, + "blob": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.5.tgz", + "integrity": "sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig==" + }, + "boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=" + }, + "boxen": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-1.3.0.tgz", + "integrity": "sha512-TNPjfTr432qx7yOjQyaXm3dSR0MH9vXp7eT1BFSl/C51g+EFnOR9hTg1IreahGBmDNCehscshe45f+C1TBZbLw==", + "requires": { + "ansi-align": "^2.0.0", + "camelcase": "^4.0.0", + "chalk": "^2.0.1", + "cli-boxes": "^1.0.0", + "string-width": "^2.0.0", + "term-size": "^1.2.0", + "widest-line": "^2.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "callsite": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz", + "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA=" + }, + "camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=" + }, + "capture-stack-trace": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.1.tgz", + "integrity": "sha512-mYQLZnx5Qt1JgB1WEiMCf2647plpGeQ2NMR/5L0HNZzGQo4fuSPnK+wjfPnKZV0aiJDgzmWqqkV/g7JD+DW0qw==" + }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "cheerio": { + "version": "1.0.0-rc.3", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.3.tgz", + "integrity": "sha512-0td5ijfUPuubwLUu0OBoe98gZj8C/AA+RW3v67GPlGOrvxWjZmBXiBCRU+I8VEiNyJzjth40POfHiz2RB3gImA==", + "requires": { + "css-select": "~1.2.0", + "dom-serializer": "~0.1.1", + "entities": "~1.1.1", + "htmlparser2": "^3.9.1", + "lodash": "^4.15.0", + "parse5": "^3.0.1" + } + }, + "ci-info": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.6.0.tgz", + "integrity": "sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A==" + }, + "cli-boxes": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-1.0.0.tgz", + "integrity": "sha1-T6kXw+WclKAEzWH47lCdplFocUM=" + }, + "cli-cursor": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", + "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", + "requires": { + "restore-cursor": "^2.0.0" + } + }, + "cli-spinners": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-1.3.1.tgz", + "integrity": "sha512-1QL4544moEsDVH9T/l6Cemov/37iv1RtoKf7NJ04A60+4MREXNfx/QvavbH6QoGdsD4N4Mwy49cmaINR/o2mdg==" + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "commander": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz", + "integrity": "sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=", + "requires": { + "graceful-readlink": ">= 1.0.0" + } + }, + "component-bind": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz", + "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=" + }, + "component-emitter": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", + "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=" + }, + "component-inherit": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz", + "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=" + }, + "configstore": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-3.1.5.tgz", + "integrity": "sha512-nlOhI4+fdzoK5xmJ+NY+1gZK56bwEaWZr8fYuXohZ9Vkc1o3a4T/R3M+yE/w7x/ZVJ1zF8c+oaOvF0dztdUgmA==", + "requires": { + "dot-prop": "^4.2.1", + "graceful-fs": "^4.1.2", + "make-dir": "^1.0.0", + "unique-string": "^1.0.0", + "write-file-atomic": "^2.0.0", + "xdg-basedir": "^3.0.0" + } + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + }, + "create-error-class": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz", + "integrity": "sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=", + "requires": { + "capture-stack-trace": "^1.0.0" + } + }, + "cross-spawn": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", + "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", + "requires": { + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "crypto-random-string": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz", + "integrity": "sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4=" + }, + "css-select": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", + "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", + "requires": { + "boolbase": "~1.0.0", + "css-what": "2.1", + "domutils": "1.5.1", + "nth-check": "~1.0.1" + } + }, + "css-what": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz", + "integrity": "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==" + }, + "csv-parse": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/csv-parse/-/csv-parse-4.12.0.tgz", + "integrity": "sha512-wPQl3H79vWLPI8cgKFcQXl0NBgYYEqVnT1i6/So7OjMpsI540oD7p93r3w6fDSyPvwkTepG05F69/7AViX2lXg==" + }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "requires": { + "assert-plus": "^1.0.0" + } + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + }, + "dependencies": { + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "deep-equal": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", + "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", + "requires": { + "is-arguments": "^1.0.4", + "is-date-object": "^1.0.1", + "is-regex": "^1.0.4", + "object-is": "^1.0.1", + "object-keys": "^1.1.1", + "regexp.prototype.flags": "^1.2.0" + } + }, + "deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" + }, + "deep-for-each": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/deep-for-each/-/deep-for-each-3.0.0.tgz", + "integrity": "sha512-pPN+0f8jlnNP+z90qqOdxGghJU5XM6oBDhvAR+qdQzjCg5pk/7VPPvKK1GqoXEFkHza6ZS+Otzzvmr0g3VUaKw==", + "requires": { + "lodash.isplainobject": "^4.0.6" + } + }, + "deep-is": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=" + }, + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "requires": { + "object-keys": "^1.0.12" + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" + }, + "dom-serializer": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.1.tgz", + "integrity": "sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA==", + "requires": { + "domelementtype": "^1.3.0", + "entities": "^1.1.1" + } + }, + "domelementtype": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", + "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==" + }, + "domhandler": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", + "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", + "requires": { + "domelementtype": "1" + } + }, + "domutils": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", + "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", + "requires": { + "dom-serializer": "0", + "domelementtype": "1" + } + }, + "dot-prop": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.1.tgz", + "integrity": "sha512-l0p4+mIuJIua0mhxGoh4a+iNL9bmeK5DvnSVQa6T0OhrVmaEa1XScX5Etc673FePCJOArq/4Pa2cLGODUWTPOQ==", + "requires": { + "is-obj": "^1.0.0" + } + }, + "driftless": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/driftless/-/driftless-2.0.3.tgz", + "integrity": "sha512-hSDKsQphnL4O0XLAiyWQ8EiM9suXH0Qd4gMtwF86b5wygGV8r95w0JcA38FOmx9N3LjFCIHLG2winLPNken4Tg==", + "requires": { + "present": "^0.0.3" + } + }, + "duplexer3": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", + "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=" + }, + "ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "requires": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "engine.io-client": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.4.3.tgz", + "integrity": "sha512-0NGY+9hioejTEJCaSJZfWZLk4FPI9dN+1H1C4+wj2iuFba47UgZbJzfWs4aNFajnX/qAaYKbe2lLTfEEWzCmcw==", + "requires": { + "component-emitter": "~1.3.0", + "component-inherit": "0.0.3", + "debug": "~4.1.0", + "engine.io-parser": "~2.2.0", + "has-cors": "1.1.0", + "indexof": "0.0.1", + "parseqs": "0.0.5", + "parseuri": "0.0.5", + "ws": "~6.1.0", + "xmlhttprequest-ssl": "~1.5.4", + "yeast": "0.1.2" + }, + "dependencies": { + "component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" + }, + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "requires": { + "ms": "^2.1.1" + } + }, + "ws": { + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.1.4.tgz", + "integrity": "sha512-eqZfL+NE/YQc1/ZynhojeV8q+H050oR8AZ2uIev7RU10svA9ZnJUddHcOUZTJLinZ9yEfdA2kSATS2qZK5fhJA==", + "requires": { + "async-limiter": "~1.0.0" + } + } + } + }, + "engine.io-parser": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.2.0.tgz", + "integrity": "sha512-6I3qD9iUxotsC5HEMuuGsKA0cXerGz+4uGcXQEkfBidgKf0amsjrrtwcbwK/nzpZBxclXlV7gGl9dgWvu4LF6w==", + "requires": { + "after": "0.8.2", + "arraybuffer.slice": "~0.0.7", + "base64-arraybuffer": "0.1.5", + "blob": "0.0.5", + "has-binary2": "~1.0.2" + } + }, + "entities": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", + "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==" + }, + "es-abstract": { + "version": "1.17.6", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.6.tgz", + "integrity": "sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw==", + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.0", + "is-regex": "^1.1.0", + "object-inspect": "^1.7.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.0", + "string.prototype.trimend": "^1.0.1", + "string.prototype.trimstart": "^1.0.1" + } + }, + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + }, + "escodegen": { + "version": "1.14.3", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", + "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", + "requires": { + "esprima": "^4.0.1", + "estraverse": "^4.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1", + "source-map": "~0.6.1" + } + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" + }, + "execa": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", + "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", + "requires": { + "cross-spawn": "^5.0.1", + "get-stream": "^3.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + } + }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + }, + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" + }, + "filtrex": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/filtrex/-/filtrex-0.5.4.tgz", + "integrity": "sha1-mAddUY8GjE9Yt7WJoifZi9n2OV0=" + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" + }, + "form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + } + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=" + }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "requires": { + "assert-plus": "^1.0.0" + } + }, + "global-dirs": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz", + "integrity": "sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=", + "requires": { + "ini": "^1.3.4" + } + }, + "got": { + "version": "6.7.1", + "resolved": "https://registry.npmjs.org/got/-/got-6.7.1.tgz", + "integrity": "sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=", + "requires": { + "create-error-class": "^3.0.0", + "duplexer3": "^0.1.4", + "get-stream": "^3.0.0", + "is-redirect": "^1.0.0", + "is-retry-allowed": "^1.0.0", + "is-stream": "^1.0.0", + "lowercase-keys": "^1.0.0", + "safe-buffer": "^5.0.1", + "timed-out": "^4.0.0", + "unzip-response": "^2.0.1", + "url-parse-lax": "^1.0.0" + } + }, + "graceful-fs": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", + "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==" + }, + "graceful-readlink": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", + "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=" + }, + "har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" + }, + "har-validator": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", + "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", + "requires": { + "ajv": "^6.12.3", + "har-schema": "^2.0.0" + } + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "has-binary2": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-binary2/-/has-binary2-1.0.3.tgz", + "integrity": "sha512-G1LWKhDSvhGeAQ8mPVQlqNcOB2sJdwATtZKl2pDKKHfpf/rYj24lkinxf69blJbnsvtqqNU+L3SL50vzZhXOnw==", + "requires": { + "isarray": "2.0.1" + } + }, + "has-cors": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz", + "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=" + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "has-symbols": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", + "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==" + }, + "htmlparser2": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", + "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", + "requires": { + "domelementtype": "^1.3.1", + "domhandler": "^2.3.0", + "domutils": "^1.5.1", + "entities": "^1.1.1", + "inherits": "^2.0.1", + "readable-stream": "^3.1.1" + } + }, + "http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "requires": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + } + }, + "import-lazy": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", + "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=" + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=" + }, + "indexof": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", + "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=" + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "ini": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", + "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==" + }, + "is-arguments": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.0.4.tgz", + "integrity": "sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA==" + }, + "is-callable": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.1.tgz", + "integrity": "sha512-wliAfSzx6V+6WfMOmus1xy0XvSgf/dlStkvTfq7F0g4bOIW0PSUbnyse3NhDwdyYS1ozfUtAAySqTws3z9Eqgg==" + }, + "is-ci": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.2.1.tgz", + "integrity": "sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg==", + "requires": { + "ci-info": "^1.5.0" + } + }, + "is-date-object": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", + "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==" + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" + }, + "is-installed-globally": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.1.0.tgz", + "integrity": "sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA=", + "requires": { + "global-dirs": "^0.1.0", + "is-path-inside": "^1.0.0" + } + }, + "is-npm": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-1.0.0.tgz", + "integrity": "sha1-8vtjpl5JBbQGyGBydloaTceTufQ=" + }, + "is-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=" + }, + "is-path-inside": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", + "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", + "requires": { + "path-is-inside": "^1.0.1" + } + }, + "is-redirect": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz", + "integrity": "sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ=" + }, + "is-regex": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz", + "integrity": "sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==", + "requires": { + "has-symbols": "^1.0.1" + } + }, + "is-retry-allowed": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz", + "integrity": "sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==" + }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" + }, + "is-symbol": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", + "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", + "requires": { + "has-symbols": "^1.0.1" + } + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" + }, + "is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=" + }, + "isarray": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", + "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=" + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" + }, + "isnumber": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isnumber/-/isnumber-1.0.0.tgz", + "integrity": "sha1-Dj+XWbWB2Z3YUIbw7Cp0kJz63QE=" + }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" + }, + "js-yaml": { + "version": "3.14.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.0.tgz", + "integrity": "sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==", + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" + }, + "jsck": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/jsck/-/jsck-0.3.2.tgz", + "integrity": "sha1-jgazG7V7AJDlA91O5q0PJp3/GlU=" + }, + "json-schema": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" + }, + "jsonpath": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/jsonpath/-/jsonpath-1.0.2.tgz", + "integrity": "sha512-rmzlgFZiQPc6q4HDyK8s9Qb4oxBnI5sF61y/Co5PV0lc3q2bIuRsNdueVbhoSHdKM4fxeimphOAtfz47yjCfeA==", + "requires": { + "esprima": "1.2.2", + "static-eval": "2.0.2", + "underscore": "1.7.0" + }, + "dependencies": { + "esprima": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-1.2.2.tgz", + "integrity": "sha1-dqD9Zvz+FU/SkmZ9wmQBl1CxZXs=" + } + } + }, + "jsprim": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + } + }, + "latest-version": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-3.1.0.tgz", + "integrity": "sha1-ogU4P+oyKzO1rjsYq+4NwvNW7hU=", + "requires": { + "package-json": "^4.0.0" + } + }, + "levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "requires": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + } + }, + "lodash": { + "version": "4.17.20", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", + "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==" + }, + "lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=" + }, + "log-symbols": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", + "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", + "requires": { + "chalk": "^2.0.1" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "lowercase-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==" + }, + "lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "lynx": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/lynx/-/lynx-0.2.0.tgz", + "integrity": "sha1-eeZnRTDaQYPoeVO9aGFx4HDaULk=", + "requires": { + "mersenne": "~0.0.3", + "statsd-parser": "~0.0.4" + } + }, + "make-dir": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", + "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", + "requires": { + "pify": "^3.0.0" + } + }, + "mersenne": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/mersenne/-/mersenne-0.0.4.tgz", + "integrity": "sha1-QB/ex+whzbngPNPTAhOY2iGycIU=" + }, + "mime-db": { + "version": "1.44.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", + "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==" + }, + "mime-types": { + "version": "2.1.27", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", + "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", + "requires": { + "mime-db": "1.44.0" + } + }, + "mimic-fn": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==" + }, + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" + }, + "moment": { + "version": "2.27.0", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.27.0.tgz", + "integrity": "sha512-al0MUK7cpIcglMv3YF13qSgdAIqxHTO7brRtaz3DlSULbqfazqkc5kEjNrLDOM7fsjshoFIihnU8snrP7zUvhQ==" + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "nanotimer": { + "version": "0.3.15", + "resolved": "https://registry.npmjs.org/nanotimer/-/nanotimer-0.3.15.tgz", + "integrity": "sha1-KA0nfbkUbspvilcLVyq68qmsx1Q=" + }, + "npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "requires": { + "path-key": "^2.0.0" + } + }, + "nth-check": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", + "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", + "requires": { + "boolbase": "~1.0.0" + } + }, + "oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" + }, + "object-component": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/object-component/-/object-component-0.0.3.tgz", + "integrity": "sha1-8MaapQ78lbhmwYb0AKM3acsvEpE=" + }, + "object-inspect": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.8.0.tgz", + "integrity": "sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA==" + }, + "object-is": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.2.tgz", + "integrity": "sha512-5lHCz+0uufF6wZ7CRFWJN3hp8Jqblpgve06U5CMQ3f//6iDjPr2PEo9MWCjEssDsa+UZEL4PkFpr+BMop6aKzQ==", + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + } + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" + }, + "object.assign": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", + "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", + "requires": { + "define-properties": "^1.1.2", + "function-bind": "^1.1.1", + "has-symbols": "^1.0.0", + "object-keys": "^1.0.11" + } + }, + "onetime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", + "requires": { + "mimic-fn": "^1.0.0" + } + }, + "opn": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/opn/-/opn-5.5.0.tgz", + "integrity": "sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==", + "requires": { + "is-wsl": "^1.1.0" + } + }, + "optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "requires": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + } + }, + "ora": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/ora/-/ora-1.4.0.tgz", + "integrity": "sha512-iMK1DOQxzzh2MBlVsU42G80mnrvUhqsMh74phHtDlrcTZPK0pH6o7l7DRshK+0YsxDyEuaOkziVdvM3T0QTzpw==", + "requires": { + "chalk": "^2.1.0", + "cli-cursor": "^2.1.0", + "cli-spinners": "^1.0.1", + "log-symbols": "^2.1.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" + }, + "p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=" + }, + "package-json": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/package-json/-/package-json-4.0.1.tgz", + "integrity": "sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0=", + "requires": { + "got": "^6.7.1", + "registry-auth-token": "^3.0.1", + "registry-url": "^3.0.3", + "semver": "^5.1.0" + } + }, + "parse5": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-3.0.3.tgz", + "integrity": "sha512-rgO9Zg5LLLkfJF9E6CCmXlSE4UVceloys8JrFqCcHloC3usd/kJCyPDwH2SOlzix2j3xaP9sUX3e8+kvkuleAA==", + "requires": { + "@types/node": "*" + } + }, + "parseqs": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.5.tgz", + "integrity": "sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0=", + "requires": { + "better-assert": "~1.0.0" + } + }, + "parseuri": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.5.tgz", + "integrity": "sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo=", + "requires": { + "better-assert": "~1.0.0" + } + }, + "path-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=" + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=" + }, + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" + }, + "pidusage": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pidusage/-/pidusage-1.2.0.tgz", + "integrity": "sha512-OGo+iSOk44HRJ8q15AyG570UYxcm5u+R99DI8Khu8P3tKGkVu5EZX4ywHglWSTMNNXQ274oeGpYrvFEhDIFGPg==" + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" + }, + "prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=" + }, + "prepend-http": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", + "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=" + }, + "present": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/present/-/present-0.0.3.tgz", + "integrity": "sha1-Wu+4pd32s0xldDvxzeU1I6rBwFo=" + }, + "pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" + }, + "psl": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", + "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==" + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" + }, + "qs": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" + }, + "rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "requires": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + } + }, + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "regexp.prototype.flags": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz", + "integrity": "sha512-2+Q0C5g951OlYlJz6yu5/M33IcsESLlLfsyIaLJaG4FA2r4yP8MvVMJUUP/fVBkSpbbbZlS5gynbEWLipiiXiQ==", + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1" + } + }, + "registry-auth-token": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.4.0.tgz", + "integrity": "sha512-4LM6Fw8eBQdwMYcES4yTnn2TqIasbXuwDx3um+QRs7S55aMKCBKBxvPXl2RiUjHwuJLTyYfxSpmfSAjQpcuP+A==", + "requires": { + "rc": "^1.1.6", + "safe-buffer": "^5.0.1" + } + }, + "registry-url": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz", + "integrity": "sha1-PU74cPc93h138M+aOBQyRE4XSUI=", + "requires": { + "rc": "^1.0.1" + } + }, + "request": { + "version": "2.88.2", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", + "requires": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + }, + "dependencies": { + "uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" + } + } + }, + "restore-cursor": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", + "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", + "requires": { + "onetime": "^2.0.0", + "signal-exit": "^3.0.2" + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + }, + "semver-diff": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-2.1.0.tgz", + "integrity": "sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY=", + "requires": { + "semver": "^5.0.3" + } + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=" + }, + "signal-exit": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", + "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==" + }, + "socket.io-client": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.3.0.tgz", + "integrity": "sha512-cEQQf24gET3rfhxZ2jJ5xzAOo/xhZwK+mOqtGRg5IowZsMgwvHwnf/mCRapAAkadhM26y+iydgwsXGObBB5ZdA==", + "requires": { + "backo2": "1.0.2", + "base64-arraybuffer": "0.1.5", + "component-bind": "1.0.0", + "component-emitter": "1.2.1", + "debug": "~4.1.0", + "engine.io-client": "~3.4.0", + "has-binary2": "~1.0.2", + "has-cors": "1.1.0", + "indexof": "0.0.1", + "object-component": "0.0.3", + "parseqs": "0.0.5", + "parseuri": "0.0.5", + "socket.io-parser": "~3.3.0", + "to-array": "0.1.4" + }, + "dependencies": { + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "socket.io-parser": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.3.0.tgz", + "integrity": "sha512-hczmV6bDgdaEbVqhAeVMM/jfUfzuEZHsQg6eOmLgJht6G3mPKMxYm75w2+qhAQZ+4X+1+ATZ+QFKeOZD5riHng==", + "requires": { + "component-emitter": "1.2.1", + "debug": "~3.1.0", + "isarray": "2.0.1" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "socketio-wildcard": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/socketio-wildcard/-/socketio-wildcard-2.0.0.tgz", + "integrity": "sha1-JGboMidrGRY1Y77ncjiHR/kSR1s=" + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "optional": true + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" + }, + "sshpk": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", + "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", + "requires": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + } + }, + "static-eval": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/static-eval/-/static-eval-2.0.2.tgz", + "integrity": "sha512-N/D219Hcr2bPjLxPiV+TQE++Tsmrady7TqAJugLy7Xk1EumfDWS/f5dtBbkRCGE7wKKXuYockQoj8Rm2/pVKyg==", + "requires": { + "escodegen": "^1.8.1" + } + }, + "stats-lite": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/stats-lite/-/stats-lite-2.2.0.tgz", + "integrity": "sha512-/Kz55rgUIv2KP2MKphwYT/NCuSfAlbbMRv2ZWw7wyXayu230zdtzhxxuXXcvsc6EmmhS8bSJl3uS1wmMHFumbA==", + "requires": { + "isnumber": "~1.0.0" + } + }, + "statsd-parser": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/statsd-parser/-/statsd-parser-0.0.4.tgz", + "integrity": "sha1-y9JDlTzELv/VSLXSI4jtaJ7GOb0=" + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, + "string.prototype.trimend": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz", + "integrity": "sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g==", + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + } + }, + "string.prototype.trimstart": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz", + "integrity": "sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw==", + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + } + }, + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "requires": { + "safe-buffer": "~5.2.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=" + }, + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" + }, + "term-size": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/term-size/-/term-size-1.2.0.tgz", + "integrity": "sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk=", + "requires": { + "execa": "^0.7.0" + } + }, + "timed-out": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", + "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=" + }, + "tmp": { + "version": "0.0.28", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.28.tgz", + "integrity": "sha1-Fyc1t/YU6nrzlmT6hM8N5OUV0SA=", + "requires": { + "os-tmpdir": "~1.0.1" + } + }, + "to-array": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz", + "integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA=" + }, + "tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "requires": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + } + }, + "try-require": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/try-require/-/try-require-1.2.1.tgz", + "integrity": "sha1-NEiaLKwMCcHMEO2RugEVlNQzO+I=" + }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" + }, + "type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "requires": { + "prelude-ls": "~1.1.2" + } + }, + "underscore": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.7.0.tgz", + "integrity": "sha1-a7rwh3UA02vjTsqlhODbn+8DUgk=" + }, + "unique-string": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz", + "integrity": "sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo=", + "requires": { + "crypto-random-string": "^1.0.0" + } + }, + "unzip-response": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-2.0.1.tgz", + "integrity": "sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c=" + }, + "update-notifier": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-2.5.0.tgz", + "integrity": "sha512-gwMdhgJHGuj/+wHJJs9e6PcCszpxR1b236igrOkUofGhqJuG+amlIKwApH1IW1WWl7ovZxsX49lMBWLxSdm5Dw==", + "requires": { + "boxen": "^1.2.1", + "chalk": "^2.0.1", + "configstore": "^3.0.0", + "import-lazy": "^2.1.0", + "is-ci": "^1.0.10", + "is-installed-globally": "^0.1.0", + "is-npm": "^1.0.0", + "latest-version": "^3.0.0", + "semver-diff": "^2.0.0", + "xdg-basedir": "^3.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "uri-js": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.0.tgz", + "integrity": "sha512-B0yRTzYdUCCn9n+F4+Gh4yIDtMQcaJsmYBDsTSG8g/OejKBodLQ2IHfN3bM7jUsRXndopT7OIXWdYqc1fjmV6g==", + "requires": { + "punycode": "^2.1.0" + } + }, + "url-parse-lax": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", + "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=", + "requires": { + "prepend-http": "^1.0.1" + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "uuid": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.3.tgz", + "integrity": "sha1-Z+LoY3lyFVMN/zGOW/nc6/1Hsho=" + }, + "verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "requires": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "requires": { + "isexe": "^2.0.0" + } + }, + "widest-line": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-2.0.1.tgz", + "integrity": "sha512-Ba5m9/Fa4Xt9eb2ELXt77JxVDV8w7qQrH0zS/TWSJdLyAwQjWoOzpzj5lwVftDz6n/EOu3tNACS84v509qwnJA==", + "requires": { + "string-width": "^2.1.1" + } + }, + "word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==" + }, + "write-file-atomic": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", + "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", + "requires": { + "graceful-fs": "^4.1.11", + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.2" + } + }, + "ws": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-5.2.2.tgz", + "integrity": "sha512-jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA==", + "requires": { + "async-limiter": "~1.0.0" + } + }, + "xdg-basedir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-3.0.0.tgz", + "integrity": "sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ=" + }, + "xmlhttprequest-ssl": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz", + "integrity": "sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4=" + }, + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" + }, + "yeast": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz", + "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=" + } + } +} diff --git a/docker-compose.yaml b/docker-compose.yaml index beddf025..ce16a31b 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -33,6 +33,7 @@ services: command: yarn run start volumes: - ./front:/usr/src/app + - ./messages:/usr/src/messages/ labels: - "traefik.http.routers.front.rule=Host(`play.workadventure.localhost`)" - "traefik.http.routers.front.entryPoints=web,traefik" @@ -75,6 +76,7 @@ services: ALLOW_ARTILLERY: "true" volumes: - ./back:/usr/src/app + - ./messages:/usr/src/messages/ labels: - "traefik.http.routers.back.rule=Host(`api.workadventure.localhost`)" - "traefik.http.routers.back.entryPoints=web" diff --git a/front/src/Connection.ts b/front/src/Connection.ts index 5062ca7f..7a60cfba 100644 --- a/front/src/Connection.ts +++ b/front/src/Connection.ts @@ -1,7 +1,7 @@ import Axios from "axios"; import {API_URL} from "./Enum/EnvironmentVariable"; import {MessageUI} from "./Logger/MessageUI"; -import {SetPlayerDetailsMessage} from "./Messages/SetPlayerDetailsMessage"; +import {SetPlayerDetailsMessage} from "../../messages/generated/src/proto/messages_pb" const SocketIo = require('socket.io-client'); import Socket = SocketIOClient.Socket; @@ -170,10 +170,10 @@ export class Connection implements Connection { reject(error); }); - connection.socket.emit(EventMessage.SET_PLAYER_DETAILS, { - name: name, - characterLayers: characterLayersSelected - } as SetPlayerDetailsMessage, (id: string) => { + const message = new SetPlayerDetailsMessage(); + message.setName(name); + message.setCharacterlayersList(characterLayersSelected); + connection.socket.emit(EventMessage.SET_PLAYER_DETAILS, message.serializeBinary().buffer, (id: string) => { connection.userId = id; }); diff --git a/front/src/Messages/SetPlayerDetailsMessage.ts b/front/src/Messages/SetPlayerDetailsMessage.ts deleted file mode 100644 index 789833ff..00000000 --- a/front/src/Messages/SetPlayerDetailsMessage.ts +++ /dev/null @@ -1,4 +0,0 @@ -export interface SetPlayerDetailsMessage { - name: string, - characterLayers: string[] -} diff --git a/messages/.gitignore b/messages/.gitignore new file mode 100644 index 00000000..2ccbe465 --- /dev/null +++ b/messages/.gitignore @@ -0,0 +1 @@ +/node_modules/ diff --git a/messages/generated/.gitignore b/messages/generated/.gitignore new file mode 100644 index 00000000..8eba6c8d --- /dev/null +++ b/messages/generated/.gitignore @@ -0,0 +1 @@ +src/ diff --git a/messages/generated/src/proto/messages_pb.d.ts b/messages/generated/src/proto/messages_pb.d.ts new file mode 100644 index 00000000..4c700d90 --- /dev/null +++ b/messages/generated/src/proto/messages_pb.d.ts @@ -0,0 +1,31 @@ +// package: +// file: src/proto/messages.proto + +import * as jspb from "google-protobuf"; + +export class SetPlayerDetailsMessage extends jspb.Message { + getName(): string; + setName(value: string): void; + + clearCharacterlayersList(): void; + getCharacterlayersList(): Array; + setCharacterlayersList(value: Array): void; + addCharacterlayers(value: string, index?: number): string; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): SetPlayerDetailsMessage.AsObject; + static toObject(includeInstance: boolean, msg: SetPlayerDetailsMessage): SetPlayerDetailsMessage.AsObject; + static extensions: {[key: number]: jspb.ExtensionFieldInfo}; + static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo}; + static serializeBinaryToWriter(message: SetPlayerDetailsMessage, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): SetPlayerDetailsMessage; + static deserializeBinaryFromReader(message: SetPlayerDetailsMessage, reader: jspb.BinaryReader): SetPlayerDetailsMessage; +} + +export namespace SetPlayerDetailsMessage { + export type AsObject = { + name: string, + characterlayersList: Array, + } +} + diff --git a/messages/generated/src/proto/messages_pb.js b/messages/generated/src/proto/messages_pb.js new file mode 100644 index 00000000..27ffc622 --- /dev/null +++ b/messages/generated/src/proto/messages_pb.js @@ -0,0 +1,223 @@ +// source: src/proto/messages.proto +/** + * @fileoverview + * @enhanceable + * @suppress {messageConventions} JS Compiler reports an error if a variable or + * field starts with 'MSG_' and isn't a translatable message. + * @public + */ +// GENERATED CODE -- DO NOT EDIT! + +var jspb = require('google-protobuf'); +var goog = jspb; +var global = Function('return this')(); + +goog.exportSymbol('proto.SetPlayerDetailsMessage', null, global); +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.SetPlayerDetailsMessage = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, proto.SetPlayerDetailsMessage.repeatedFields_, null); +}; +goog.inherits(proto.SetPlayerDetailsMessage, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.SetPlayerDetailsMessage.displayName = 'proto.SetPlayerDetailsMessage'; +} + +/** + * List of repeated fields within this message type. + * @private {!Array} + * @const + */ +proto.SetPlayerDetailsMessage.repeatedFields_ = [2]; + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.SetPlayerDetailsMessage.prototype.toObject = function(opt_includeInstance) { + return proto.SetPlayerDetailsMessage.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.SetPlayerDetailsMessage} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.SetPlayerDetailsMessage.toObject = function(includeInstance, msg) { + var f, obj = { + name: jspb.Message.getFieldWithDefault(msg, 1, ""), + characterlayersList: (f = jspb.Message.getRepeatedField(msg, 2)) == null ? undefined : f + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.SetPlayerDetailsMessage} + */ +proto.SetPlayerDetailsMessage.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.SetPlayerDetailsMessage; + return proto.SetPlayerDetailsMessage.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.SetPlayerDetailsMessage} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.SetPlayerDetailsMessage} + */ +proto.SetPlayerDetailsMessage.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {string} */ (reader.readString()); + msg.setName(value); + break; + case 2: + var value = /** @type {string} */ (reader.readString()); + msg.addCharacterlayers(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.SetPlayerDetailsMessage.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.SetPlayerDetailsMessage.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.SetPlayerDetailsMessage} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.SetPlayerDetailsMessage.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getName(); + if (f.length > 0) { + writer.writeString( + 1, + f + ); + } + f = message.getCharacterlayersList(); + if (f.length > 0) { + writer.writeRepeatedString( + 2, + f + ); + } +}; + + +/** + * optional string name = 1; + * @return {string} + */ +proto.SetPlayerDetailsMessage.prototype.getName = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, "")); +}; + + +/** + * @param {string} value + * @return {!proto.SetPlayerDetailsMessage} returns this + */ +proto.SetPlayerDetailsMessage.prototype.setName = function(value) { + return jspb.Message.setProto3StringField(this, 1, value); +}; + + +/** + * repeated string characterLayers = 2; + * @return {!Array} + */ +proto.SetPlayerDetailsMessage.prototype.getCharacterlayersList = function() { + return /** @type {!Array} */ (jspb.Message.getRepeatedField(this, 2)); +}; + + +/** + * @param {!Array} value + * @return {!proto.SetPlayerDetailsMessage} returns this + */ +proto.SetPlayerDetailsMessage.prototype.setCharacterlayersList = function(value) { + return jspb.Message.setField(this, 2, value || []); +}; + + +/** + * @param {string} value + * @param {number=} opt_index + * @return {!proto.SetPlayerDetailsMessage} returns this + */ +proto.SetPlayerDetailsMessage.prototype.addCharacterlayers = function(value, opt_index) { + return jspb.Message.addToRepeatedField(this, 2, value, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.SetPlayerDetailsMessage} returns this + */ +proto.SetPlayerDetailsMessage.prototype.clearCharacterlayersList = function() { + return this.setCharacterlayersList([]); +}; + + +goog.object.extend(exports, proto); diff --git a/back/src/proto/messages.proto b/messages/messages.proto similarity index 100% rename from back/src/proto/messages.proto rename to messages/messages.proto diff --git a/messages/package.json b/messages/package.json new file mode 100644 index 00000000..e2548499 --- /dev/null +++ b/messages/package.json @@ -0,0 +1,43 @@ +{ + "name": "workadventure-messages", + "version": "1.0.0", + "description": "", + "main": "generated/src/proto/messages_pb.js", + "scripts": { + "proto": "protoc --plugin=\"protoc-gen-ts=./node_modules/.bin/protoc-gen-ts\" --js_out=\"import_style=commonjs,binary:src/messages/generated\" --ts_out=\"src/messages/generated\" src/messages/messages.proto", + "proto:watch": "inotifywait -q -m -e close_write src/messages/messages.proto | while read -r filename event; do yarn run proto; done" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/thecodingmachine/workadventure.git" + }, + "contributors": [ + { + "name": "Grégoire Parant", + "email": "g.parant@thecodingmachine.com" + }, + { + "name": "David Négrier", + "email": "d.negrier@thecodingmachine.com" + }, + { + "name": "Arthmaël Poly", + "email": "a.poly@thecodingmachine.com" + } + ], + "license": "SEE LICENSE IN LICENSE.txt", + "bugs": { + "url": "https://github.com/thecodingmachine/workadventure/issues" + }, + "homepage": "https://github.com/thecodingmachine/workadventure#readme", + "dependencies": { + "google-protobuf": "^3.13.0", + "typescript": "^3.8.3" + }, + "devDependencies": { + "ts-node-dev": "^1.0.0-pre.44", + "@types/google-protobuf": "^3.7.3", + "concurrently": "^5.3.0", + "ts-protoc-gen": "^0.13.0" + } +} diff --git a/messages/yarn.lock b/messages/yarn.lock new file mode 100644 index 00000000..9e883f1d --- /dev/null +++ b/messages/yarn.lock @@ -0,0 +1,889 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@types/google-protobuf@^3.7.3": + version "3.7.3" + resolved "https://registry.yarnpkg.com/@types/google-protobuf/-/google-protobuf-3.7.3.tgz#429512e541bbd777f2c867692e6335ee08d1f6d4" + integrity sha512-FRwj40euE2bYkG+0X5w2nEA8yAzgJRcEa7RBd0Gsdkb9/tPM2pctVVAvnOUTbcXo2VmIHPo0Ae94Gl9vRHfKzg== + +"@types/strip-bom@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@types/strip-bom/-/strip-bom-3.0.0.tgz#14a8ec3956c2e81edb7520790aecf21c290aebd2" + integrity sha1-FKjsOVbC6B7bdSB5CuzyHCkK69I= + +"@types/strip-json-comments@0.0.30": + version "0.0.30" + resolved "https://registry.yarnpkg.com/@types/strip-json-comments/-/strip-json-comments-0.0.30.tgz#9aa30c04db212a9a0649d6ae6fd50accc40748a1" + integrity sha512-7NQmHra/JILCd1QqpSzl8+mJRc8ZHz3uDm8YV1Ks9IhK0epEiTw8aIErbvH9PI+6XbqhyIQy3462nEsn7UVzjQ== + +ansi-regex@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" + integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== + +ansi-styles@^3.2.0, ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + +anymatch@~3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.1.tgz#c55ecf02185e2469259399310c173ce31233b142" + integrity sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +arg@^4.1.0: + version "4.1.3" + resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" + integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== + +array-find-index@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1" + integrity sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E= + +balanced-match@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" + integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= + +binary-extensions@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.1.0.tgz#30fa40c9e7fe07dbc895678cd287024dea241dd9" + integrity sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ== + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +braces@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + +buffer-from@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" + integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== + +camelcase-keys@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7" + integrity sha1-MIvur/3ygRkFHvodkyITyRuPkuc= + dependencies: + camelcase "^2.0.0" + map-obj "^1.0.0" + +camelcase@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f" + integrity sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8= + +camelcase@^5.0.0: + version "5.3.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" + integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== + +chalk@^2.4.2: + version "2.4.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +chokidar@^3.4.0: + version "3.4.2" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.4.2.tgz#38dc8e658dec3809741eb3ef7bb0a47fe424232d" + integrity sha512-IZHaDeBeI+sZJRX7lGcXsdzgvZqKv6sECqsbErJA4mHWfpRrD8B97kSFN4cQz6nGBGiuFia1MKR4d6c1o8Cv7A== + dependencies: + anymatch "~3.1.1" + braces "~3.0.2" + glob-parent "~5.1.0" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.4.0" + optionalDependencies: + fsevents "~2.1.2" + +cliui@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5" + integrity sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA== + dependencies: + string-width "^3.1.0" + strip-ansi "^5.2.0" + wrap-ansi "^5.1.0" + +color-convert@^1.9.0: + version "1.9.3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= + +concurrently@^5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/concurrently/-/concurrently-5.3.0.tgz#7500de6410d043c912b2da27de3202cb489b1e7b" + integrity sha512-8MhqOB6PWlBfA2vJ8a0bSFKATOdWlHiQlk11IfmQBPaHVP8oP2gsh2MObE6UR3hqDHqvaIvLTyceNW6obVuFHQ== + dependencies: + chalk "^2.4.2" + date-fns "^2.0.1" + lodash "^4.17.15" + read-pkg "^4.0.1" + rxjs "^6.5.2" + spawn-command "^0.0.2-1" + supports-color "^6.1.0" + tree-kill "^1.2.2" + yargs "^13.3.0" + +currently-unhandled@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea" + integrity sha1-mI3zP+qxke95mmE2nddsF635V+o= + dependencies: + array-find-index "^1.0.1" + +date-fns@^2.0.1: + version "2.16.1" + resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.16.1.tgz#05775792c3f3331da812af253e1a935851d3834b" + integrity sha512-sAJVKx/FqrLYHAQeN7VpJrPhagZc9R4ImZIWYRFZaaohR3KzmuK88touwsSwSVT8Qcbd4zoDsnGfX4GFB4imyQ== + +dateformat@~1.0.4-1.2.3: + version "1.0.12" + resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-1.0.12.tgz#9f124b67594c937ff706932e4a642cca8dbbfee9" + integrity sha1-nxJLZ1lMk3/3BpMuSmQsyo27/uk= + dependencies: + get-stdin "^4.0.1" + meow "^3.3.0" + +decamelize@^1.1.2, decamelize@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" + integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= + +diff@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" + integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== + +dynamic-dedupe@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/dynamic-dedupe/-/dynamic-dedupe-0.3.0.tgz#06e44c223f5e4e94d78ef9db23a6515ce2f962a1" + integrity sha1-BuRMIj9eTpTXjvnbI6ZRXOL5YqE= + dependencies: + xtend "^4.0.0" + +emoji-regex@^7.0.1: + version "7.0.3" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" + integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== + +error-ex@^1.2.0, error-ex@^1.3.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== + dependencies: + is-arrayish "^0.2.1" + +escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= + +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + +find-up@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" + integrity sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8= + dependencies: + path-exists "^2.0.0" + pinkie-promise "^2.0.0" + +find-up@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" + integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== + dependencies: + locate-path "^3.0.0" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= + +fsevents@~2.1.2: + version "2.1.3" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.3.tgz#fb738703ae8d2f9fe900c33836ddebee8b97f23e" + integrity sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ== + +get-caller-file@^2.0.1: + version "2.0.5" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== + +get-stdin@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe" + integrity sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4= + +glob-parent@~5.1.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.1.tgz#b6c1ef417c4e5663ea498f1c45afac6916bbc229" + integrity sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ== + dependencies: + is-glob "^4.0.1" + +glob@^7.1.3: + version "7.1.6" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" + integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +google-protobuf@^3.13.0, google-protobuf@^3.6.1: + version "3.13.0" + resolved "https://registry.yarnpkg.com/google-protobuf/-/google-protobuf-3.13.0.tgz#909c5983d75dd6101ed57c79e0528d000cdc3251" + integrity sha512-ZIf3qfLFayVrPvAjeKKxO5FRF1/NwRxt6Dko+fWEMuHwHbZx8/fcaAao9b0wCM6kr8qeg2te8XTpyuvKuD9aKw== + +graceful-fs@^4.1.2: + version "4.2.4" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" + integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= + +hosted-git-info@^2.1.4: + version "2.8.8" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.8.tgz#7539bd4bc1e0e0a895815a2e0262420b12858488" + integrity sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg== + +indent-string@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80" + integrity sha1-ji1INIdCEhtKghi3oTfppSBJ3IA= + dependencies: + repeating "^2.0.0" + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= + +is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + dependencies: + binary-extensions "^2.0.0" + +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= + +is-finite@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.1.0.tgz#904135c77fb42c0641d6aa1bcdbc4daa8da082f3" + integrity sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w== + +is-fullwidth-code-point@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" + integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= + +is-glob@^4.0.1, is-glob@~4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" + integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== + dependencies: + is-extglob "^2.1.1" + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +is-utf8@^0.2.0: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" + integrity sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI= + +json-parse-better-errors@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" + integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== + +load-json-file@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" + integrity sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA= + dependencies: + graceful-fs "^4.1.2" + parse-json "^2.2.0" + pify "^2.0.0" + pinkie-promise "^2.0.0" + strip-bom "^2.0.0" + +locate-path@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" + integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== + dependencies: + p-locate "^3.0.0" + path-exists "^3.0.0" + +lodash@^4.17.15: + version "4.17.20" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52" + integrity sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA== + +loud-rejection@^1.0.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f" + integrity sha1-W0b4AUft7leIcPCG0Eghz5mOVR8= + dependencies: + currently-unhandled "^0.4.1" + signal-exit "^3.0.0" + +make-error@^1.1.1: + version "1.3.6" + resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" + integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== + +map-obj@^1.0.0, map-obj@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" + integrity sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0= + +meow@^3.3.0: + version "3.7.0" + resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb" + integrity sha1-cstmi0JSKCkKu/qFaJJYcwioAfs= + dependencies: + camelcase-keys "^2.0.0" + decamelize "^1.1.2" + loud-rejection "^1.0.0" + map-obj "^1.0.1" + minimist "^1.1.3" + normalize-package-data "^2.3.4" + object-assign "^4.0.1" + read-pkg-up "^1.0.1" + redent "^1.0.0" + trim-newlines "^1.0.0" + +minimatch@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== + dependencies: + brace-expansion "^1.1.7" + +minimist@^1.1.3, minimist@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" + integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== + +mkdirp@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" + integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== + +normalize-package-data@^2.3.2, normalize-package-data@^2.3.4: + version "2.5.0" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" + integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== + dependencies: + hosted-git-info "^2.1.4" + resolve "^1.10.0" + semver "2 || 3 || 4 || 5" + validate-npm-package-license "^3.0.1" + +normalize-path@^3.0.0, normalize-path@~3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +object-assign@^4.0.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= + +once@^1.3.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= + dependencies: + wrappy "1" + +p-limit@^2.0.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" + integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== + dependencies: + p-try "^2.0.0" + +p-locate@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" + integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== + dependencies: + p-limit "^2.0.0" + +p-try@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" + integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== + +parse-json@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" + integrity sha1-9ID0BDTvgHQfhGkJn43qGPVaTck= + dependencies: + error-ex "^1.2.0" + +parse-json@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" + integrity sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA= + dependencies: + error-ex "^1.3.1" + json-parse-better-errors "^1.0.1" + +path-exists@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" + integrity sha1-D+tsZPD8UY2adU3V77YscCJ2H0s= + dependencies: + pinkie-promise "^2.0.0" + +path-exists@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" + integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= + +path-parse@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" + integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== + +path-type@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" + integrity sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE= + dependencies: + graceful-fs "^4.1.2" + pify "^2.0.0" + pinkie-promise "^2.0.0" + +picomatch@^2.0.4, picomatch@^2.2.1: + version "2.2.2" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" + integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== + +pify@^2.0.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= + +pify@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" + integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= + +pinkie-promise@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" + integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o= + dependencies: + pinkie "^2.0.0" + +pinkie@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" + integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA= + +read-pkg-up@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" + integrity sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI= + dependencies: + find-up "^1.0.0" + read-pkg "^1.0.0" + +read-pkg@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" + integrity sha1-9f+qXs0pyzHAR0vKfXVra7KePyg= + dependencies: + load-json-file "^1.0.0" + normalize-package-data "^2.3.2" + path-type "^1.0.0" + +read-pkg@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-4.0.1.tgz#963625378f3e1c4d48c85872b5a6ec7d5d093237" + integrity sha1-ljYlN48+HE1IyFhytabsfV0JMjc= + dependencies: + normalize-package-data "^2.3.2" + parse-json "^4.0.0" + pify "^3.0.0" + +readdirp@~3.4.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.4.0.tgz#9fdccdf9e9155805449221ac645e8303ab5b9ada" + integrity sha512-0xe001vZBnJEK+uKcj8qOhyAKPzIT+gStxWr3LCB0DwcXR5NZJ3IaC+yGnHCYzB/S7ov3m3EEbZI2zeNvX+hGQ== + dependencies: + picomatch "^2.2.1" + +redent@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde" + integrity sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94= + dependencies: + indent-string "^2.1.0" + strip-indent "^1.0.1" + +repeating@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" + integrity sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo= + dependencies: + is-finite "^1.0.0" + +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= + +require-main-filename@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" + integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== + +resolve@^1.0.0, resolve@^1.10.0: + version "1.17.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.17.0.tgz#b25941b54968231cc2d1bb76a79cb7f2c0bf8444" + integrity sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w== + dependencies: + path-parse "^1.0.6" + +rimraf@^2.6.1: + version "2.7.1" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" + integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== + dependencies: + glob "^7.1.3" + +rxjs@^6.5.2: + version "6.6.3" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.3.tgz#8ca84635c4daa900c0d3967a6ee7ac60271ee552" + integrity sha512-trsQc+xYYXZ3urjOiJOuCOa5N3jAZ3eiSpQB5hIT8zGlL2QfnHLJ2r7GMkBGuIausdJN1OneaI6gQlsqNHHmZQ== + dependencies: + tslib "^1.9.0" + +"semver@2 || 3 || 4 || 5": + version "5.7.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" + integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== + +set-blocking@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" + integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= + +signal-exit@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" + integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== + +source-map-support@^0.5.12, source-map-support@^0.5.17: + version "0.5.19" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61" + integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map@^0.6.0: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +spawn-command@^0.0.2-1: + version "0.0.2-1" + resolved "https://registry.yarnpkg.com/spawn-command/-/spawn-command-0.0.2-1.tgz#62f5e9466981c1b796dc5929937e11c9c6921bd0" + integrity sha1-YvXpRmmBwbeW3Fkpk34RycaSG9A= + +spdx-correct@^3.0.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9" + integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w== + dependencies: + spdx-expression-parse "^3.0.0" + spdx-license-ids "^3.0.0" + +spdx-exceptions@^2.1.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" + integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== + +spdx-expression-parse@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" + integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== + dependencies: + spdx-exceptions "^2.1.0" + spdx-license-ids "^3.0.0" + +spdx-license-ids@^3.0.0: + version "3.0.6" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.6.tgz#c80757383c28abf7296744998cbc106ae8b854ce" + integrity sha512-+orQK83kyMva3WyPf59k1+Y525csj5JejicWut55zeTWANuN17qSiSLUXWtzHeNWORSvT7GLDJ/E/XiIWoXBTw== + +string-width@^3.0.0, string-width@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" + integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== + dependencies: + emoji-regex "^7.0.1" + is-fullwidth-code-point "^2.0.0" + strip-ansi "^5.1.0" + +strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" + integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== + dependencies: + ansi-regex "^4.1.0" + +strip-bom@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" + integrity sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4= + dependencies: + is-utf8 "^0.2.0" + +strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= + +strip-indent@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2" + integrity sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI= + dependencies: + get-stdin "^4.0.1" + +strip-json-comments@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" + integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= + +supports-color@^5.3.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + +supports-color@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3" + integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ== + dependencies: + has-flag "^3.0.0" + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + +tree-kill@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/tree-kill/-/tree-kill-1.2.2.tgz#4ca09a9092c88b73a7cdc5e8a01b507b0790a0cc" + integrity sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A== + +trim-newlines@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613" + integrity sha1-WIeWa7WCpFA6QetST301ARgVphM= + +ts-node-dev@^1.0.0-pre.44: + version "1.0.0-pre.62" + resolved "https://registry.yarnpkg.com/ts-node-dev/-/ts-node-dev-1.0.0-pre.62.tgz#835644c43669b659a880379b9d06df86cef665ad" + integrity sha512-hfsEuCqUZOVnZ86l7A3icxD1nFt1HEmLVbx4YOHCkrbSHPBNWcw+IczAPZo3zz7YiOm9vs0xG6OENNrkgm89tQ== + dependencies: + chokidar "^3.4.0" + dateformat "~1.0.4-1.2.3" + dynamic-dedupe "^0.3.0" + minimist "^1.2.5" + mkdirp "^1.0.4" + resolve "^1.0.0" + rimraf "^2.6.1" + source-map-support "^0.5.12" + tree-kill "^1.2.2" + ts-node "^8.10.2" + tsconfig "^7.0.0" + +ts-node@^8.10.2: + version "8.10.2" + resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-8.10.2.tgz#eee03764633b1234ddd37f8db9ec10b75ec7fb8d" + integrity sha512-ISJJGgkIpDdBhWVu3jufsWpK3Rzo7bdiIXJjQc0ynKxVOVcg2oIrf2H2cejminGrptVc6q6/uynAHNCuWGbpVA== + dependencies: + arg "^4.1.0" + diff "^4.0.1" + make-error "^1.1.1" + source-map-support "^0.5.17" + yn "3.1.1" + +ts-protoc-gen@^0.13.0: + version "0.13.0" + resolved "https://registry.yarnpkg.com/ts-protoc-gen/-/ts-protoc-gen-0.13.0.tgz#2763ae4e4a1a7d7001d53d2f3043357c691701ea" + integrity sha512-j18X4rkDBbG/ZHUJy88WFeZP6mStGow5uREaohowlHXTu3/N7WcpyPhb7Vh6wN38ERmc/AkT9gqT98+vtlRhJA== + dependencies: + google-protobuf "^3.6.1" + +tsconfig@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/tsconfig/-/tsconfig-7.0.0.tgz#84538875a4dc216e5c4a5432b3a4dec3d54e91b7" + integrity sha512-vZXmzPrL+EmC4T/4rVlT2jNVMWCi/O4DIiSj3UHg1OE5kCKbk4mfrXc6dZksLgRM/TZlKnousKH9bbTazUWRRw== + dependencies: + "@types/strip-bom" "^3.0.0" + "@types/strip-json-comments" "0.0.30" + strip-bom "^3.0.0" + strip-json-comments "^2.0.0" + +tslib@^1.9.0: + version "1.13.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.13.0.tgz#c881e13cc7015894ed914862d276436fa9a47043" + integrity sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q== + +typescript@^3.8.3: + version "3.9.7" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.9.7.tgz#98d600a5ebdc38f40cb277522f12dc800e9e25fa" + integrity sha512-BLbiRkiBzAwsjut4x/dsibSTB6yWpwT5qWmC2OfuCg3GgVQCSgMs4vEctYPhsaGtd0AeuuHMkjZ2h2WG8MSzRw== + +validate-npm-package-license@^3.0.1: + version "3.0.4" + resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" + integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== + dependencies: + spdx-correct "^3.0.0" + spdx-expression-parse "^3.0.0" + +which-module@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" + integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= + +wrap-ansi@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09" + integrity sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q== + dependencies: + ansi-styles "^3.2.0" + string-width "^3.0.0" + strip-ansi "^5.0.0" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= + +xtend@^4.0.0: + version "4.0.2" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" + integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== + +y18n@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" + integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w== + +yargs-parser@^13.1.2: + version "13.1.2" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38" + integrity sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg== + dependencies: + camelcase "^5.0.0" + decamelize "^1.2.0" + +yargs@^13.3.0: + version "13.3.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.2.tgz#ad7ffefec1aa59565ac915f82dccb38a9c31a2dd" + integrity sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw== + dependencies: + cliui "^5.0.0" + find-up "^3.0.0" + get-caller-file "^2.0.1" + require-directory "^2.1.1" + require-main-filename "^2.0.0" + set-blocking "^2.0.0" + string-width "^3.0.0" + which-module "^2.0.0" + y18n "^4.0.0" + yargs-parser "^13.1.2" + +yn@3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" + integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== From ed9552b62b531166332b09182481a13ac3bdca00 Mon Sep 17 00:00:00 2001 From: arp Date: Thu, 17 Sep 2020 18:08:20 +0200 Subject: [PATCH 144/313] added a register route via token --- back/package.json | 1 + back/src/App.ts | 3 ++ back/src/Controller/AdminController.ts | 40 ++++++++++++++++++++++++++ back/src/Enum/EnvironmentVariable.ts | 8 ++++-- back/yarn.lock | 12 ++++++++ front/src/index.ts | 3 +- front/src/register.ts | 12 ++++++++ 7 files changed, 76 insertions(+), 3 deletions(-) create mode 100644 back/src/Controller/AdminController.ts create mode 100644 front/src/register.ts diff --git a/back/package.json b/back/package.json index a20c876f..396991f2 100644 --- a/back/package.json +++ b/back/package.json @@ -41,6 +41,7 @@ "@types/jsonwebtoken": "^8.3.8", "@types/socket.io": "^2.1.4", "@types/uuidv4": "^5.0.0", + "axios": "^0.20.0", "body-parser": "^1.19.0", "express": "^4.17.1", "generic-type-guard": "^3.2.0", diff --git a/back/src/App.ts b/back/src/App.ts index e12afdb4..d1f7392f 100644 --- a/back/src/App.ts +++ b/back/src/App.ts @@ -7,6 +7,7 @@ import bodyParser = require('body-parser'); import * as http from "http"; import {MapController} from "./Controller/MapController"; import {PrometheusController} from "./Controller/PrometheusController"; +import {AdminController} from "./Controller/AdminController"; class App { public app: Application; @@ -15,6 +16,7 @@ class App { public authenticateController: AuthenticateController; public mapController: MapController; public prometheusController: PrometheusController; + private adminController: AdminController; constructor() { this.app = express(); @@ -32,6 +34,7 @@ class App { this.authenticateController = new AuthenticateController(this.app); this.mapController = new MapController(this.app); this.prometheusController = new PrometheusController(this.app, this.ioSocketController); + this.adminController = new AdminController(this.app); } // TODO add session user diff --git a/back/src/Controller/AdminController.ts b/back/src/Controller/AdminController.ts new file mode 100644 index 00000000..d6f1d23d --- /dev/null +++ b/back/src/Controller/AdminController.ts @@ -0,0 +1,40 @@ +import {Application, Request, Response} from "express"; +import {OK} from "http-status-codes"; +import {ADMIN_API_URL} from "../Enum/EnvironmentVariable"; +import Axios, {AxiosError} from "axios"; + +export class AdminController { + App : Application; + + constructor(App : Application) { + this.App = App; + this.getLoginUrlByToken(); + } + + + getLoginUrlByToken(){ + this.App.get("/register/:token", async (req: Request, res: Response) => { + if (!ADMIN_API_URL) { + return res.status(500).send('No admin backoffice set!'); + } + const token:string = req.params.token; + + //todo add ADMIN_API_TOKEN authorization + let response = null + try { + console.log(ADMIN_API_URL+'/api/login-url/'+token); + response = await Axios.get(ADMIN_API_URL+'/api/login-url/'+token) + } catch (e) { + console.log(e.message) + return res.status(500).send('An error happened'); + } + + const teamSlug = response.data.teamSlug; + const worldSlug = response.data.worldSlug; + const roomSlug = response.data.roomSlug; + return res.status(OK).send({ + loginUrl: '/@/'+teamSlug+'/'+worldSlug+'/'+roomSlug, + }); + }); + } +} diff --git a/back/src/Enum/EnvironmentVariable.ts b/back/src/Enum/EnvironmentVariable.ts index d8baaf89..c910bb66 100644 --- a/back/src/Enum/EnvironmentVariable.ts +++ b/back/src/Enum/EnvironmentVariable.ts @@ -3,11 +3,15 @@ const URL_ROOM_STARTED = "/Floor0/floor0.json"; const MINIMUM_DISTANCE = process.env.MINIMUM_DISTANCE ? Number(process.env.MINIMUM_DISTANCE) : 64; const GROUP_RADIUS = process.env.GROUP_RADIUS ? Number(process.env.GROUP_RADIUS) : 48; const ALLOW_ARTILLERY = process.env.ALLOW_ARTILLERY ? process.env.ALLOW_ARTILLERY == 'true' : false; +const ADMIN_API_URL = process.env.ADMIN_API_URL || null; +const ADMIN_API_TOKEN = process.env.ADMIN_API_TOKEN || null; export { SECRET_KEY, URL_ROOM_STARTED, MINIMUM_DISTANCE, + ADMIN_API_URL, + ADMIN_API_TOKEN, GROUP_RADIUS, - ALLOW_ARTILLERY -} + ALLOW_ARTILLERY, +} \ No newline at end of file diff --git a/back/yarn.lock b/back/yarn.lock index f660a5c8..c498ff43 100644 --- a/back/yarn.lock +++ b/back/yarn.lock @@ -244,6 +244,13 @@ async-limiter@~1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" +axios@^0.20.0: + version "0.20.0" + resolved "https://registry.yarnpkg.com/axios/-/axios-0.20.0.tgz#057ba30f04884694993a8cd07fa394cff11c50bd" + integrity sha512-ANA4rr2BDcmmAQLOKft2fufrtuvlqR+cXNNinUmvfeSNCOF98PZL+7M/v1zIdGo7OLjEA9J2gXJL+j4zGsl0bA== + dependencies: + follow-redirects "^1.10.0" + backo2@1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/backo2/-/backo2-1.0.2.tgz#31ab1ac8b129363463e35b3ebb69f4dfcfba7947" @@ -774,6 +781,11 @@ flatted@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.2.tgz#4575b21e2bcee7434aa9be662f4b7b5f9c2b5138" +follow-redirects@^1.10.0: + version "1.13.0" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.13.0.tgz#b42e8d93a2a7eea5ed88633676d6597bc8e384db" + integrity sha512-aq6gF1BEKje4a9i9+5jimNFIpq4Q1WiwBToeRK5NvZBd/TRsmW8BsJfOEGkr76TbOyPVD3OVDN910EcUNtRYEA== + forwarded@~0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84" diff --git a/front/src/index.ts b/front/src/index.ts index 2356bd0a..8be675fb 100644 --- a/front/src/index.ts +++ b/front/src/index.ts @@ -10,10 +10,11 @@ import {FourOFourScene} from "./Phaser/Reconnecting/FourOFourScene"; import WebGLRenderer = Phaser.Renderer.WebGL.WebGLRenderer; import {OutlinePipeline} from "./Phaser/Shaders/OutlinePipeline"; import {CustomizeScene} from "./Phaser/Login/CustomizeScene"; -import {HtmlUtils} from "./WebRtc/HtmlUtils"; import {CoWebsiteManager} from "./WebRtc/CoWebsiteManager"; +import {redirectIfToken} from "./register"; //CoWebsiteManager.loadCoWebsite('https://thecodingmachine.com'); +redirectIfToken(); // Load Jitsi if the environment variable is set. if (JITSI_URL) { diff --git a/front/src/register.ts b/front/src/register.ts new file mode 100644 index 00000000..0cc9dd13 --- /dev/null +++ b/front/src/register.ts @@ -0,0 +1,12 @@ +import Axios from "axios"; +import {API_URL} from "./Enum/EnvironmentVariable"; +declare let window:Window; + +export function redirectIfToken() { + const match = window.location.toString().match(/\/register\/(.+)/); + if (match) { + Axios.get(`${API_URL}/register/`+match[1]).then((res) => { + window.location = res.data.loginUrl; + }); + } +} \ No newline at end of file From e9ca8721a664f41c8023daf4032ea3eefa2d3fe3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20N=C3=A9grier?= Date: Fri, 18 Sep 2020 13:57:38 +0200 Subject: [PATCH 145/313] Migrating userId to "int32" to save some space and adding userMoves message in protobuf --- back/src/Controller/AuthenticateController.ts | 8 +- back/src/Controller/IoSocketController.ts | 141 ++++++----- back/src/Model/Group.ts | 9 +- back/src/Model/User.ts | 2 +- back/src/Model/Websocket/ExSocketInterface.ts | 3 +- .../Model/Websocket/GroupUpdateInterface.ts | 2 +- back/src/Model/Websocket/Identificable.ts | 2 +- back/src/Model/Websocket/MessageUserJoined.ts | 2 +- back/src/Model/Websocket/MessageUserMoved.ts | 2 +- .../Model/Websocket/MessageUserPosition.ts | 2 +- .../Model/Websocket/UserInGroupInterface.ts | 2 +- back/src/Model/Websocket/UserMovesMessage.ts | 11 - .../Model/Websocket/WebRtcSignalMessage.ts | 4 +- back/src/Model/World.ts | 10 +- back/tests/PositionNotifierTest.ts | 8 +- back/tests/WorldTest.ts | 38 +-- docker-compose.yaml | 10 +- front/src/Connection.ts | 72 ++++-- front/src/Phaser/Entity/RemotePlayer.ts | 4 +- front/src/Phaser/Game/AddPlayerInterface.ts | 2 +- front/src/Phaser/Game/GameScene.ts | 16 +- .../Game/PlayersPositionInterpolator.ts | 12 +- front/src/WebRtc/MediaManager.ts | 30 +-- front/src/WebRtc/ScreenSharingPeer.ts | 12 +- front/src/WebRtc/SimplePeer.ts | 30 +-- front/src/WebRtc/VideoPeer.ts | 10 +- messages/generated/.gitignore | 3 +- messages/generated/src/proto/messages_pb.d.ts | 31 --- messages/generated/src/proto/messages_pb.js | 223 ------------------ messages/messages.proto | 35 +++ messages/package.json | 4 +- 31 files changed, 295 insertions(+), 445 deletions(-) delete mode 100644 back/src/Model/Websocket/UserMovesMessage.ts delete mode 100644 messages/generated/src/proto/messages_pb.d.ts delete mode 100644 messages/generated/src/proto/messages_pb.js diff --git a/back/src/Controller/AuthenticateController.ts b/back/src/Controller/AuthenticateController.ts index 71e538a4..83880f45 100644 --- a/back/src/Controller/AuthenticateController.ts +++ b/back/src/Controller/AuthenticateController.ts @@ -6,7 +6,7 @@ import { uuid } from 'uuidv4'; export interface TokenInterface { name: string, - userId: string + userUuid: string } export class AuthenticateController { @@ -28,12 +28,12 @@ export class AuthenticateController { }); }*/ //TODO check user email for The Coding Machine game - const userId = uuid(); - const token = Jwt.sign({name: param.name, userId: userId} as TokenInterface, SECRET_KEY, {expiresIn: '24h'}); + const userUuid = uuid(); + const token = Jwt.sign({name: param.name, userUuid: userUuid} as TokenInterface, SECRET_KEY, {expiresIn: '24h'}); return res.status(OK).send({ token: token, mapUrlStart: URL_ROOM_STARTED, - userId: userId, + userId: userUuid, }); }); } diff --git a/back/src/Controller/IoSocketController.ts b/back/src/Controller/IoSocketController.ts index 38950e35..a2732fb8 100644 --- a/back/src/Controller/IoSocketController.ts +++ b/back/src/Controller/IoSocketController.ts @@ -20,13 +20,14 @@ import {isWebRtcSignalMessageInterface} from "../Model/Websocket/WebRtcSignalMes import {UserInGroupInterface} from "../Model/Websocket/UserInGroupInterface"; import {isItemEventMessageInterface} from "../Model/Websocket/ItemEventMessage"; import {uuid} from 'uuidv4'; -import {isUserMovesInterface} from "../Model/Websocket/UserMovesMessage"; import {isViewport} from "../Model/Websocket/ViewportMessage"; import {GroupUpdateInterface} from "_Model/Websocket/GroupUpdateInterface"; import {Movable} from "../Model/Movable"; -import {SetPlayerDetailsMessage} from "../../../messages/generated/src/proto/messages_pb"; +import {PositionMessage, SetPlayerDetailsMessage} from "../../../messages/generated/messages_pb"; +import {UserMovesMessage} from "../../../messages/generated/messages_pb"; +import Direction = PositionMessage.Direction; -enum SockerIoEvent { +enum SocketIoEvent { CONNECTION = "connection", DISCONNECT = "disconnect", JOIN_ROOM = "join-room", // bi-directional @@ -52,7 +53,7 @@ function emitInBatch(socket: ExSocketInterface, event: string | symbol, payload: if (socket.batchTimeout === null) { socket.batchTimeout = setTimeout(() => { - socket.emit(SockerIoEvent.BATCH, socket.batchedMessages); + socket.emit(SocketIoEvent.BATCH, socket.batchedMessages); socket.batchedMessages = []; socket.batchTimeout = null; }, 100); @@ -62,9 +63,10 @@ function emitInBatch(socket: ExSocketInterface, event: string | symbol, payload: export class IoSocketController { public readonly Io: socketIO.Server; private Worlds: Map = new Map(); - private sockets: Map = new Map(); + private sockets: Map = new Map(); private nbClientsGauge: Gauge; private nbClientsPerRoomGauge: Gauge; + private nextUserId: number = 1; constructor(server: http.Server) { this.Io = socketIO(server); @@ -90,7 +92,9 @@ export class IoSocketController { if(socket.handshake.query.token === 'test'){ if (ALLOW_ARTILLERY) { (socket as ExSocketInterface).token = socket.handshake.query.token; - (socket as ExSocketInterface).userId = uuid(); + (socket as ExSocketInterface).userId = this.nextUserId; + (socket as ExSocketInterface).userUuid = uuid(); + this.nextUserId++; (socket as ExSocketInterface).isArtillery = true; console.log((socket as ExSocketInterface).userId); next(); @@ -116,7 +120,9 @@ export class IoSocketController { } (socket as ExSocketInterface).token = socket.handshake.query.token; - (socket as ExSocketInterface).userId = tokenDecoded.userId; + (socket as ExSocketInterface).userId = this.nextUserId; + (socket as ExSocketInterface).userUuid = tokenDecoded.userUuid; + this.nextUserId++; next(); }); }); @@ -125,7 +131,7 @@ export class IoSocketController { } private isValidToken(token: object): token is TokenInterface { - if (typeof((token as TokenInterface).userId) !== 'string') { + if (typeof((token as TokenInterface).userUuid) !== 'string') { return false; } if (typeof((token as TokenInterface).name) !== 'string') { @@ -151,7 +157,7 @@ export class IoSocketController { } ioConnection() { - this.Io.on(SockerIoEvent.CONNECTION, (socket: Socket) => { + this.Io.on(SocketIoEvent.CONNECTION, (socket: Socket) => { const client : ExSocketInterface = socket as ExSocketInterface; client.batchedMessages = []; client.batchTimeout = null; @@ -176,11 +182,11 @@ export class IoSocketController { x: user x position on map y: user y position on map */ - socket.on(SockerIoEvent.JOIN_ROOM, (message: unknown, answerFn): void => { - console.log(SockerIoEvent.JOIN_ROOM, message); + socket.on(SocketIoEvent.JOIN_ROOM, (message: unknown, answerFn): void => { + console.log(SocketIoEvent.JOIN_ROOM, message); try { if (!isJoinRoomMessageInterface(message)) { - socket.emit(SockerIoEvent.MESSAGE_ERROR, {message: 'Invalid JOIN_ROOM message.'}); + socket.emit(SocketIoEvent.MESSAGE_ERROR, {message: 'Invalid JOIN_ROOM message.'}); console.warn('Invalid JOIN_ROOM message received: ', message); return; } @@ -244,11 +250,11 @@ export class IoSocketController { } }); - socket.on(SockerIoEvent.SET_VIEWPORT, (message: unknown): void => { + socket.on(SocketIoEvent.SET_VIEWPORT, (message: unknown): void => { try { //console.log('SET_VIEWPORT') if (!isViewport(message)) { - socket.emit(SockerIoEvent.MESSAGE_ERROR, {message: 'Invalid SET_VIEWPORT message.'}); + socket.emit(SocketIoEvent.MESSAGE_ERROR, {message: 'Invalid SET_VIEWPORT message.'}); console.warn('Invalid SET_VIEWPORT message received: ', message); return; } @@ -268,20 +274,47 @@ export class IoSocketController { } }); - socket.on(SockerIoEvent.USER_POSITION, (userMovesMessage: unknown): void => { + socket.on(SocketIoEvent.USER_POSITION, (message: unknown): void => { //console.log(SockerIoEvent.USER_POSITION, userMovesMessage); try { - if (!isUserMovesInterface(userMovesMessage)) { - socket.emit(SockerIoEvent.MESSAGE_ERROR, {message: 'Invalid USER_POSITION message.'}); - console.warn('Invalid USER_POSITION message received: ', userMovesMessage); - return; + const userMovesMessage = UserMovesMessage.deserializeBinary(new Uint8Array(message as ArrayBuffer)); + const userMoves = userMovesMessage.toObject(); + + const position = userMoves.position; + if (position === undefined) { + throw new Error('Position not found in message'); + } + const viewport = userMoves.viewport; + if (viewport === undefined) { + throw new Error('Viewport not found in message'); + } + + let direction: string; + switch (position.direction) { + case Direction.UP: + direction = 'up'; + break; + case Direction.DOWN: + direction = 'down'; + break; + case Direction.LEFT: + direction = 'left'; + break; + case Direction.RIGHT: + direction = 'right'; + break; } const Client = (socket as ExSocketInterface); // sending to all clients in room except sender - Client.position = userMovesMessage.position; - Client.viewport = userMovesMessage.viewport; + Client.position = { + x: position.x, + y: position.y, + direction, + moving: position.moving, + }; + Client.viewport = viewport; // update position in the world const world = this.Worlds.get(Client.roomId); @@ -297,15 +330,15 @@ export class IoSocketController { } }); - socket.on(SockerIoEvent.WEBRTC_SIGNAL, (data: unknown) => { + socket.on(SocketIoEvent.WEBRTC_SIGNAL, (data: unknown) => { this.emitVideo((socket as ExSocketInterface), data); }); - socket.on(SockerIoEvent.WEBRTC_SCREEN_SHARING_SIGNAL, (data: unknown) => { + socket.on(SocketIoEvent.WEBRTC_SCREEN_SHARING_SIGNAL, (data: unknown) => { this.emitScreenSharing((socket as ExSocketInterface), data); }); - socket.on(SockerIoEvent.DISCONNECT, () => { + socket.on(SocketIoEvent.DISCONNECT, () => { const Client = (socket as ExSocketInterface); try { //leave room @@ -335,16 +368,16 @@ export class IoSocketController { }); // Let's send the user id to the user - socket.on(SockerIoEvent.SET_PLAYER_DETAILS, (message: any, answerFn) => { - console.log(SockerIoEvent.SET_PLAYER_DETAILS, message); + socket.on(SocketIoEvent.SET_PLAYER_DETAILS, (message: any, answerFn) => { + console.log(SocketIoEvent.SET_PLAYER_DETAILS, message); const playerDetailsMessage = SetPlayerDetailsMessage.deserializeBinary(new Uint8Array(message)); const playerDetails = { name: playerDetailsMessage.getName(), characterLayers: playerDetailsMessage.getCharacterlayersList() }; - console.log(SockerIoEvent.SET_PLAYER_DETAILS, playerDetails); + console.log(SocketIoEvent.SET_PLAYER_DETAILS, playerDetails); if (!isSetPlayerDetailsMessage(playerDetails)) { - socket.emit(SockerIoEvent.MESSAGE_ERROR, {message: 'Invalid SET_PLAYER_DETAILS message.'}); + socket.emit(SocketIoEvent.MESSAGE_ERROR, {message: 'Invalid SET_PLAYER_DETAILS message.'}); console.warn('Invalid SET_PLAYER_DETAILS message received: ', playerDetails); return; } @@ -357,10 +390,10 @@ export class IoSocketController { } }); - socket.on(SockerIoEvent.SET_SILENT, (silent: unknown) => { - console.log(SockerIoEvent.SET_SILENT, silent); + socket.on(SocketIoEvent.SET_SILENT, (silent: unknown) => { + console.log(SocketIoEvent.SET_SILENT, silent); if (typeof silent !== "boolean") { - socket.emit(SockerIoEvent.MESSAGE_ERROR, {message: 'Invalid SET_SILENT message.'}); + socket.emit(SocketIoEvent.MESSAGE_ERROR, {message: 'Invalid SET_SILENT message.'}); console.warn('Invalid SET_SILENT message received: ', silent); return; } @@ -381,16 +414,16 @@ export class IoSocketController { } }); - socket.on(SockerIoEvent.ITEM_EVENT, (itemEvent: unknown) => { + socket.on(SocketIoEvent.ITEM_EVENT, (itemEvent: unknown) => { if (!isItemEventMessageInterface(itemEvent)) { - socket.emit(SockerIoEvent.MESSAGE_ERROR, {message: 'Invalid ITEM_EVENT message.'}); + socket.emit(SocketIoEvent.MESSAGE_ERROR, {message: 'Invalid ITEM_EVENT message.'}); console.warn('Invalid ITEM_EVENT message received: ', itemEvent); return; } try { const Client = (socket as ExSocketInterface); - socket.to(Client.roomId).emit(SockerIoEvent.ITEM_EVENT, itemEvent); + socket.to(Client.roomId).emit(SocketIoEvent.ITEM_EVENT, itemEvent); const world = this.Worlds.get(Client.roomId); if (!world) { @@ -408,7 +441,7 @@ export class IoSocketController { emitVideo(socket: ExSocketInterface, data: unknown){ if (!isWebRtcSignalMessageInterface(data)) { - socket.emit(SockerIoEvent.MESSAGE_ERROR, {message: 'Invalid WEBRTC_SIGNAL message.'}); + socket.emit(SocketIoEvent.MESSAGE_ERROR, {message: 'Invalid WEBRTC_SIGNAL message.'}); console.warn('Invalid WEBRTC_SIGNAL message received: ', data); return; } @@ -418,7 +451,7 @@ export class IoSocketController { console.warn("While exchanging a WebRTC signal: client with id ", data.receiverId, " does not exist. This might be a race condition."); return; } - return client.emit(SockerIoEvent.WEBRTC_SIGNAL, { + return client.emit(SocketIoEvent.WEBRTC_SIGNAL, { userId: socket.userId, signal: data.signal }); @@ -426,7 +459,7 @@ export class IoSocketController { emitScreenSharing(socket: ExSocketInterface, data: unknown){ if (!isWebRtcSignalMessageInterface(data)) { - socket.emit(SockerIoEvent.MESSAGE_ERROR, {message: 'Invalid WEBRTC_SCREEN_SHARING message.'}); + socket.emit(SocketIoEvent.MESSAGE_ERROR, {message: 'Invalid WEBRTC_SCREEN_SHARING message.'}); console.warn('Invalid WEBRTC_SCREEN_SHARING message received: ', data); return; } @@ -436,13 +469,13 @@ export class IoSocketController { console.warn("While exchanging a WEBRTC_SCREEN_SHARING signal: client with id ", data.receiverId, " does not exist. This might be a race condition."); return; } - return client.emit(SockerIoEvent.WEBRTC_SCREEN_SHARING_SIGNAL, { + return client.emit(SocketIoEvent.WEBRTC_SCREEN_SHARING_SIGNAL, { userId: socket.userId, signal: data.signal }); } - searchClientByIdOrFail(userId: string): ExSocketInterface { + searchClientByIdOrFail(userId: number): ExSocketInterface { const client: ExSocketInterface|undefined = this.sockets.get(userId); if (client === undefined) { throw new Error("Could not find user with id " + userId); @@ -481,9 +514,9 @@ export class IoSocketController { //check and create new world for a room let world = this.Worlds.get(roomId) if(world === undefined){ - world = new World((user1: string, group: Group) => { + world = new World((user1: number, group: Group) => { this.connectedUser(user1, group); - }, (user1: string, group: Group) => { + }, (user1: number, group: Group) => { this.disConnectedUser(user1, group); }, MINIMUM_DISTANCE, GROUP_RADIUS, (thing: Movable, listener: User) => { const clientListener = this.searchClientByIdOrFail(listener.id); @@ -491,9 +524,9 @@ export class IoSocketController { const clientUser = this.searchClientByIdOrFail(thing.id); const messageUserJoined = new MessageUserJoined(clientUser.userId, clientUser.name, clientUser.characterLayers, clientUser.position); - clientListener.emit(SockerIoEvent.JOIN_ROOM, messageUserJoined); + clientListener.emit(SocketIoEvent.JOIN_ROOM, messageUserJoined); } else if (thing instanceof Group) { - clientListener.emit(SockerIoEvent.GROUP_CREATE_UPDATE, { + clientListener.emit(SocketIoEvent.GROUP_CREATE_UPDATE, { position: thing.getPosition(), groupId: thing.getId() } as GroupUpdateInterface); @@ -505,10 +538,10 @@ export class IoSocketController { if (thing instanceof User) { const clientUser = this.searchClientByIdOrFail(thing.id); - clientListener.emitInBatch(SockerIoEvent.USER_MOVED, new MessageUserMoved(clientUser.userId, clientUser.position)); + clientListener.emitInBatch(SocketIoEvent.USER_MOVED, new MessageUserMoved(clientUser.userId, clientUser.position)); //console.log("Sending USER_MOVED event"); } else if (thing instanceof Group) { - clientListener.emit(SockerIoEvent.GROUP_CREATE_UPDATE, { + clientListener.emit(SocketIoEvent.GROUP_CREATE_UPDATE, { position: thing.getPosition(), groupId: thing.getId() } as GroupUpdateInterface); @@ -519,10 +552,10 @@ export class IoSocketController { const clientListener = this.searchClientByIdOrFail(listener.id); if (thing instanceof User) { const clientUser = this.searchClientByIdOrFail(thing.id); - clientListener.emit(SockerIoEvent.USER_LEFT, clientUser.userId); + clientListener.emit(SocketIoEvent.USER_LEFT, clientUser.userId); //console.log("Sending USER_LEFT event"); } else if (thing instanceof Group) { - clientListener.emit(SockerIoEvent.GROUP_DELETE, thing.getId()); + clientListener.emit(SocketIoEvent.GROUP_DELETE, thing.getId()); } else { console.error('Unexpected type for Movable.'); } @@ -533,7 +566,7 @@ export class IoSocketController { // Dispatch groups position to newly connected user world.getGroups().forEach((group: Group) => { - Client.emit(SockerIoEvent.GROUP_CREATE_UPDATE, { + Client.emit(SocketIoEvent.GROUP_CREATE_UPDATE, { position: group.getPosition(), groupId: group.getId() } as GroupUpdateInterface); @@ -578,7 +611,7 @@ export class IoSocketController { return tabs; }, []); - client.emit(SockerIoEvent.WEBRTC_START, {clients: peerClients, roomId: roomId}); + client.emit(SocketIoEvent.WEBRTC_START, {clients: peerClients, roomId: roomId}); }); } @@ -600,19 +633,19 @@ export class IoSocketController { **/ //connected user - connectedUser(userId: string, group: Group) { + connectedUser(userId: number, group: Group) { /*let Client = this.sockets.get(userId); if (Client === undefined) { return; }*/ const Client = this.searchClientByIdOrFail(userId); - this.joinWebRtcRoom(Client, group.getId()); + this.joinWebRtcRoom(Client, "webrtcroom"+group.getId()); } //disconnect user - disConnectedUser(userId: string, group: Group) { + disConnectedUser(userId: number, group: Group) { const Client = this.searchClientByIdOrFail(userId); - Client.to(group.getId()).emit(SockerIoEvent.WEBRTC_DISCONNECT, { + Client.to("webrtcroom"+group.getId()).emit(SocketIoEvent.WEBRTC_DISCONNECT, { userId: userId }); @@ -622,7 +655,7 @@ export class IoSocketController { // the other player will try connecting until a timeout happens (during this time, the connection icon will be displayed for nothing). // So we also send the disconnect event to the other player. for (const user of group.getUsers()) { - Client.emit(SockerIoEvent.WEBRTC_DISCONNECT, { + Client.emit(SocketIoEvent.WEBRTC_DISCONNECT, { userId: user.id }); } diff --git a/back/src/Model/Group.ts b/back/src/Model/Group.ts index 4909b660..43990ef4 100644 --- a/back/src/Model/Group.ts +++ b/back/src/Model/Group.ts @@ -7,7 +7,9 @@ import {Movable} from "_Model/Movable"; export class Group implements Movable { static readonly MAX_PER_GROUP = 4; - private id: string; + private static nextId: number = 1; + + private id: number; private users: Set; private connectCallback: ConnectCallback; private disconnectCallback: DisconnectCallback; @@ -17,7 +19,8 @@ export class Group implements Movable { this.users = new Set(); this.connectCallback = connectCallback; this.disconnectCallback = disconnectCallback; - this.id = uuid(); + this.id = Group.nextId; + Group.nextId++; users.forEach((user: User) => { this.join(user); @@ -28,7 +31,7 @@ export class Group implements Movable { return Array.from(this.users.values()); } - getId() : string{ + getId() : number { return this.id; } diff --git a/back/src/Model/User.ts b/back/src/Model/User.ts index 160a101c..b147e4be 100644 --- a/back/src/Model/User.ts +++ b/back/src/Model/User.ts @@ -9,7 +9,7 @@ export class User implements Movable { public group?: Group; public constructor( - public id: string, + public id: number, public position: PointInterface, public silent: boolean, diff --git a/back/src/Model/Websocket/ExSocketInterface.ts b/back/src/Model/Websocket/ExSocketInterface.ts index bbe18cbb..648bbe21 100644 --- a/back/src/Model/Websocket/ExSocketInterface.ts +++ b/back/src/Model/Websocket/ExSocketInterface.ts @@ -8,7 +8,8 @@ export interface ExSocketInterface extends Socket, Identificable { token: string; roomId: string; webRtcRoomId: string; - userId: string; + userId: number; // A temporary (autoincremented) identifier for this user + userUuid: string; // A unique identifier for this user name: string; characterLayers: string[]; position: PointInterface; diff --git a/back/src/Model/Websocket/GroupUpdateInterface.ts b/back/src/Model/Websocket/GroupUpdateInterface.ts index 45e64ea4..34a6d8b1 100644 --- a/back/src/Model/Websocket/GroupUpdateInterface.ts +++ b/back/src/Model/Websocket/GroupUpdateInterface.ts @@ -2,5 +2,5 @@ import {PositionInterface} from "_Model/PositionInterface"; export interface GroupUpdateInterface { position: PositionInterface, - groupId: string, + groupId: number, } diff --git a/back/src/Model/Websocket/Identificable.ts b/back/src/Model/Websocket/Identificable.ts index 4e3228ae..424d3a76 100644 --- a/back/src/Model/Websocket/Identificable.ts +++ b/back/src/Model/Websocket/Identificable.ts @@ -1,3 +1,3 @@ export interface Identificable { - userId: string; + userId: number; } diff --git a/back/src/Model/Websocket/MessageUserJoined.ts b/back/src/Model/Websocket/MessageUserJoined.ts index 9e993dd3..9ae7ab2c 100644 --- a/back/src/Model/Websocket/MessageUserJoined.ts +++ b/back/src/Model/Websocket/MessageUserJoined.ts @@ -1,6 +1,6 @@ import {PointInterface} from "_Model/Websocket/PointInterface"; export class MessageUserJoined { - constructor(public userId: string, public name: string, public characterLayers: string[], public position: PointInterface) { + constructor(public userId: number, public name: string, public characterLayers: string[], public position: PointInterface) { } } diff --git a/back/src/Model/Websocket/MessageUserMoved.ts b/back/src/Model/Websocket/MessageUserMoved.ts index 283c011d..e08be81b 100644 --- a/back/src/Model/Websocket/MessageUserMoved.ts +++ b/back/src/Model/Websocket/MessageUserMoved.ts @@ -1,6 +1,6 @@ import {PointInterface} from "./PointInterface"; export class MessageUserMoved { - constructor(public userId: string, public position: PointInterface) { + constructor(public userId: number, public position: PointInterface) { } } diff --git a/back/src/Model/Websocket/MessageUserPosition.ts b/back/src/Model/Websocket/MessageUserPosition.ts index 03fc6f09..08035997 100644 --- a/back/src/Model/Websocket/MessageUserPosition.ts +++ b/back/src/Model/Websocket/MessageUserPosition.ts @@ -6,6 +6,6 @@ export class Point implements PointInterface{ } export class MessageUserPosition { - constructor(public userId: string, public name: string, public characterLayers: string[], public position: PointInterface) { + constructor(public userId: number, public name: string, public characterLayers: string[], public position: PointInterface) { } } diff --git a/back/src/Model/Websocket/UserInGroupInterface.ts b/back/src/Model/Websocket/UserInGroupInterface.ts index 26cc5fd4..087f519e 100644 --- a/back/src/Model/Websocket/UserInGroupInterface.ts +++ b/back/src/Model/Websocket/UserInGroupInterface.ts @@ -1,5 +1,5 @@ export interface UserInGroupInterface { - userId: string, + userId: number, name: string, initiator: boolean } diff --git a/back/src/Model/Websocket/UserMovesMessage.ts b/back/src/Model/Websocket/UserMovesMessage.ts deleted file mode 100644 index 2277d4c4..00000000 --- a/back/src/Model/Websocket/UserMovesMessage.ts +++ /dev/null @@ -1,11 +0,0 @@ -import * as tg from "generic-type-guard"; -import {isPointInterface} from "./PointInterface"; -import {isViewport} from "./ViewportMessage"; - - -export const isUserMovesInterface = - new tg.IsInterface().withProperties({ - position: isPointInterface, - viewport: isViewport, - }).get(); -export type UserMovesInterface = tg.GuardedType; diff --git a/back/src/Model/Websocket/WebRtcSignalMessage.ts b/back/src/Model/Websocket/WebRtcSignalMessage.ts index 5a0dd1af..c0f5f8ab 100644 --- a/back/src/Model/Websocket/WebRtcSignalMessage.ts +++ b/back/src/Model/Websocket/WebRtcSignalMessage.ts @@ -7,12 +7,12 @@ export const isSignalData = export const isWebRtcSignalMessageInterface = new tg.IsInterface().withProperties({ - receiverId: tg.isString, + receiverId: tg.isNumber, signal: isSignalData }).get(); export const isWebRtcScreenSharingStartMessageInterface = new tg.IsInterface().withProperties({ - userId: tg.isString, + userId: tg.isNumber, roomId: tg.isString }).get(); export type WebRtcSignalMessageInterface = tg.GuardedType; diff --git a/back/src/Model/World.ts b/back/src/Model/World.ts index 6e739c02..dc3dcd07 100644 --- a/back/src/Model/World.ts +++ b/back/src/Model/World.ts @@ -11,15 +11,15 @@ import {PositionNotifier} from "./PositionNotifier"; import {ViewportInterface} from "_Model/Websocket/ViewportMessage"; import {Movable} from "_Model/Movable"; -export type ConnectCallback = (user: string, group: Group) => void; -export type DisconnectCallback = (user: string, group: Group) => void; +export type ConnectCallback = (user: number, group: Group) => void; +export type DisconnectCallback = (user: number, group: Group) => void; export class World { private readonly minDistance: number; private readonly groupRadius: number; // Users, sorted by ID - private readonly users: Map; + private readonly users: Map; private readonly groups: Set; private readonly connectCallback: ConnectCallback; @@ -37,7 +37,7 @@ export class World { onMoves: MovesCallback, onLeaves: LeavesCallback) { - this.users = new Map(); + this.users = new Map(); this.groups = new Set(); this.connectCallback = connectCallback; this.disconnectCallback = disconnectCallback; @@ -51,7 +51,7 @@ export class World { return Array.from(this.groups.values()); } - public getUsers(): Map { + public getUsers(): Map { return this.users; } diff --git a/back/tests/PositionNotifierTest.ts b/back/tests/PositionNotifierTest.ts index dd1e3b4b..643dd938 100644 --- a/back/tests/PositionNotifierTest.ts +++ b/back/tests/PositionNotifierTest.ts @@ -32,14 +32,14 @@ describe("PositionNotifier", () => { leaveTriggered = true; }); - const user1 = new User("1", { + const user1 = new User(1, { x: 500, y: 500, moving: false, direction: 'down' }, false); - const user2 = new User("2", { + const user2 = new User(2, { x: -9999, y: -9999, moving: false, @@ -110,14 +110,14 @@ describe("PositionNotifier", () => { leaveTriggered = true; }); - const user1 = new User("1", { + const user1 = new User(1, { x: 500, y: 500, moving: false, direction: 'down' }, false); - const user2 = new User("2", { + const user2 = new User(2, { x: -9999, y: -9999, moving: false, diff --git a/back/tests/WorldTest.ts b/back/tests/WorldTest.ts index 63e46928..9afef228 100644 --- a/back/tests/WorldTest.ts +++ b/back/tests/WorldTest.ts @@ -6,55 +6,55 @@ import { Group } from "../src/Model/Group"; describe("World", () => { it("should connect user1 and user2", () => { let connectCalledNumber: number = 0; - const connect: ConnectCallback = (user: string, group: Group): void => { + const connect: ConnectCallback = (user: number, group: Group): void => { connectCalledNumber++; } - const disconnect: DisconnectCallback = (user: string, group: Group): void => { + const disconnect: DisconnectCallback = (user: number, group: Group): void => { } const world = new World(connect, disconnect, 160, 160, () => {}, () => {}, () => {}); - world.join({ userId: "foo" }, new Point(100, 100)); + world.join({ userId: 1 }, new Point(100, 100)); - world.join({ userId: "bar" }, new Point(500, 100)); + world.join({ userId: 2 }, new Point(500, 100)); - world.updatePosition({ userId: "bar" }, new Point(261, 100)); + world.updatePosition({ userId: 2 }, new Point(261, 100)); expect(connectCalledNumber).toBe(0); - world.updatePosition({ userId: "bar" }, new Point(101, 100)); + world.updatePosition({ userId: 2 }, new Point(101, 100)); expect(connectCalledNumber).toBe(2); - world.updatePosition({ userId: "bar" }, new Point(102, 100)); + world.updatePosition({ userId: 2 }, new Point(102, 100)); expect(connectCalledNumber).toBe(2); }); it("should connect 3 users", () => { let connectCalled: boolean = false; - const connect: ConnectCallback = (user: string, group: Group): void => { + const connect: ConnectCallback = (user: number, group: Group): void => { connectCalled = true; } - const disconnect: DisconnectCallback = (user: string, group: Group): void => { + const disconnect: DisconnectCallback = (user: number, group: Group): void => { } const world = new World(connect, disconnect, 160, 160, () => {}, () => {}, () => {}); - world.join({ userId: "foo" }, new Point(100, 100)); + world.join({ userId: 1 }, new Point(100, 100)); - world.join({ userId: "bar" }, new Point(200, 100)); + world.join({ userId: 2 }, new Point(200, 100)); expect(connectCalled).toBe(true); connectCalled = false; // baz joins at the outer limit of the group - world.join({ userId: "baz" }, new Point(311, 100)); + world.join({ userId: 3 }, new Point(311, 100)); expect(connectCalled).toBe(false); - world.updatePosition({ userId: "baz" }, new Point(309, 100)); + world.updatePosition({ userId: 3 }, new Point(309, 100)); expect(connectCalled).toBe(true); }); @@ -62,27 +62,27 @@ describe("World", () => { it("should disconnect user1 and user2", () => { let connectCalled: boolean = false; let disconnectCallNumber: number = 0; - const connect: ConnectCallback = (user: string, group: Group): void => { + const connect: ConnectCallback = (user: number, group: Group): void => { connectCalled = true; } - const disconnect: DisconnectCallback = (user: string, group: Group): void => { + const disconnect: DisconnectCallback = (user: number, group: Group): void => { disconnectCallNumber++; } const world = new World(connect, disconnect, 160, 160, () => {}, () => {}, () => {}); - world.join({ userId: "foo" }, new Point(100, 100)); + world.join({ userId: 1 }, new Point(100, 100)); - world.join({ userId: "bar" }, new Point(259, 100)); + world.join({ userId: 2 }, new Point(259, 100)); expect(connectCalled).toBe(true); expect(disconnectCallNumber).toBe(0); - world.updatePosition({ userId: "bar" }, new Point(100+160+160+1, 100)); + world.updatePosition({ userId: 2 }, new Point(100+160+160+1, 100)); expect(disconnectCallNumber).toBe(2); - world.updatePosition({ userId: "bar" }, new Point(262, 100)); + world.updatePosition({ userId: 2 }, new Point(262, 100)); expect(disconnectCallNumber).toBe(2); }); diff --git a/docker-compose.yaml b/docker-compose.yaml index ce16a31b..fce76204 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -67,7 +67,7 @@ services: - "traefik.http.routers.maps-ssl.service=maps" back: - image: thecodingmachine/workadventure-back-base:latest + image: thecodingmachine/nodejs:12 command: yarn dev #command: yarn run profile environment: @@ -103,3 +103,11 @@ services: - "traefik.http.routers.website-ssl.entryPoints=websecure" - "traefik.http.routers.website-ssl.tls=true" - "traefik.http.routers.website-ssl.service=website" + + messages: + image: thecodingmachine/workadventure-back-base:latest + environment: + STARTUP_COMMAND_1: yarn install + STARTUP_COMMAND_2: yarn run proto:watch + volumes: + - ./messages:/usr/src/app diff --git a/front/src/Connection.ts b/front/src/Connection.ts index 7a60cfba..b6d4c6ee 100644 --- a/front/src/Connection.ts +++ b/front/src/Connection.ts @@ -1,13 +1,19 @@ import Axios from "axios"; import {API_URL} from "./Enum/EnvironmentVariable"; import {MessageUI} from "./Logger/MessageUI"; -import {SetPlayerDetailsMessage} from "../../messages/generated/src/proto/messages_pb" +import { + PositionMessage, + SetPlayerDetailsMessage, + UserMovesMessage, + ViewportMessage +} from "../../messages/generated/messages_pb" const SocketIo = require('socket.io-client'); import Socket = SocketIOClient.Socket; import {PlayerAnimationNames} from "./Phaser/Player/Animation"; import {UserSimplePeerInterface} from "./WebRtc/SimplePeer"; import {SignalData} from "simple-peer"; +import Direction = PositionMessage.Direction; enum EventMessage{ WEBRTC_SIGNAL = "webrtc-signal", @@ -46,19 +52,19 @@ export class Point implements PointInterface{ } export interface MessageUserPositionInterface { - userId: string; + userId: number; name: string; characterLayers: string[]; position: PointInterface; } export interface MessageUserMovedInterface { - userId: string; + userId: number; position: PointInterface; } export interface MessageUserJoined { - userId: string; + userId: number; name: string; characterLayers: string[]; position: PointInterface @@ -80,16 +86,16 @@ export interface WebRtcStartMessageInterface { } export interface WebRtcDisconnectMessageInterface { - userId: string + userId: number } export interface WebRtcSignalSentMessageInterface { - receiverId: string, + receiverId: number, signal: SignalData } export interface WebRtcSignalReceivedMessageInterface { - userId: string, + userId: number, signal: SignalData } @@ -105,11 +111,6 @@ export interface ViewportInterface { bottom: number, } -export interface UserMovesInterface { - position: PositionInterface, - viewport: ViewportInterface, -} - export interface BatchedMessageInterface { event: string, payload: unknown @@ -130,7 +131,7 @@ export interface RoomJoinedMessageInterface { export class Connection implements Connection { private readonly socket: Socket; - private userId: string|null = null; + private userId: number|null = null; private constructor(token: string) { @@ -173,7 +174,7 @@ export class Connection implements Connection { const message = new SetPlayerDetailsMessage(); message.setName(name); message.setCharacterlayersList(characterLayersSelected); - connection.socket.emit(EventMessage.SET_PLAYER_DETAILS, message.serializeBinary().buffer, (id: string) => { + connection.socket.emit(EventMessage.SET_PLAYER_DETAILS, message.serializeBinary().buffer, (id: number) => { connection.userId = id; }); @@ -214,7 +215,40 @@ export class Connection implements Connection { return; } const point = new Point(x, y, direction, moving); - this.socket.emit(EventMessage.USER_POSITION, { position: point, viewport } as UserMovesInterface); + const positionMessage = new PositionMessage(); + positionMessage.setX(Math.floor(x)); + positionMessage.setY(Math.floor(y)); + let directionEnum: PositionMessage.DirectionMap[keyof PositionMessage.DirectionMap]; + switch (direction) { + case 'up': + directionEnum = Direction.UP; + break; + case 'down': + directionEnum = Direction.DOWN; + break; + case 'left': + directionEnum = Direction.LEFT; + break; + case 'right': + directionEnum = Direction.RIGHT; + break; + default: + throw new Error("Unexpected direction"); + } + positionMessage.setDirection(directionEnum); + positionMessage.setMoving(moving); + + const viewportMessage = new ViewportMessage(); + viewportMessage.setLeft(Math.floor(viewport.left)); + viewportMessage.setRight(Math.floor(viewport.right)); + viewportMessage.setTop(Math.floor(viewport.top)); + viewportMessage.setBottom(Math.floor(viewport.bottom)); + + const userMovesMessage = new UserMovesMessage(); + userMovesMessage.setPosition(positionMessage); + userMovesMessage.setViewport(viewportMessage); + + this.socket.emit(EventMessage.USER_POSITION, userMovesMessage.serializeBinary().buffer); } public setSilent(silent: boolean): void { @@ -233,7 +267,7 @@ export class Connection implements Connection { this.socket.on(EventMessage.USER_MOVED, callback); } - public onUserLeft(callback: (userId: string) => void): void { + public onUserLeft(callback: (userId: number) => void): void { this.socket.on(EventMessage.USER_LEFT, callback); } @@ -249,14 +283,14 @@ export class Connection implements Connection { this.socket.on(EventMessage.CONNECT_ERROR, callback) } - public sendWebrtcSignal(signal: unknown, receiverId : string) { + public sendWebrtcSignal(signal: unknown, receiverId: number) { return this.socket.emit(EventMessage.WEBRTC_SIGNAL, { receiverId: receiverId, signal: signal } as WebRtcSignalSentMessageInterface); } - public sendWebrtcScreenSharingSignal(signal: unknown, receiverId : string) { + public sendWebrtcScreenSharingSignal(signal: unknown, receiverId: number) { return this.socket.emit(EventMessage.WEBRTC_SCREEN_SHARING_SIGNAL, { receiverId: receiverId, signal: signal @@ -286,7 +320,7 @@ export class Connection implements Connection { } - public getUserId(): string|null { + public getUserId(): number|null { return this.userId; } diff --git a/front/src/Phaser/Entity/RemotePlayer.ts b/front/src/Phaser/Entity/RemotePlayer.ts index 6764ff59..00a3e4c4 100644 --- a/front/src/Phaser/Entity/RemotePlayer.ts +++ b/front/src/Phaser/Entity/RemotePlayer.ts @@ -6,10 +6,10 @@ import {Character} from "../Entity/Character"; * Class representing the sprite of a remote player (a player that plays on another computer) */ export class RemotePlayer extends Character { - userId: string; + userId: number; constructor( - userId: string, + userId: number, Scene: GameScene, x: number, y: number, diff --git a/front/src/Phaser/Game/AddPlayerInterface.ts b/front/src/Phaser/Game/AddPlayerInterface.ts index a3f50de3..d0ed2dad 100644 --- a/front/src/Phaser/Game/AddPlayerInterface.ts +++ b/front/src/Phaser/Game/AddPlayerInterface.ts @@ -1,7 +1,7 @@ import {PointInterface} from "../../Connection"; export interface AddPlayerInterface { - userId: string; + userId: number; name: string; characterLayers: string[]; position: PointInterface; diff --git a/front/src/Phaser/Game/GameScene.ts b/front/src/Phaser/Game/GameScene.ts index ad378bc3..7695294e 100644 --- a/front/src/Phaser/Game/GameScene.ts +++ b/front/src/Phaser/Game/GameScene.ts @@ -63,7 +63,7 @@ interface AddPlayerEventInterface { interface RemovePlayerEventInterface { type: 'RemovePlayerEvent' - userId: string + userId: number } interface UserMovedEventInterface { @@ -86,7 +86,7 @@ export class GameScene extends Phaser.Scene implements CenterListener { Terrains : Array; CurrentPlayer!: CurrentGamerInterface; MapPlayers!: Phaser.Physics.Arcade.Group; - MapPlayersByKey : Map = new Map(); + MapPlayersByKey : Map = new Map(); Map!: Phaser.Tilemaps.Tilemap; Layers!: Array; Objects!: Array; @@ -217,7 +217,7 @@ export class GameScene extends Phaser.Scene implements CenterListener { this.updatePlayerPosition(message); }); - connection.onUserLeft((userId: string) => { + connection.onUserLeft((userId: number) => { this.removePlayer(userId); }); @@ -271,7 +271,7 @@ export class GameScene extends Phaser.Scene implements CenterListener { self.presentationModeSprite.setVisible(true); self.chatModeSprite.setVisible(true); }, - onDisconnect(userId: string) { + onDisconnect(userId: number) { if (self.simplePeer.getNbConnections() === 0) { self.presentationModeSprite.setVisible(false); self.chatModeSprite.setVisible(false); @@ -918,7 +918,7 @@ export class GameScene extends Phaser.Scene implements CenterListener { // Let's move all users const updatedPlayersPositions = this.playersPositionInterpolator.getUpdatedPositions(time); - updatedPlayersPositions.forEach((moveEvent: HasMovedEvent, userId: string) => { + updatedPlayersPositions.forEach((moveEvent: HasMovedEvent, userId: number) => { const player : RemotePlayer | undefined = this.MapPlayersByKey.get(userId); if (player === undefined) { throw new Error('Cannot find player with ID "' + userId +'"'); @@ -973,7 +973,7 @@ export class GameScene extends Phaser.Scene implements CenterListener { player.destroy(); this.MapPlayers.remove(player); }); - this.MapPlayersByKey = new Map(); + this.MapPlayersByKey = new Map(); // load map usersPosition.forEach((userPosition : MessageUserPositionInterface) => { @@ -1030,14 +1030,14 @@ export class GameScene extends Phaser.Scene implements CenterListener { /** * Called by the connexion when a player is removed from the map */ - public removePlayer(userId: string) { + public removePlayer(userId: number) { this.pendingEvents.enqueue({ type: "RemovePlayerEvent", userId }); } - private doRemovePlayer(userId: string) { + private doRemovePlayer(userId: number) { const player = this.MapPlayersByKey.get(userId); if (player === undefined) { console.error('Cannot find user with id ', userId); diff --git a/front/src/Phaser/Game/PlayersPositionInterpolator.ts b/front/src/Phaser/Game/PlayersPositionInterpolator.ts index 080c8a17..3ac87397 100644 --- a/front/src/Phaser/Game/PlayersPositionInterpolator.ts +++ b/front/src/Phaser/Game/PlayersPositionInterpolator.ts @@ -6,19 +6,19 @@ import {PlayerMovement} from "./PlayerMovement"; import {HasMovedEvent} from "./GameManager"; export class PlayersPositionInterpolator { - playerMovements: Map = new Map(); + playerMovements: Map = new Map(); - updatePlayerPosition(userId: string, playerMovement: PlayerMovement) : void { + updatePlayerPosition(userId: number, playerMovement: PlayerMovement) : void { this.playerMovements.set(userId, playerMovement); } - removePlayer(userId: string): void { + removePlayer(userId: number): void { this.playerMovements.delete(userId); } - getUpdatedPositions(tick: number) : Map { - const positions = new Map(); - this.playerMovements.forEach((playerMovement: PlayerMovement, userId: string) => { + getUpdatedPositions(tick: number) : Map { + const positions = new Map(); + this.playerMovements.forEach((playerMovement: PlayerMovement, userId: number) => { if (playerMovement.isOutdated(tick)) { //console.log("outdated") this.playerMovements.delete(userId); diff --git a/front/src/WebRtc/MediaManager.ts b/front/src/WebRtc/MediaManager.ts index 153d660b..6d8e5c3d 100644 --- a/front/src/WebRtc/MediaManager.ts +++ b/front/src/WebRtc/MediaManager.ts @@ -343,7 +343,7 @@ export class MediaManager { * * @param userId */ - addActiveVideo(userId : string, userName: string = ""){ + addActiveVideo(userId: string, userName: string = ""){ this.webrtcInAudio.play(); userName = userName.toUpperCase(); @@ -368,7 +368,7 @@ export class MediaManager { * * @param userId */ - addScreenSharingActiveVideo(userId : string, divImportance: DivImportance = DivImportance.Important){ + addScreenSharingActiveVideo(userId: string, divImportance: DivImportance = DivImportance.Important){ //this.webrtcInAudio.play(); userId = `screen-sharing-${userId}`; @@ -387,7 +387,7 @@ export class MediaManager { * * @param userId */ - disabledMicrophoneByUserId(userId: string){ + disabledMicrophoneByUserId(userId: number){ const element = document.getElementById(`microphone-${userId}`); if(!element){ return; @@ -399,7 +399,7 @@ export class MediaManager { * * @param userId */ - enabledMicrophoneByUserId(userId: string){ + enabledMicrophoneByUserId(userId: number){ const element = document.getElementById(`microphone-${userId}`); if(!element){ return; @@ -411,7 +411,7 @@ export class MediaManager { * * @param userId */ - disabledVideoByUserId(userId: string) { + disabledVideoByUserId(userId: number) { let element = document.getElementById(`${userId}`); if (element) { element.style.opacity = "0"; @@ -426,7 +426,7 @@ export class MediaManager { * * @param userId */ - enabledVideoByUserId(userId: string){ + enabledVideoByUserId(userId: number){ let element = document.getElementById(`${userId}`); if(element){ element.style.opacity = "1"; @@ -442,7 +442,7 @@ export class MediaManager { * @param userId * @param stream */ - addStreamRemoteVideo(userId : string, stream : MediaStream){ + addStreamRemoteVideo(userId: string, stream : MediaStream){ const remoteVideo = this.remoteVideo.get(userId); if (remoteVideo === undefined) { console.error('Unable to find video for ', userId); @@ -450,7 +450,7 @@ export class MediaManager { } remoteVideo.srcObject = stream; } - addStreamRemoteScreenSharing(userId : string, stream : MediaStream){ + addStreamRemoteScreenSharing(userId: string, stream : MediaStream){ // In the case of screen sharing (going both ways), we may need to create the HTML element if it does not exist yet const remoteVideo = this.remoteVideo.get(`screen-sharing-${userId}`); if (remoteVideo === undefined) { @@ -464,15 +464,15 @@ export class MediaManager { * * @param userId */ - removeActiveVideo(userId : string){ + removeActiveVideo(userId: string){ layoutManager.remove(userId); this.remoteVideo.delete(userId); } - removeActiveScreenSharingVideo(userId : string) { + removeActiveScreenSharingVideo(userId: string) { this.removeActiveVideo(`screen-sharing-${userId}`) } - isConnecting(userId : string): void { + isConnecting(userId: string): void { const connectingSpinnerDiv = this.getSpinner(userId); if (connectingSpinnerDiv === null) { return; @@ -480,7 +480,7 @@ export class MediaManager { connectingSpinnerDiv.style.display = 'block'; } - isConnected(userId : string): void { + isConnected(userId: string): void { const connectingSpinnerDiv = this.getSpinner(userId); if (connectingSpinnerDiv === null) { return; @@ -488,7 +488,7 @@ export class MediaManager { connectingSpinnerDiv.style.display = 'none'; } - isError(userId : string): void { + isError(userId: string): void { console.log("isError", `div-${userId}`); const element = document.getElementById(`div-${userId}`); if(!element){ @@ -500,12 +500,12 @@ export class MediaManager { } errorDiv.style.display = 'block'; } - isErrorScreenSharing(userId : string): void { + isErrorScreenSharing(userId: string): void { this.isError(`screen-sharing-${userId}`); } - private getSpinner(userId : string): HTMLDivElement|null { + private getSpinner(userId: string): HTMLDivElement|null { const element = document.getElementById(`div-${userId}`); if(!element){ return null; diff --git a/front/src/WebRtc/ScreenSharingPeer.ts b/front/src/WebRtc/ScreenSharingPeer.ts index 8857274e..9c2022a6 100644 --- a/front/src/WebRtc/ScreenSharingPeer.ts +++ b/front/src/WebRtc/ScreenSharingPeer.ts @@ -14,7 +14,7 @@ export class ScreenSharingPeer extends Peer { */ private isReceivingStream:boolean = false; - constructor(private userId: string, initiator: boolean, private connection: Connection) { + constructor(private userId: number, initiator: boolean, private connection: Connection) { super({ initiator: initiator ? initiator : false, reconnectTimer: 10000, @@ -52,7 +52,7 @@ export class ScreenSharingPeer extends Peer { if (message.streamEnded !== true) { console.error('Unexpected message on screen sharing peer connection'); } - mediaManager.removeActiveScreenSharingVideo(this.userId); + mediaManager.removeActiveScreenSharingVideo("" + this.userId); }); // eslint-disable-next-line @typescript-eslint/no-explicit-any @@ -63,7 +63,7 @@ export class ScreenSharingPeer extends Peer { this.on('connect', () => { // FIXME: we need to put the loader on the screen sharing connection - mediaManager.isConnected(this.userId); + mediaManager.isConnected("" + this.userId); console.info(`connect => ${this.userId}`); }); @@ -86,10 +86,10 @@ export class ScreenSharingPeer extends Peer { //console.log(`ScreenSharingPeer::stream => ${this.userId}`, stream); //console.log(`stream => ${this.userId} => `, stream); if(!stream){ - mediaManager.removeActiveScreenSharingVideo(this.userId); + mediaManager.removeActiveScreenSharingVideo("" + this.userId); this.isReceivingStream = false; } else { - mediaManager.addStreamRemoteScreenSharing(this.userId, stream); + mediaManager.addStreamRemoteScreenSharing("" + this.userId, stream); this.isReceivingStream = true; } } @@ -100,7 +100,7 @@ export class ScreenSharingPeer extends Peer { public destroy(error?: Error): void { try { - mediaManager.removeActiveScreenSharingVideo(this.userId); + mediaManager.removeActiveScreenSharingVideo("" + this.userId); // FIXME: I don't understand why "Closing connection with" message is displayed TWICE before "Nb users in peerConnectionArray" // I do understand the method closeConnection is called twice, but I don't understand how they manage to run in parallel. //console.log('Closing connection with '+userId); diff --git a/front/src/WebRtc/SimplePeer.ts b/front/src/WebRtc/SimplePeer.ts index f388b2ec..ac603756 100644 --- a/front/src/WebRtc/SimplePeer.ts +++ b/front/src/WebRtc/SimplePeer.ts @@ -16,7 +16,7 @@ import {VideoPeer} from "./VideoPeer"; const Peer: SimplePeerNamespace.SimplePeer = require('simple-peer'); export interface UserSimplePeerInterface{ - userId: string; + userId: number; name?: string; initiator?: boolean; } @@ -24,7 +24,7 @@ export interface UserSimplePeerInterface{ export interface PeerConnectionListener { onConnect(user: UserSimplePeerInterface): void; - onDisconnect(userId: string): void; + onDisconnect(userId: number): void; } /** @@ -35,8 +35,8 @@ export class SimplePeer { private WebRtcRoomId: string; private Users: Array = new Array(); - private PeerScreenSharingConnectionArray: Map = new Map(); - private PeerConnectionArray: Map = new Map(); + private PeerScreenSharingConnectionArray: Map = new Map(); + private PeerConnectionArray: Map = new Map(); private readonly sendLocalVideoStreamCallback: UpdatedLocalStreamCallback; private readonly sendLocalScreenSharingStreamCallback: StartScreenSharingCallback; private readonly stopLocalScreenSharingStreamCallback: StopScreenSharingCallback; @@ -140,8 +140,8 @@ export class SimplePeer { } } - mediaManager.removeActiveVideo(user.userId); - mediaManager.addActiveVideo(user.userId, name); + mediaManager.removeActiveVideo("" + user.userId); + mediaManager.addActiveVideo("" + user.userId, name); const peer = new VideoPeer(user.userId, user.initiator ? user.initiator : false, this.Connection); // When a connection is established to a video stream, and if a screen sharing is taking place, @@ -171,8 +171,8 @@ export class SimplePeer { // We should display the screen sharing ONLY if we are not initiator if (!user.initiator) { - mediaManager.removeActiveScreenSharingVideo(user.userId); - mediaManager.addScreenSharingActiveVideo(user.userId); + mediaManager.removeActiveScreenSharingVideo("" + user.userId); + mediaManager.addScreenSharingActiveVideo("" + user.userId); } const peer = new ScreenSharingPeer(user.userId, user.initiator ? user.initiator : false, this.Connection); @@ -189,7 +189,7 @@ export class SimplePeer { * * @param userId */ - private closeConnection(userId : string) { + private closeConnection(userId : number) { try { //mediaManager.removeActiveVideo(userId); const peer = this.PeerConnectionArray.get(userId); @@ -217,9 +217,9 @@ export class SimplePeer { * * @param userId */ - private closeScreenSharingConnection(userId : string) { + private closeScreenSharingConnection(userId : number) { try { - mediaManager.removeActiveScreenSharingVideo(userId); + mediaManager.removeActiveScreenSharingVideo("" + userId); const peer = this.PeerScreenSharingConnectionArray.get(userId); if (peer === undefined) { console.warn("Tried to close connection for user "+userId+" but could not find user") @@ -293,7 +293,7 @@ export class SimplePeer { * * @param userId */ - private pushVideoToRemoteUser(userId : string) { + private pushVideoToRemoteUser(userId : number) { try { const PeerConnection = this.PeerConnectionArray.get(userId); if (!PeerConnection) { @@ -314,7 +314,7 @@ export class SimplePeer { } } - private pushScreenSharingToRemoteUser(userId : string) { + private pushScreenSharingToRemoteUser(userId : number) { const PeerConnection = this.PeerScreenSharingConnectionArray.get(userId); if (!PeerConnection) { throw new Error('While pushing screen sharing, cannot find user with ID ' + userId); @@ -359,7 +359,7 @@ export class SimplePeer { } } - private sendLocalScreenSharingStreamToUser(userId: string): void { + private sendLocalScreenSharingStreamToUser(userId: number): void { // If a connection already exists with user (because it is already sharing a screen with us... let's use this connection) if (this.PeerScreenSharingConnectionArray.has(userId)) { this.pushScreenSharingToRemoteUser(userId); @@ -376,7 +376,7 @@ export class SimplePeer { } } - private stopLocalScreenSharingStreamToUser(userId: string, stream: MediaStream): void { + private stopLocalScreenSharingStreamToUser(userId: number, stream: MediaStream): void { const PeerConnectionScreenSharing = this.PeerScreenSharingConnectionArray.get(userId); if (!PeerConnectionScreenSharing) { throw new Error('Weird, screen sharing connection to user ' + userId + 'not found') diff --git a/front/src/WebRtc/VideoPeer.ts b/front/src/WebRtc/VideoPeer.ts index 33422433..e046ffe2 100644 --- a/front/src/WebRtc/VideoPeer.ts +++ b/front/src/WebRtc/VideoPeer.ts @@ -9,7 +9,7 @@ const Peer: SimplePeerNamespace.SimplePeer = require('simple-peer'); * A peer connection used to transmit video / audio signals between 2 peers. */ export class VideoPeer extends Peer { - constructor(private userId: string, initiator: boolean, private connection: Connection) { + constructor(private userId: number, initiator: boolean, private connection: Connection) { super({ initiator: initiator ? initiator : false, reconnectTimer: 10000, @@ -63,11 +63,11 @@ export class VideoPeer extends Peer { // eslint-disable-next-line @typescript-eslint/no-explicit-any this.on('error', (err: any) => { console.error(`error => ${this.userId} => ${err.code}`, err); - mediaManager.isError(userId); + mediaManager.isError("" + userId); }); this.on('connect', () => { - mediaManager.isConnected(this.userId); + mediaManager.isConnected("" + this.userId); console.info(`connect => ${this.userId}`); }); @@ -108,7 +108,7 @@ export class VideoPeer extends Peer { mediaManager.disabledVideoByUserId(this.userId); mediaManager.disabledMicrophoneByUserId(this.userId); } else { - mediaManager.addStreamRemoteVideo(this.userId, stream); + mediaManager.addStreamRemoteVideo("" + this.userId, stream); } } @@ -117,7 +117,7 @@ export class VideoPeer extends Peer { */ public destroy(error?: Error): void { try { - mediaManager.removeActiveVideo(this.userId); + mediaManager.removeActiveVideo("" + this.userId); // FIXME: I don't understand why "Closing connection with" message is displayed TWICE before "Nb users in peerConnectionArray" // I do understand the method closeConnection is called twice, but I don't understand how they manage to run in parallel. //console.log('Closing connection with '+userId); diff --git a/messages/generated/.gitignore b/messages/generated/.gitignore index 8eba6c8d..d6b7ef32 100644 --- a/messages/generated/.gitignore +++ b/messages/generated/.gitignore @@ -1 +1,2 @@ -src/ +* +!.gitignore diff --git a/messages/generated/src/proto/messages_pb.d.ts b/messages/generated/src/proto/messages_pb.d.ts deleted file mode 100644 index 4c700d90..00000000 --- a/messages/generated/src/proto/messages_pb.d.ts +++ /dev/null @@ -1,31 +0,0 @@ -// package: -// file: src/proto/messages.proto - -import * as jspb from "google-protobuf"; - -export class SetPlayerDetailsMessage extends jspb.Message { - getName(): string; - setName(value: string): void; - - clearCharacterlayersList(): void; - getCharacterlayersList(): Array; - setCharacterlayersList(value: Array): void; - addCharacterlayers(value: string, index?: number): string; - - serializeBinary(): Uint8Array; - toObject(includeInstance?: boolean): SetPlayerDetailsMessage.AsObject; - static toObject(includeInstance: boolean, msg: SetPlayerDetailsMessage): SetPlayerDetailsMessage.AsObject; - static extensions: {[key: number]: jspb.ExtensionFieldInfo}; - static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo}; - static serializeBinaryToWriter(message: SetPlayerDetailsMessage, writer: jspb.BinaryWriter): void; - static deserializeBinary(bytes: Uint8Array): SetPlayerDetailsMessage; - static deserializeBinaryFromReader(message: SetPlayerDetailsMessage, reader: jspb.BinaryReader): SetPlayerDetailsMessage; -} - -export namespace SetPlayerDetailsMessage { - export type AsObject = { - name: string, - characterlayersList: Array, - } -} - diff --git a/messages/generated/src/proto/messages_pb.js b/messages/generated/src/proto/messages_pb.js deleted file mode 100644 index 27ffc622..00000000 --- a/messages/generated/src/proto/messages_pb.js +++ /dev/null @@ -1,223 +0,0 @@ -// source: src/proto/messages.proto -/** - * @fileoverview - * @enhanceable - * @suppress {messageConventions} JS Compiler reports an error if a variable or - * field starts with 'MSG_' and isn't a translatable message. - * @public - */ -// GENERATED CODE -- DO NOT EDIT! - -var jspb = require('google-protobuf'); -var goog = jspb; -var global = Function('return this')(); - -goog.exportSymbol('proto.SetPlayerDetailsMessage', null, global); -/** - * Generated by JsPbCodeGenerator. - * @param {Array=} opt_data Optional initial data array, typically from a - * server response, or constructed directly in Javascript. The array is used - * in place and becomes part of the constructed object. It is not cloned. - * If no data is provided, the constructed object will be empty, but still - * valid. - * @extends {jspb.Message} - * @constructor - */ -proto.SetPlayerDetailsMessage = function(opt_data) { - jspb.Message.initialize(this, opt_data, 0, -1, proto.SetPlayerDetailsMessage.repeatedFields_, null); -}; -goog.inherits(proto.SetPlayerDetailsMessage, jspb.Message); -if (goog.DEBUG && !COMPILED) { - /** - * @public - * @override - */ - proto.SetPlayerDetailsMessage.displayName = 'proto.SetPlayerDetailsMessage'; -} - -/** - * List of repeated fields within this message type. - * @private {!Array} - * @const - */ -proto.SetPlayerDetailsMessage.repeatedFields_ = [2]; - - - -if (jspb.Message.GENERATE_TO_OBJECT) { -/** - * Creates an object representation of this proto. - * Field names that are reserved in JavaScript and will be renamed to pb_name. - * Optional fields that are not set will be set to undefined. - * To access a reserved field use, foo.pb_, eg, foo.pb_default. - * For the list of reserved names please see: - * net/proto2/compiler/js/internal/generator.cc#kKeyword. - * @param {boolean=} opt_includeInstance Deprecated. whether to include the - * JSPB instance for transitional soy proto support: - * http://goto/soy-param-migration - * @return {!Object} - */ -proto.SetPlayerDetailsMessage.prototype.toObject = function(opt_includeInstance) { - return proto.SetPlayerDetailsMessage.toObject(opt_includeInstance, this); -}; - - -/** - * Static version of the {@see toObject} method. - * @param {boolean|undefined} includeInstance Deprecated. Whether to include - * the JSPB instance for transitional soy proto support: - * http://goto/soy-param-migration - * @param {!proto.SetPlayerDetailsMessage} msg The msg instance to transform. - * @return {!Object} - * @suppress {unusedLocalVariables} f is only used for nested messages - */ -proto.SetPlayerDetailsMessage.toObject = function(includeInstance, msg) { - var f, obj = { - name: jspb.Message.getFieldWithDefault(msg, 1, ""), - characterlayersList: (f = jspb.Message.getRepeatedField(msg, 2)) == null ? undefined : f - }; - - if (includeInstance) { - obj.$jspbMessageInstance = msg; - } - return obj; -}; -} - - -/** - * Deserializes binary data (in protobuf wire format). - * @param {jspb.ByteSource} bytes The bytes to deserialize. - * @return {!proto.SetPlayerDetailsMessage} - */ -proto.SetPlayerDetailsMessage.deserializeBinary = function(bytes) { - var reader = new jspb.BinaryReader(bytes); - var msg = new proto.SetPlayerDetailsMessage; - return proto.SetPlayerDetailsMessage.deserializeBinaryFromReader(msg, reader); -}; - - -/** - * Deserializes binary data (in protobuf wire format) from the - * given reader into the given message object. - * @param {!proto.SetPlayerDetailsMessage} msg The message object to deserialize into. - * @param {!jspb.BinaryReader} reader The BinaryReader to use. - * @return {!proto.SetPlayerDetailsMessage} - */ -proto.SetPlayerDetailsMessage.deserializeBinaryFromReader = function(msg, reader) { - while (reader.nextField()) { - if (reader.isEndGroup()) { - break; - } - var field = reader.getFieldNumber(); - switch (field) { - case 1: - var value = /** @type {string} */ (reader.readString()); - msg.setName(value); - break; - case 2: - var value = /** @type {string} */ (reader.readString()); - msg.addCharacterlayers(value); - break; - default: - reader.skipField(); - break; - } - } - return msg; -}; - - -/** - * Serializes the message to binary data (in protobuf wire format). - * @return {!Uint8Array} - */ -proto.SetPlayerDetailsMessage.prototype.serializeBinary = function() { - var writer = new jspb.BinaryWriter(); - proto.SetPlayerDetailsMessage.serializeBinaryToWriter(this, writer); - return writer.getResultBuffer(); -}; - - -/** - * Serializes the given message to binary data (in protobuf wire - * format), writing to the given BinaryWriter. - * @param {!proto.SetPlayerDetailsMessage} message - * @param {!jspb.BinaryWriter} writer - * @suppress {unusedLocalVariables} f is only used for nested messages - */ -proto.SetPlayerDetailsMessage.serializeBinaryToWriter = function(message, writer) { - var f = undefined; - f = message.getName(); - if (f.length > 0) { - writer.writeString( - 1, - f - ); - } - f = message.getCharacterlayersList(); - if (f.length > 0) { - writer.writeRepeatedString( - 2, - f - ); - } -}; - - -/** - * optional string name = 1; - * @return {string} - */ -proto.SetPlayerDetailsMessage.prototype.getName = function() { - return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, "")); -}; - - -/** - * @param {string} value - * @return {!proto.SetPlayerDetailsMessage} returns this - */ -proto.SetPlayerDetailsMessage.prototype.setName = function(value) { - return jspb.Message.setProto3StringField(this, 1, value); -}; - - -/** - * repeated string characterLayers = 2; - * @return {!Array} - */ -proto.SetPlayerDetailsMessage.prototype.getCharacterlayersList = function() { - return /** @type {!Array} */ (jspb.Message.getRepeatedField(this, 2)); -}; - - -/** - * @param {!Array} value - * @return {!proto.SetPlayerDetailsMessage} returns this - */ -proto.SetPlayerDetailsMessage.prototype.setCharacterlayersList = function(value) { - return jspb.Message.setField(this, 2, value || []); -}; - - -/** - * @param {string} value - * @param {number=} opt_index - * @return {!proto.SetPlayerDetailsMessage} returns this - */ -proto.SetPlayerDetailsMessage.prototype.addCharacterlayers = function(value, opt_index) { - return jspb.Message.addToRepeatedField(this, 2, value, opt_index); -}; - - -/** - * Clears the list making it empty but non-null. - * @return {!proto.SetPlayerDetailsMessage} returns this - */ -proto.SetPlayerDetailsMessage.prototype.clearCharacterlayersList = function() { - return this.setCharacterlayersList([]); -}; - - -goog.object.extend(exports, proto); diff --git a/messages/messages.proto b/messages/messages.proto index ea9fafe2..cc0449e9 100644 --- a/messages/messages.proto +++ b/messages/messages.proto @@ -1,6 +1,41 @@ syntax = "proto3"; +/*********** CLIENT TO SERVER MESSAGES *************/ + message SetPlayerDetailsMessage { string name = 1; repeated string characterLayers = 2; } + +message PositionMessage { + int32 x = 1; + int32 y = 2; + enum Direction { + UP = 0; + RIGHT = 1; + DOWN = 2; + LEFT = 3; + } + Direction direction = 3; + bool moving = 4; +} + +message ViewportMessage { + int32 left = 1; + int32 top = 2; + int32 right = 3; + int32 bottom = 4; +} + +message UserMovesMessage { + PositionMessage position = 1; + ViewportMessage viewport = 2; +} + + +/*********** SERVER TO CLIENT MESSAGES *************/ + +message UserMovedMessage { + int32 userId = 1; + PositionMessage position = 2; +} diff --git a/messages/package.json b/messages/package.json index e2548499..b70d4900 100644 --- a/messages/package.json +++ b/messages/package.json @@ -4,8 +4,8 @@ "description": "", "main": "generated/src/proto/messages_pb.js", "scripts": { - "proto": "protoc --plugin=\"protoc-gen-ts=./node_modules/.bin/protoc-gen-ts\" --js_out=\"import_style=commonjs,binary:src/messages/generated\" --ts_out=\"src/messages/generated\" src/messages/messages.proto", - "proto:watch": "inotifywait -q -m -e close_write src/messages/messages.proto | while read -r filename event; do yarn run proto; done" + "proto": "protoc --plugin=\"protoc-gen-ts=./node_modules/.bin/protoc-gen-ts\" --js_out=\"import_style=commonjs,binary:generated\" --ts_out=\"generated\" messages.proto", + "proto:watch": "inotifywait -q -m -e close_write messages.proto | while read -r filename event; do yarn run proto; done" }, "repository": { "type": "git", From 3a17795ad33bdbcc95d1b420ff179a560f60c2f5 Mon Sep 17 00:00:00 2001 From: arp Date: Fri, 18 Sep 2020 15:48:30 +0200 Subject: [PATCH 146/313] added basic token auth --- back/src/Controller/AdminController.ts | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/back/src/Controller/AdminController.ts b/back/src/Controller/AdminController.ts index d6f1d23d..7c20498f 100644 --- a/back/src/Controller/AdminController.ts +++ b/back/src/Controller/AdminController.ts @@ -1,6 +1,6 @@ import {Application, Request, Response} from "express"; import {OK} from "http-status-codes"; -import {ADMIN_API_URL} from "../Enum/EnvironmentVariable"; +import {ADMIN_API_TOKEN, ADMIN_API_URL} from "../Enum/EnvironmentVariable"; import Axios, {AxiosError} from "axios"; export class AdminController { @@ -19,14 +19,12 @@ export class AdminController { } const token:string = req.params.token; - //todo add ADMIN_API_TOKEN authorization let response = null try { - console.log(ADMIN_API_URL+'/api/login-url/'+token); - response = await Axios.get(ADMIN_API_URL+'/api/login-url/'+token) + response = await Axios.get(ADMIN_API_URL+'/api/login-url/'+token, { headers: {"Authorization" : `${ADMIN_API_TOKEN}`} }) } catch (e) { console.log(e.message) - return res.status(500).send('An error happened'); + return res.status(e.status || 500).send('An error happened'); } const teamSlug = response.data.teamSlug; From df0636c51369b1f005d8f0c2acc74f85ba7c9256 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20N=C3=A9grier?= Date: Fri, 18 Sep 2020 15:51:15 +0200 Subject: [PATCH 147/313] Migrating user position messages to protobuf --- back/src/Controller/IoSocketController.ts | 32 ++++++++++---- back/src/Model/Websocket/ExSocketInterface.ts | 5 ++- back/src/Model/Websocket/MessageUserMoved.ts | 6 --- back/src/Model/Websocket/ProtobufUtils.ts | 35 +++++++++++++++ benchmark/socketio-load-test.yaml | 18 ++------ benchmark/socketioLoadTest.js | 33 ++++++++++++++ front/src/Connection.ts | 43 ++++++++++++++++--- front/src/Network/ProtobufClientUtils.ts | 34 +++++++++++++++ front/src/Phaser/Game/GameScene.ts | 17 +++++++- messages/messages.proto | 25 ++++++++--- 10 files changed, 202 insertions(+), 46 deletions(-) delete mode 100644 back/src/Model/Websocket/MessageUserMoved.ts create mode 100644 back/src/Model/Websocket/ProtobufUtils.ts create mode 100644 front/src/Network/ProtobufClientUtils.ts diff --git a/back/src/Controller/IoSocketController.ts b/back/src/Controller/IoSocketController.ts index a2732fb8..f3eab483 100644 --- a/back/src/Controller/IoSocketController.ts +++ b/back/src/Controller/IoSocketController.ts @@ -10,7 +10,6 @@ import {Group} from "../Model/Group"; import {User} from "../Model/User"; import {isSetPlayerDetailsMessage,} from "../Model/Websocket/SetPlayerDetailsMessage"; import {MessageUserJoined} from "../Model/Websocket/MessageUserJoined"; -import {MessageUserMoved} from "../Model/Websocket/MessageUserMoved"; import si from "systeminformation"; import {Gauge} from "prom-client"; import {TokenInterface} from "../Controller/AuthenticateController"; @@ -23,9 +22,17 @@ import {uuid} from 'uuidv4'; import {isViewport} from "../Model/Websocket/ViewportMessage"; import {GroupUpdateInterface} from "_Model/Websocket/GroupUpdateInterface"; import {Movable} from "../Model/Movable"; -import {PositionMessage, SetPlayerDetailsMessage} from "../../../messages/generated/messages_pb"; +import { + PositionMessage, + SetPlayerDetailsMessage, + SubMessage, + UserMovedMessage, + BatchMessage +} from "../../../messages/generated/messages_pb"; import {UserMovesMessage} from "../../../messages/generated/messages_pb"; import Direction = PositionMessage.Direction; +import {ProtobufUtils} from "../Model/Websocket/ProtobufUtils"; +import toPositionMessage = ProtobufUtils.toPositionMessage; enum SocketIoEvent { CONNECTION = "connection", @@ -48,13 +55,13 @@ enum SocketIoEvent { BATCH = "batch", } -function emitInBatch(socket: ExSocketInterface, event: string | symbol, payload: unknown): void { - socket.batchedMessages.push({ event, payload}); +function emitInBatch(socket: ExSocketInterface, event: string, payload: SubMessage): void { + socket.batchedMessages.addPayload(payload); if (socket.batchTimeout === null) { socket.batchTimeout = setTimeout(() => { - socket.emit(SocketIoEvent.BATCH, socket.batchedMessages); - socket.batchedMessages = []; + socket.binary(true).emit(SocketIoEvent.BATCH, socket.batchedMessages.serializeBinary().buffer); + socket.batchedMessages = new BatchMessage(); socket.batchTimeout = null; }, 100); } @@ -159,9 +166,9 @@ export class IoSocketController { ioConnection() { this.Io.on(SocketIoEvent.CONNECTION, (socket: Socket) => { const client : ExSocketInterface = socket as ExSocketInterface; - client.batchedMessages = []; + client.batchedMessages = new BatchMessage(); client.batchTimeout = null; - client.emitInBatch = (event: string | symbol, payload: unknown): void => { + client.emitInBatch = (event: string, payload: SubMessage): void => { emitInBatch(client, event, payload); } this.sockets.set(client.userId, client); @@ -538,7 +545,14 @@ export class IoSocketController { if (thing instanceof User) { const clientUser = this.searchClientByIdOrFail(thing.id); - clientListener.emitInBatch(SocketIoEvent.USER_MOVED, new MessageUserMoved(clientUser.userId, clientUser.position)); + const userMovedMessage = new UserMovedMessage(); + userMovedMessage.setUserid(clientUser.userId); + userMovedMessage.setPosition(toPositionMessage(clientUser.position)); + + const subMessage = new SubMessage(); + subMessage.setUsermovedmessage(userMovedMessage); + + clientListener.emitInBatch(SocketIoEvent.USER_MOVED, subMessage); //console.log("Sending USER_MOVED event"); } else if (thing instanceof Group) { clientListener.emit(SocketIoEvent.GROUP_CREATE_UPDATE, { diff --git a/back/src/Model/Websocket/ExSocketInterface.ts b/back/src/Model/Websocket/ExSocketInterface.ts index 648bbe21..d7edf554 100644 --- a/back/src/Model/Websocket/ExSocketInterface.ts +++ b/back/src/Model/Websocket/ExSocketInterface.ts @@ -3,6 +3,7 @@ import {PointInterface} from "./PointInterface"; import {Identificable} from "./Identificable"; import {TokenInterface} from "../../Controller/AuthenticateController"; import {ViewportInterface} from "_Model/Websocket/ViewportMessage"; +import {BatchMessage, SubMessage} from "../../../../messages/generated/messages_pb"; export interface ExSocketInterface extends Socket, Identificable { token: string; @@ -18,7 +19,7 @@ export interface ExSocketInterface extends Socket, Identificable { /** * Pushes an event that will be sent in the next batch of events */ - emitInBatch: (event: string | symbol, payload: unknown) => void; - batchedMessages: Array<{ event: string | symbol, payload: unknown }>; + emitInBatch: (event: string, payload: SubMessage) => void; + batchedMessages: BatchMessage; batchTimeout: NodeJS.Timeout|null; } diff --git a/back/src/Model/Websocket/MessageUserMoved.ts b/back/src/Model/Websocket/MessageUserMoved.ts deleted file mode 100644 index e08be81b..00000000 --- a/back/src/Model/Websocket/MessageUserMoved.ts +++ /dev/null @@ -1,6 +0,0 @@ -import {PointInterface} from "./PointInterface"; - -export class MessageUserMoved { - constructor(public userId: number, public position: PointInterface) { - } -} diff --git a/back/src/Model/Websocket/ProtobufUtils.ts b/back/src/Model/Websocket/ProtobufUtils.ts new file mode 100644 index 00000000..ff73b7c0 --- /dev/null +++ b/back/src/Model/Websocket/ProtobufUtils.ts @@ -0,0 +1,35 @@ +import {PointInterface} from "./PointInterface"; +import {PositionMessage} from "../../../../messages/generated/messages_pb"; +import {ExSocketInterface} from "_Model/Websocket/ExSocketInterface"; + +export namespace ProtobufUtils { + import Direction = PositionMessage.Direction; + + export function toPositionMessage(point: PointInterface): PositionMessage { + let direction: PositionMessage.DirectionMap[keyof PositionMessage.DirectionMap]; + switch (point.direction) { + case 'up': + direction = Direction.UP; + break; + case 'down': + direction = Direction.DOWN; + break; + case 'left': + direction = Direction.LEFT; + break; + case 'right': + direction = Direction.RIGHT; + break; + default: + throw new Error('unexpected direction'); + } + + const position = new PositionMessage(); + position.setX(point.x); + position.setY(point.y); + position.setMoving(point.moving); + position.setDirection(direction); + + return position; + } +} diff --git a/benchmark/socketio-load-test.yaml b/benchmark/socketio-load-test.yaml index df2f580b..81c7e55e 100644 --- a/benchmark/socketio-load-test.yaml +++ b/benchmark/socketio-load-test.yaml @@ -6,7 +6,7 @@ config: token: "test" phases: - duration: 20 - arrivalRate: 2 + arrivalRate: 3 processor: "./socketioLoadTest.js" scenarios: - name: "Connects and moves player for 20 seconds" @@ -22,7 +22,7 @@ scenarios: - emit: channel: "join-room" data: - roomId: 'global__api.workadventure.localhost/map/files/Floor0/floor0' + roomId: 'global__maps.workadventure.localhost/Floor0/floor0' position: x: 783 y: 170 @@ -35,20 +35,10 @@ scenarios: bottom: 200 - think: 1 - loop: - - function: "setYRandom" + - function: "setUserMovesMessage" - emit: channel: "user-position" - data: - position: - x: "{{ x }}" - y: "{{ y }}" - direction: 'down' - moving: false - viewport: - left: "{{ left }}" - top: "{{ top }}" - right: "{{ right }}" - bottom: "{{ bottom }}" + data: "{{ message }}" - think: 0.2 count: 100 - think: 10 diff --git a/benchmark/socketioLoadTest.js b/benchmark/socketioLoadTest.js index f898d7b9..3f01bab6 100644 --- a/benchmark/socketioLoadTest.js +++ b/benchmark/socketioLoadTest.js @@ -1,5 +1,8 @@ 'use strict'; +require("../messages/generated/messages_pb"); +//import {PositionMessage, UserMovesMessage, ViewportMessage} from "../messages/generated/messages_pb"; + module.exports = { setYRandom }; @@ -18,3 +21,33 @@ function setYRandom(context, events, done) { context.vars.bottom = context.vars.y + 200; return done(); } + +function setUserMovesMessage(context, events, done) { + if (context.angle === undefined) { + context.angle = Math.random() * Math.PI * 2; + } + context.angle += 0.05; + + const x = Math.floor(320 + 1472/2 * (1 + Math.sin(context.angle))); + const y = Math.floor(200 + 1090/2 * (1 + Math.cos(context.angle))); + + const positionMessage = new PositionMessage(); + positionMessage.setX(x); + positionMessage.setY(y); + positionMessage.setDirection(PositionMessage.Direction.UP); + positionMessage.setMoving(false); + + const viewportMessage = new ViewportMessage(); + viewportMessage.setTop(y - 200); + viewportMessage.setBottom(y + 200); + viewportMessage.setLeft(x - 320); + viewportMessage.setRight(x + 320); + + const userMovesMessage = new UserMovesMessage(); + userMovesMessage.setPosition(positionMessage); + userMovesMessage.setViewport(viewportMessage); + + context.vars.message = userMovesMessage.serializeBinary().buffer; + console.log(context.vars.message); + return done(); +} diff --git a/front/src/Connection.ts b/front/src/Connection.ts index b6d4c6ee..78f107fe 100644 --- a/front/src/Connection.ts +++ b/front/src/Connection.ts @@ -2,8 +2,9 @@ import Axios from "axios"; import {API_URL} from "./Enum/EnvironmentVariable"; import {MessageUI} from "./Logger/MessageUI"; import { + BatchMessage, PositionMessage, - SetPlayerDetailsMessage, + SetPlayerDetailsMessage, UserMovedMessage, UserMovesMessage, ViewportMessage } from "../../messages/generated/messages_pb" @@ -132,6 +133,7 @@ export interface RoomJoinedMessageInterface { export class Connection implements Connection { private readonly socket: Socket; private userId: number|null = null; + private batchCallbacks: Map = new Map(); private constructor(token: string) { @@ -149,11 +151,25 @@ export class Connection implements Connection { /** * Messages inside batched messages are extracted and sent to listeners directly. */ - this.socket.on(EventMessage.BATCH, (batchedMessages: BatchedMessageInterface[]) => { - for (const message of batchedMessages) { - const listeners = this.socket.listeners(message.event); + this.socket.on(EventMessage.BATCH, (batchedMessagesBinary: ArrayBuffer) => { + const batchMessage = BatchMessage.deserializeBinary(new Uint8Array(batchedMessagesBinary as ArrayBuffer)); + + for (const message of batchMessage.getPayloadList()) { + let event: string; + let payload; + if (message.hasUsermovedmessage()) { + event = EventMessage.USER_MOVED; + payload = message.getUsermovedmessage(); + } else { + throw new Error('Unexpected batch message type'); + } + + const listeners = this.batchCallbacks.get(event); + if (listeners === undefined) { + continue; + } for (const listener of listeners) { - listener(message.payload); + listener(payload); } } }) @@ -263,8 +279,21 @@ export class Connection implements Connection { this.socket.on(EventMessage.JOIN_ROOM, callback); } - public onUserMoved(callback: (message: MessageUserMovedInterface) => void): void { - this.socket.on(EventMessage.USER_MOVED, callback); + public onUserMoved(callback: (message: UserMovedMessage) => void): void { + this.onBatchMessage(EventMessage.USER_MOVED, callback); + //this.socket.on(EventMessage.USER_MOVED, callback); + } + + /** + * Registers a listener on a message that is part of a batch + */ + private onBatchMessage(eventName: string, callback: Function): void { + let callbacks = this.batchCallbacks.get(eventName); + if (callbacks === undefined) { + callbacks = new Array(); + this.batchCallbacks.set(eventName, callbacks); + } + callbacks.push(callback); } public onUserLeft(callback: (userId: number) => void): void { diff --git a/front/src/Network/ProtobufClientUtils.ts b/front/src/Network/ProtobufClientUtils.ts new file mode 100644 index 00000000..311ba80d --- /dev/null +++ b/front/src/Network/ProtobufClientUtils.ts @@ -0,0 +1,34 @@ +import {PositionMessage} from "../../../messages/generated/messages_pb"; +import {PointInterface} from "../Connection"; + +export namespace ProtobufClientUtils { + import Direction = PositionMessage.Direction; + + export function toPointInterface(position: PositionMessage): PointInterface { + let direction: string; + switch (position.getDirection()) { + case Direction.UP: + direction = 'up'; + break; + case Direction.DOWN: + direction = 'down'; + break; + case Direction.LEFT: + direction = 'left'; + break; + case Direction.RIGHT: + direction = 'right'; + break; + default: + throw new Error("Unexpected direction"); + } + + // sending to all clients in room except sender + return { + x: position.getX(), + y: position.getY(), + direction, + moving: position.getMoving(), + }; + } +} diff --git a/front/src/Phaser/Game/GameScene.ts b/front/src/Phaser/Game/GameScene.ts index 7695294e..bf73b31d 100644 --- a/front/src/Phaser/Game/GameScene.ts +++ b/front/src/Phaser/Game/GameScene.ts @@ -40,6 +40,9 @@ import {FourOFourSceneName} from "../Reconnecting/FourOFourScene"; import {ItemFactoryInterface} from "../Items/ItemFactoryInterface"; import {ActionableItem} from "../Items/ActionableItem"; import {UserInputManager} from "../UserInput/UserInputManager"; +import {UserMovedMessage} from "../../../../messages/generated/messages_pb"; +import {ProtobufClientUtils} from "../../Network/ProtobufClientUtils"; +import toPointInterface = ProtobufClientUtils.toPointInterface; export enum Textures { @@ -213,8 +216,18 @@ export class GameScene extends Phaser.Scene implements CenterListener { this.addPlayer(userMessage); }); - connection.onUserMoved((message: MessageUserMovedInterface) => { - this.updatePlayerPosition(message); + connection.onUserMoved((message: UserMovedMessage) => { + const position = message.getPosition(); + if (position === undefined) { + throw new Error('Position missing from UserMovedMessage'); + } + + const messageUserMoved: MessageUserMovedInterface = { + userId: message.getUserid(), + position: toPointInterface(position) + } + + this.updatePlayerPosition(messageUserMoved); }); connection.onUserLeft((userId: number) => { diff --git a/messages/messages.proto b/messages/messages.proto index cc0449e9..7d8cb0a8 100644 --- a/messages/messages.proto +++ b/messages/messages.proto @@ -1,11 +1,6 @@ syntax = "proto3"; -/*********** CLIENT TO SERVER MESSAGES *************/ - -message SetPlayerDetailsMessage { - string name = 1; - repeated string characterLayers = 2; -} +/*********** PARTIAL MESSAGES **************/ message PositionMessage { int32 x = 1; @@ -27,6 +22,13 @@ message ViewportMessage { int32 bottom = 4; } +/*********** CLIENT TO SERVER MESSAGES *************/ + +message SetPlayerDetailsMessage { + string name = 1; + repeated string characterLayers = 2; +} + message UserMovesMessage { PositionMessage position = 1; ViewportMessage viewport = 2; @@ -39,3 +41,14 @@ message UserMovedMessage { int32 userId = 1; PositionMessage position = 2; } + +message SubMessage { + oneof message { + UserMovedMessage userMovedMessage = 1; + } +} + +message BatchMessage { + string event = 1; + repeated SubMessage payload = 2; +} From 28dc3a2c8407266e7d41721cfff88a4a13fe4420 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20N=C3=A9grier?= Date: Fri, 18 Sep 2020 16:05:52 +0200 Subject: [PATCH 148/313] Removing protobuf packages from back --- back/package.json | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) diff --git a/back/package.json b/back/package.json index e9a4d4fc..9bec3c03 100644 --- a/back/package.json +++ b/back/package.json @@ -5,14 +5,12 @@ "main": "index.js", "scripts": { "tsc": "tsc", - "dev": "concurrently \"yarn run proto:watch\" \"ts-node-dev --respawn --transpileOnly ./server.ts\"", + "dev": "ts-node-dev --respawn --transpileOnly ./server.ts", "prod": "tsc && node ./dist/server.js", "profile": "tsc && node --prof ./dist/server.js", "test": "ts-node node_modules/jasmine/bin/jasmine --config=jasmine.json", "lint": "node_modules/.bin/eslint src/ . --ext .ts", "fix": "node_modules/.bin/eslint --fix src/ . --ext .ts", - "proto": "protoc --plugin=\"protoc-gen-ts=./node_modules/.bin/protoc-gen-ts\" --js_out=\"import_style=commonjs,binary:src/messages/generated\" --ts_out=\"src/messages/generated\" src/messages/messages.proto", - "proto:watch": "inotifywait -q -m -e close_write src/messages/messages.proto | while read -r filename event; do yarn run proto; done" }, "repository": { "type": "git", @@ -38,11 +36,6 @@ }, "homepage": "https://github.com/thecodingmachine/workadventure#readme", "dependencies": { - "@types/express": "^4.17.4", - "@types/http-status-codes": "^1.2.0", - "@types/jsonwebtoken": "^8.3.8", - "@types/socket.io": "^2.1.4", - "@types/uuidv4": "^5.0.0", "body-parser": "^1.19.0", "express": "^4.17.1", "generic-type-guard": "^3.2.0", @@ -56,13 +49,15 @@ "uuidv4": "^6.0.7" }, "devDependencies": { - "@types/google-protobuf": "^3.7.3", + "@types/express": "^4.17.4", + "@types/http-status-codes": "^1.2.0", "@types/jasmine": "^3.5.10", + "@types/jsonwebtoken": "^8.3.8", + "@types/socket.io": "^2.1.4", + "@types/uuidv4": "^5.0.0", "@typescript-eslint/eslint-plugin": "^2.26.0", "@typescript-eslint/parser": "^2.26.0", - "concurrently": "^5.3.0", "eslint": "^6.8.0", "jasmine": "^3.5.0", - "ts-protoc-gen": "^0.13.0" } } From 32f92d5c455228fd1efc13ad741686d2f34d73fb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20N=C3=A9grier?= Date: Fri, 18 Sep 2020 17:01:45 +0200 Subject: [PATCH 149/313] Switching test loading from Artillery to home-grown test --- back/package.json | 4 +- back/yarn.lock | 211 +-------- benchmark/artillery_multi_core.sh | 17 - benchmark/benchmark_multi_core.sh | 15 + benchmark/index.ts | 48 +++ benchmark/package.json | 10 +- benchmark/yarn.lock | 693 ++++++++++++++++++++++++++++++ 7 files changed, 771 insertions(+), 227 deletions(-) delete mode 100755 benchmark/artillery_multi_core.sh create mode 100755 benchmark/benchmark_multi_core.sh create mode 100644 benchmark/index.ts create mode 100644 benchmark/yarn.lock diff --git a/back/package.json b/back/package.json index 9bec3c03..3306578a 100644 --- a/back/package.json +++ b/back/package.json @@ -10,7 +10,7 @@ "profile": "tsc && node --prof ./dist/server.js", "test": "ts-node node_modules/jasmine/bin/jasmine --config=jasmine.json", "lint": "node_modules/.bin/eslint src/ . --ext .ts", - "fix": "node_modules/.bin/eslint --fix src/ . --ext .ts", + "fix": "node_modules/.bin/eslint --fix src/ . --ext .ts" }, "repository": { "type": "git", @@ -58,6 +58,6 @@ "@typescript-eslint/eslint-plugin": "^2.26.0", "@typescript-eslint/parser": "^2.26.0", "eslint": "^6.8.0", - "jasmine": "^3.5.0", + "jasmine": "^3.5.0" } } diff --git a/back/yarn.lock b/back/yarn.lock index a3269cb5..f660a5c8 100644 --- a/back/yarn.lock +++ b/back/yarn.lock @@ -57,11 +57,6 @@ "@types/qs" "*" "@types/serve-static" "*" -"@types/google-protobuf@^3.7.3": - version "3.7.3" - resolved "https://registry.yarnpkg.com/@types/google-protobuf/-/google-protobuf-3.7.3.tgz#429512e541bbd777f2c867692e6335ee08d1f6d4" - integrity sha512-FRwj40euE2bYkG+0X5w2nEA8yAzgJRcEa7RBd0Gsdkb9/tPM2pctVVAvnOUTbcXo2VmIHPo0Ae94Gl9vRHfKzg== - "@types/http-status-codes@^1.2.0": version "1.2.0" resolved "https://registry.yarnpkg.com/@types/http-status-codes/-/http-status-codes-1.2.0.tgz#6e5244835aaf7164dd306f1d4d2dfdbb2159d909" @@ -333,12 +328,7 @@ camelcase@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f" -camelcase@^5.0.0: - version "5.3.1" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" - integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== - -chalk@^2.0.0, chalk@^2.1.0, chalk@^2.4.2: +chalk@^2.0.0, chalk@^2.1.0: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" dependencies: @@ -367,15 +357,6 @@ cli-width@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639" -cliui@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5" - integrity sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA== - dependencies: - string-width "^3.1.0" - strip-ansi "^5.2.0" - wrap-ansi "^5.1.0" - color-convert@^1.9.0: version "1.9.3" resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" @@ -412,21 +393,6 @@ concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" -concurrently@^5.3.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/concurrently/-/concurrently-5.3.0.tgz#7500de6410d043c912b2da27de3202cb489b1e7b" - integrity sha512-8MhqOB6PWlBfA2vJ8a0bSFKATOdWlHiQlk11IfmQBPaHVP8oP2gsh2MObE6UR3hqDHqvaIvLTyceNW6obVuFHQ== - dependencies: - chalk "^2.4.2" - date-fns "^2.0.1" - lodash "^4.17.15" - read-pkg "^4.0.1" - rxjs "^6.5.2" - spawn-command "^0.0.2-1" - supports-color "^6.1.0" - tree-kill "^1.2.2" - yargs "^13.3.0" - content-disposition@0.5.3: version "0.5.3" resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.3.tgz#e130caf7e7279087c5616c2007d0485698984fbd" @@ -465,11 +431,6 @@ currently-unhandled@^0.4.1: dependencies: array-find-index "^1.0.1" -date-fns@^2.0.1: - version "2.16.1" - resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.16.1.tgz#05775792c3f3331da812af253e1a935851d3834b" - integrity sha512-sAJVKx/FqrLYHAQeN7VpJrPhagZc9R4ImZIWYRFZaaohR3KzmuK88touwsSwSVT8Qcbd4zoDsnGfX4GFB4imyQ== - dateformat@~1.0.4-1.2.3: version "1.0.12" resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-1.0.12.tgz#9f124b67594c937ff706932e4a642cca8dbbfee9" @@ -499,7 +460,7 @@ debug@~3.1.0: dependencies: ms "2.0.0" -decamelize@^1.1.2, decamelize@^1.2.0: +decamelize@^1.1.2: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" @@ -590,7 +551,7 @@ engine.io@~3.4.0: engine.io-parser "~2.2.0" ws "^7.1.2" -error-ex@^1.2.0, error-ex@^1.3.1: +error-ex@^1.2.0: version "1.3.2" resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" dependencies: @@ -801,13 +762,6 @@ find-up@^1.0.0: path-exists "^2.0.0" pinkie-promise "^2.0.0" -find-up@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" - integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== - dependencies: - locate-path "^3.0.0" - flat-cache@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-2.0.1.tgz#5d296d6f04bda44a4630a301413bdbc2ec085ec0" @@ -841,11 +795,6 @@ generic-type-guard@^3.2.0: resolved "https://registry.yarnpkg.com/generic-type-guard/-/generic-type-guard-3.2.0.tgz#1fb136f934730c776486526b8a21fe96b067e691" integrity sha512-EkkrXYbOtJ3VPB+SOrU7EhwY65rZErItGtBg5wAqywaj07BOubwOZqMYaxOWekJ9akioGqXIsw1fYk3wwbWsDQ== -get-caller-file@^2.0.1: - version "2.0.5" - resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" - integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== - get-stdin@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe" @@ -873,11 +822,6 @@ globals@^12.1.0: dependencies: type-fest "^0.8.1" -google-protobuf@^3.6.1: - version "3.13.0" - resolved "https://registry.yarnpkg.com/google-protobuf/-/google-protobuf-3.13.0.tgz#909c5983d75dd6101ed57c79e0528d000cdc3251" - integrity sha512-ZIf3qfLFayVrPvAjeKKxO5FRF1/NwRxt6Dko+fWEMuHwHbZx8/fcaAao9b0wCM6kr8qeg2te8XTpyuvKuD9aKw== - graceful-fs@^4.1.2: version "4.2.3" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.3.tgz#4a12ff1b60376ef09862c2093edd908328be8423" @@ -1068,11 +1012,6 @@ js-yaml@^3.13.1: argparse "^1.0.7" esprima "^4.0.0" -json-parse-better-errors@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" - integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== - json-schema-traverse@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" @@ -1128,14 +1067,6 @@ load-json-file@^1.0.0: pinkie-promise "^2.0.0" strip-bom "^2.0.0" -locate-path@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" - integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== - dependencies: - p-locate "^3.0.0" - path-exists "^3.0.0" - lodash.includes@^4.3.0: version "4.3.0" resolved "https://registry.yarnpkg.com/lodash.includes/-/lodash.includes-4.3.0.tgz#60bb98a87cb923c68ca1e51325483314849f553f" @@ -1332,25 +1263,6 @@ os-tmpdir@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" -p-limit@^2.0.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" - integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== - dependencies: - p-try "^2.0.0" - -p-locate@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" - integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== - dependencies: - p-limit "^2.0.0" - -p-try@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" - integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== - parent-module@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" @@ -1363,14 +1275,6 @@ parse-json@^2.2.0: dependencies: error-ex "^1.2.0" -parse-json@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" - integrity sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA= - dependencies: - error-ex "^1.3.1" - json-parse-better-errors "^1.0.1" - parseqs@0.0.5: version "0.0.5" resolved "https://registry.yarnpkg.com/parseqs/-/parseqs-0.0.5.tgz#d5208a3738e46766e291ba2ea173684921a8b89d" @@ -1393,11 +1297,6 @@ path-exists@^2.0.0: dependencies: pinkie-promise "^2.0.0" -path-exists@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" - integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= - path-is-absolute@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" @@ -1426,11 +1325,6 @@ pify@^2.0.0: version "2.3.0" resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" -pify@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" - integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= - pinkie-promise@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" @@ -1499,15 +1393,6 @@ read-pkg@^1.0.0: normalize-package-data "^2.3.2" path-type "^1.0.0" -read-pkg@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-4.0.1.tgz#963625378f3e1c4d48c85872b5a6ec7d5d093237" - integrity sha1-ljYlN48+HE1IyFhytabsfV0JMjc= - dependencies: - normalize-package-data "^2.3.2" - parse-json "^4.0.0" - pify "^3.0.0" - redent@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde" @@ -1529,16 +1414,6 @@ repeating@^2.0.0: dependencies: is-finite "^1.0.0" -require-directory@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" - integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= - -require-main-filename@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" - integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== - resolve-from@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" @@ -1574,13 +1449,6 @@ run-async@^2.4.0: dependencies: is-promise "^2.1.0" -rxjs@^6.5.2: - version "6.6.3" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.3.tgz#8ca84635c4daa900c0d3967a6ee7ac60271ee552" - integrity sha512-trsQc+xYYXZ3urjOiJOuCOa5N3jAZ3eiSpQB5hIT8zGlL2QfnHLJ2r7GMkBGuIausdJN1OneaI6gQlsqNHHmZQ== - dependencies: - tslib "^1.9.0" - rxjs@^6.5.3: version "6.5.5" resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.5.5.tgz#c5c884e3094c8cfee31bf27eb87e54ccfc87f9ec" @@ -1634,11 +1502,6 @@ serve-static@1.14.1: parseurl "~1.3.3" send "0.17.1" -set-blocking@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" - integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= - setprototypeof@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683" @@ -1730,11 +1593,6 @@ source-map@^0.6.0: version "0.6.1" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" -spawn-command@^0.0.2-1: - version "0.0.2-1" - resolved "https://registry.yarnpkg.com/spawn-command/-/spawn-command-0.0.2-1.tgz#62f5e9466981c1b796dc5929937e11c9c6921bd0" - integrity sha1-YvXpRmmBwbeW3Fkpk34RycaSG9A= - spdx-correct@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.0.tgz#fb83e504445268f154b074e218c87c003cd31df4" @@ -1765,7 +1623,7 @@ sprintf-js@~1.0.2: version "1.5.0" resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" -string-width@^3.0.0, string-width@^3.1.0: +string-width@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" dependencies: @@ -1781,7 +1639,7 @@ string-width@^4.1.0: is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.0" -strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: +strip-ansi@^5.1.0, strip-ansi@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" dependencies: @@ -1823,13 +1681,6 @@ supports-color@^5.3.0: dependencies: has-flag "^3.0.0" -supports-color@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3" - integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ== - dependencies: - has-flag "^3.0.0" - supports-color@^7.1.0: version "7.1.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.1.0.tgz#68e32591df73e25ad1c4b49108a2ec507962bfd1" @@ -1878,7 +1729,7 @@ toidentifier@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" -tree-kill@^1.2.1, tree-kill@^1.2.2: +tree-kill@^1.2.1: version "1.2.2" resolved "https://registry.yarnpkg.com/tree-kill/-/tree-kill-1.2.2.tgz#4ca09a9092c88b73a7cdc5e8a01b507b0790a0cc" @@ -1913,13 +1764,6 @@ ts-node@*: source-map-support "^0.5.6" yn "3.1.1" -ts-protoc-gen@^0.13.0: - version "0.13.0" - resolved "https://registry.yarnpkg.com/ts-protoc-gen/-/ts-protoc-gen-0.13.0.tgz#2763ae4e4a1a7d7001d53d2f3043357c691701ea" - integrity sha512-j18X4rkDBbG/ZHUJy88WFeZP6mStGow5uREaohowlHXTu3/N7WcpyPhb7Vh6wN38ERmc/AkT9gqT98+vtlRhJA== - dependencies: - google-protobuf "^3.6.1" - tsconfig@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/tsconfig/-/tsconfig-7.0.0.tgz#84538875a4dc216e5c4a5432b3a4dec3d54e91b7" @@ -2003,11 +1847,6 @@ vary@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" -which-module@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" - integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= - which@^1.2.9, which@^1.3.0: version "1.3.1" resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" @@ -2018,15 +1857,6 @@ word-wrap@~1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" -wrap-ansi@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09" - integrity sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q== - dependencies: - ansi-styles "^3.2.0" - string-width "^3.0.0" - strip-ansi "^5.0.0" - wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" @@ -2055,35 +1885,6 @@ xtend@^4.0.0: version "4.0.2" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" -y18n@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" - integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w== - -yargs-parser@^13.1.2: - version "13.1.2" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38" - integrity sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg== - dependencies: - camelcase "^5.0.0" - decamelize "^1.2.0" - -yargs@^13.3.0: - version "13.3.2" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.2.tgz#ad7ffefec1aa59565ac915f82dccb38a9c31a2dd" - integrity sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw== - dependencies: - cliui "^5.0.0" - find-up "^3.0.0" - get-caller-file "^2.0.1" - require-directory "^2.1.1" - require-main-filename "^2.0.0" - set-blocking "^2.0.0" - string-width "^3.0.0" - which-module "^2.0.0" - y18n "^4.0.0" - yargs-parser "^13.1.2" - yeast@0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/yeast/-/yeast-0.1.2.tgz#008e06d8094320c372dbc2f8ed76a0ca6c8ac419" diff --git a/benchmark/artillery_multi_core.sh b/benchmark/artillery_multi_core.sh deleted file mode 100755 index 5eeb4d60..00000000 --- a/benchmark/artillery_multi_core.sh +++ /dev/null @@ -1,17 +0,0 @@ -#!/bin/bash - -npm run start & -pid1=$! -npm run start:nooutput & -pid2=$! -npm run start:nooutput & -pid3=$! -npm run start:nooutput & -pid4=$! - -wait $pid1 -wait $pid2 -wait $pid3 -wait $pid4 - - diff --git a/benchmark/benchmark_multi_core.sh b/benchmark/benchmark_multi_core.sh new file mode 100755 index 00000000..ef2f2096 --- /dev/null +++ b/benchmark/benchmark_multi_core.sh @@ -0,0 +1,15 @@ +#!/bin/bash + +yarn run start & +pid1=$! +yarn run start & +pid2=$! +yarn run start & +pid3=$! +yarn run start & +pid4=$! + +wait $pid1 +wait $pid2 +wait $pid3 +wait $pid4 diff --git a/benchmark/index.ts b/benchmark/index.ts new file mode 100644 index 00000000..057d5d2f --- /dev/null +++ b/benchmark/index.ts @@ -0,0 +1,48 @@ +import {Connection} from "../front/src/Connection"; + +function sleep(ms) { + return new Promise(resolve => setTimeout(resolve, ms)); +} + +async function startOneUser(): Promise { + const connection = await Connection.createConnection('foo', ['male3']); + + await connection.joinARoom('global__maps.workadventure.localhost/Floor0/floor0', 783, 170, 'down', false, { + top: 0, + bottom: 200, + left: 500, + right: 800 + }); + console.log(connection.getUserId()); + + let angle = Math.random() * Math.PI * 2; + + for (let i = 0; i < 100; i++) { + const x = Math.floor(320 + 1472/2 * (1 + Math.sin(angle))); + const y = Math.floor(200 + 1090/2 * (1 + Math.cos(angle))); + + connection.sharePosition(x, y, 'down', true, { + top: y - 200, + bottom: y + 200, + left: x - 320, + right: x + 320 + }) + + angle += 0.05; + + await sleep(200); + } + + await sleep(10000); + connection.closeConnection(); +} + +(async () => { + let promises: Promise[] = new Array>(); + + for (let userNo = 0; userNo < 40; userNo++) { + promises.push(startOneUser()); + // Wait 0.5s between adding users + await sleep(500); + } +})(); diff --git a/benchmark/package.json b/benchmark/package.json index 59b182bc..2c874a7e 100644 --- a/benchmark/package.json +++ b/benchmark/package.json @@ -3,8 +3,7 @@ "version": "1.0.0", "description": "Load testing for WorkAdventure", "scripts": { - "start": "artillery run socketio-load-test.yaml -o artillery_output.json && artillery report --output artillery_output.html artillery_output.json", - "start:nooutput": "artillery run socketio-load-test.yaml" + "start": "ts-node ./index.ts" }, "contributors": [ { @@ -22,6 +21,11 @@ ], "license": "SEE LICENSE IN LICENSE.txt", "dependencies": { - "artillery": "^1.6.1" + "socket.io-client": "^2.3.0", + "ts-node-dev": "^1.0.0-pre.62", + "typescript": "^4.0.2" + }, + "devDependencies": { + "@types/socket.io-client": "^1.4.33" } } diff --git a/benchmark/yarn.lock b/benchmark/yarn.lock new file mode 100644 index 00000000..4c73bc38 --- /dev/null +++ b/benchmark/yarn.lock @@ -0,0 +1,693 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@types/socket.io-client@^1.4.33": + version "1.4.33" + resolved "https://registry.yarnpkg.com/@types/socket.io-client/-/socket.io-client-1.4.33.tgz#8e705b9b3f7fba6cb329d27cd2eda222812adbf1" + +"@types/strip-bom@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@types/strip-bom/-/strip-bom-3.0.0.tgz#14a8ec3956c2e81edb7520790aecf21c290aebd2" + +"@types/strip-json-comments@0.0.30": + version "0.0.30" + resolved "https://registry.yarnpkg.com/@types/strip-json-comments/-/strip-json-comments-0.0.30.tgz#9aa30c04db212a9a0649d6ae6fd50accc40748a1" + +after@0.8.2: + version "0.8.2" + resolved "https://registry.yarnpkg.com/after/-/after-0.8.2.tgz#fedb394f9f0e02aa9768e702bda23b505fae7e1f" + +anymatch@~3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.1.tgz#c55ecf02185e2469259399310c173ce31233b142" + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +arg@^4.1.0: + version "4.1.3" + resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" + +array-find-index@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1" + +arraybuffer.slice@~0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz#3bbc4275dd584cc1b10809b89d4e8b63a69e7675" + +async-limiter@~1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" + +backo2@1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/backo2/-/backo2-1.0.2.tgz#31ab1ac8b129363463e35b3ebb69f4dfcfba7947" + +balanced-match@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" + +base64-arraybuffer@0.1.5: + version "0.1.5" + resolved "https://registry.yarnpkg.com/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz#73926771923b5a19747ad666aa5cd4bf9c6e9ce8" + +better-assert@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/better-assert/-/better-assert-1.0.2.tgz#40866b9e1b9e0b55b481894311e68faffaebc522" + dependencies: + callsite "1.0.0" + +binary-extensions@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.1.0.tgz#30fa40c9e7fe07dbc895678cd287024dea241dd9" + +blob@0.0.5: + version "0.0.5" + resolved "https://registry.yarnpkg.com/blob/-/blob-0.0.5.tgz#d680eeef25f8cd91ad533f5b01eed48e64caf683" + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +braces@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + dependencies: + fill-range "^7.0.1" + +buffer-from@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" + +callsite@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/callsite/-/callsite-1.0.0.tgz#280398e5d664bd74038b6f0905153e6e8af1bc20" + +camelcase-keys@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7" + dependencies: + camelcase "^2.0.0" + map-obj "^1.0.0" + +camelcase@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f" + +chokidar@^3.4.0: + version "3.4.2" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.4.2.tgz#38dc8e658dec3809741eb3ef7bb0a47fe424232d" + dependencies: + anymatch "~3.1.1" + braces "~3.0.2" + glob-parent "~5.1.0" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.4.0" + optionalDependencies: + fsevents "~2.1.2" + +component-bind@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/component-bind/-/component-bind-1.0.0.tgz#00c608ab7dcd93897c0009651b1d3a8e1e73bbd1" + +component-emitter@1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6" + +component-emitter@~1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" + +component-inherit@0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/component-inherit/-/component-inherit-0.0.3.tgz#645fc4adf58b72b649d5cae65135619db26ff143" + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + +currently-unhandled@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea" + dependencies: + array-find-index "^1.0.1" + +dateformat@~1.0.4-1.2.3: + version "1.0.12" + resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-1.0.12.tgz#9f124b67594c937ff706932e4a642cca8dbbfee9" + dependencies: + get-stdin "^4.0.1" + meow "^3.3.0" + +debug@~3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" + dependencies: + ms "2.0.0" + +debug@~4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" + dependencies: + ms "^2.1.1" + +decamelize@^1.1.2: + version "1.2.0" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" + +diff@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" + +dynamic-dedupe@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/dynamic-dedupe/-/dynamic-dedupe-0.3.0.tgz#06e44c223f5e4e94d78ef9db23a6515ce2f962a1" + dependencies: + xtend "^4.0.0" + +engine.io-client@~3.4.0: + version "3.4.3" + resolved "https://registry.yarnpkg.com/engine.io-client/-/engine.io-client-3.4.3.tgz#192d09865403e3097e3575ebfeb3861c4d01a66c" + dependencies: + component-emitter "~1.3.0" + component-inherit "0.0.3" + debug "~4.1.0" + engine.io-parser "~2.2.0" + has-cors "1.1.0" + indexof "0.0.1" + parseqs "0.0.5" + parseuri "0.0.5" + ws "~6.1.0" + xmlhttprequest-ssl "~1.5.4" + yeast "0.1.2" + +engine.io-parser@~2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/engine.io-parser/-/engine.io-parser-2.2.0.tgz#312c4894f57d52a02b420868da7b5c1c84af80ed" + dependencies: + after "0.8.2" + arraybuffer.slice "~0.0.7" + base64-arraybuffer "0.1.5" + blob "0.0.5" + has-binary2 "~1.0.2" + +error-ex@^1.2.0: + version "1.3.2" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + dependencies: + is-arrayish "^0.2.1" + +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + dependencies: + to-regex-range "^5.0.1" + +find-up@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" + dependencies: + path-exists "^2.0.0" + pinkie-promise "^2.0.0" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + +fsevents@~2.1.2: + version "2.1.3" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.3.tgz#fb738703ae8d2f9fe900c33836ddebee8b97f23e" + +get-stdin@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe" + +glob-parent@~5.1.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.1.tgz#b6c1ef417c4e5663ea498f1c45afac6916bbc229" + dependencies: + is-glob "^4.0.1" + +glob@^7.1.3: + version "7.1.6" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +graceful-fs@^4.1.2: + version "4.2.4" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" + +has-binary2@~1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has-binary2/-/has-binary2-1.0.3.tgz#7776ac627f3ea77250cfc332dab7ddf5e4f5d11d" + dependencies: + isarray "2.0.1" + +has-cors@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/has-cors/-/has-cors-1.1.0.tgz#5e474793f7ea9843d1bb99c23eef49ff126fff39" + +hosted-git-info@^2.1.4: + version "2.8.8" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.8.tgz#7539bd4bc1e0e0a895815a2e0262420b12858488" + +indent-string@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80" + dependencies: + repeating "^2.0.0" + +indexof@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/indexof/-/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d" + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + +is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + dependencies: + binary-extensions "^2.0.0" + +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + +is-finite@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.1.0.tgz#904135c77fb42c0641d6aa1bcdbc4daa8da082f3" + +is-glob@^4.0.1, is-glob@~4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" + dependencies: + is-extglob "^2.1.1" + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + +is-utf8@^0.2.0: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" + +isarray@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.1.tgz#a37d94ed9cda2d59865c9f76fe596ee1f338741e" + +load-json-file@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" + dependencies: + graceful-fs "^4.1.2" + parse-json "^2.2.0" + pify "^2.0.0" + pinkie-promise "^2.0.0" + strip-bom "^2.0.0" + +loud-rejection@^1.0.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f" + dependencies: + currently-unhandled "^0.4.1" + signal-exit "^3.0.0" + +make-error@^1.1.1: + version "1.3.6" + resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" + +map-obj@^1.0.0, map-obj@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" + +meow@^3.3.0: + version "3.7.0" + resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb" + dependencies: + camelcase-keys "^2.0.0" + decamelize "^1.1.2" + loud-rejection "^1.0.0" + map-obj "^1.0.1" + minimist "^1.1.3" + normalize-package-data "^2.3.4" + object-assign "^4.0.1" + read-pkg-up "^1.0.1" + redent "^1.0.0" + trim-newlines "^1.0.0" + +minimatch@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + dependencies: + brace-expansion "^1.1.7" + +minimist@^1.1.3, minimist@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" + +mkdirp@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + +ms@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + +normalize-package-data@^2.3.2, normalize-package-data@^2.3.4: + version "2.5.0" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" + dependencies: + hosted-git-info "^2.1.4" + resolve "^1.10.0" + semver "2 || 3 || 4 || 5" + validate-npm-package-license "^3.0.1" + +normalize-path@^3.0.0, normalize-path@~3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + +object-assign@^4.0.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + +object-component@0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/object-component/-/object-component-0.0.3.tgz#f0c69aa50efc95b866c186f400a33769cb2f1291" + +once@^1.3.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + dependencies: + wrappy "1" + +parse-json@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" + dependencies: + error-ex "^1.2.0" + +parseqs@0.0.5: + version "0.0.5" + resolved "https://registry.yarnpkg.com/parseqs/-/parseqs-0.0.5.tgz#d5208a3738e46766e291ba2ea173684921a8b89d" + dependencies: + better-assert "~1.0.0" + +parseuri@0.0.5: + version "0.0.5" + resolved "https://registry.yarnpkg.com/parseuri/-/parseuri-0.0.5.tgz#80204a50d4dbb779bfdc6ebe2778d90e4bce320a" + dependencies: + better-assert "~1.0.0" + +path-exists@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" + dependencies: + pinkie-promise "^2.0.0" + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + +path-parse@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" + +path-type@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" + dependencies: + graceful-fs "^4.1.2" + pify "^2.0.0" + pinkie-promise "^2.0.0" + +picomatch@^2.0.4, picomatch@^2.2.1: + version "2.2.2" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" + +pify@^2.0.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + +pinkie-promise@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" + dependencies: + pinkie "^2.0.0" + +pinkie@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" + +read-pkg-up@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" + dependencies: + find-up "^1.0.0" + read-pkg "^1.0.0" + +read-pkg@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" + dependencies: + load-json-file "^1.0.0" + normalize-package-data "^2.3.2" + path-type "^1.0.0" + +readdirp@~3.4.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.4.0.tgz#9fdccdf9e9155805449221ac645e8303ab5b9ada" + dependencies: + picomatch "^2.2.1" + +redent@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde" + dependencies: + indent-string "^2.1.0" + strip-indent "^1.0.1" + +repeating@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" + dependencies: + is-finite "^1.0.0" + +resolve@^1.0.0, resolve@^1.10.0: + version "1.17.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.17.0.tgz#b25941b54968231cc2d1bb76a79cb7f2c0bf8444" + dependencies: + path-parse "^1.0.6" + +rimraf@^2.6.1: + version "2.7.1" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" + dependencies: + glob "^7.1.3" + +"semver@2 || 3 || 4 || 5": + version "5.7.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" + +signal-exit@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" + +socket.io-client@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/socket.io-client/-/socket.io-client-2.3.0.tgz#14d5ba2e00b9bcd145ae443ab96b3f86cbcc1bb4" + dependencies: + backo2 "1.0.2" + base64-arraybuffer "0.1.5" + component-bind "1.0.0" + component-emitter "1.2.1" + debug "~4.1.0" + engine.io-client "~3.4.0" + has-binary2 "~1.0.2" + has-cors "1.1.0" + indexof "0.0.1" + object-component "0.0.3" + parseqs "0.0.5" + parseuri "0.0.5" + socket.io-parser "~3.3.0" + to-array "0.1.4" + +socket.io-parser@~3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/socket.io-parser/-/socket.io-parser-3.3.0.tgz#2b52a96a509fdf31440ba40fed6094c7d4f1262f" + dependencies: + component-emitter "1.2.1" + debug "~3.1.0" + isarray "2.0.1" + +source-map-support@^0.5.12, source-map-support@^0.5.17: + version "0.5.19" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61" + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map@^0.6.0: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + +spdx-correct@^3.0.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9" + dependencies: + spdx-expression-parse "^3.0.0" + spdx-license-ids "^3.0.0" + +spdx-exceptions@^2.1.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" + +spdx-expression-parse@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" + dependencies: + spdx-exceptions "^2.1.0" + spdx-license-ids "^3.0.0" + +spdx-license-ids@^3.0.0: + version "3.0.6" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.6.tgz#c80757383c28abf7296744998cbc106ae8b854ce" + +strip-bom@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" + dependencies: + is-utf8 "^0.2.0" + +strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + +strip-indent@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2" + dependencies: + get-stdin "^4.0.1" + +strip-json-comments@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" + +to-array@0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/to-array/-/to-array-0.1.4.tgz#17e6c11f73dd4f3d74cda7a4ff3238e9ad9bf890" + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + dependencies: + is-number "^7.0.0" + +tree-kill@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/tree-kill/-/tree-kill-1.2.2.tgz#4ca09a9092c88b73a7cdc5e8a01b507b0790a0cc" + +trim-newlines@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613" + +ts-node-dev@^1.0.0-pre.62: + version "1.0.0-pre.62" + resolved "https://registry.yarnpkg.com/ts-node-dev/-/ts-node-dev-1.0.0-pre.62.tgz#835644c43669b659a880379b9d06df86cef665ad" + dependencies: + chokidar "^3.4.0" + dateformat "~1.0.4-1.2.3" + dynamic-dedupe "^0.3.0" + minimist "^1.2.5" + mkdirp "^1.0.4" + resolve "^1.0.0" + rimraf "^2.6.1" + source-map-support "^0.5.12" + tree-kill "^1.2.2" + ts-node "^8.10.2" + tsconfig "^7.0.0" + +ts-node@^8.10.2: + version "8.10.2" + resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-8.10.2.tgz#eee03764633b1234ddd37f8db9ec10b75ec7fb8d" + dependencies: + arg "^4.1.0" + diff "^4.0.1" + make-error "^1.1.1" + source-map-support "^0.5.17" + yn "3.1.1" + +tsconfig@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/tsconfig/-/tsconfig-7.0.0.tgz#84538875a4dc216e5c4a5432b3a4dec3d54e91b7" + dependencies: + "@types/strip-bom" "^3.0.0" + "@types/strip-json-comments" "0.0.30" + strip-bom "^3.0.0" + strip-json-comments "^2.0.0" + +typescript@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.0.2.tgz#7ea7c88777c723c681e33bf7988be5d008d05ac2" + +validate-npm-package-license@^3.0.1: + version "3.0.4" + resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" + dependencies: + spdx-correct "^3.0.0" + spdx-expression-parse "^3.0.0" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + +ws@~6.1.0: + version "6.1.4" + resolved "https://registry.yarnpkg.com/ws/-/ws-6.1.4.tgz#5b5c8800afab925e94ccb29d153c8d02c1776ef9" + dependencies: + async-limiter "~1.0.0" + +xmlhttprequest-ssl@~1.5.4: + version "1.5.5" + resolved "https://registry.yarnpkg.com/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz#c2876b06168aadc40e57d97e81191ac8f4398b3e" + +xtend@^4.0.0: + version "4.0.2" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" + +yeast@0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/yeast/-/yeast-0.1.2.tgz#008e06d8094320c372dbc2f8ed76a0ca6c8ac419" + +yn@3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" From 7826b2ea8dab81ce44353b2e7c625b6eaccd3762 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20N=C3=A9grier?= Date: Fri, 18 Sep 2020 17:18:50 +0200 Subject: [PATCH 150/313] Fixing Docker build images to add new messages directory --- .github/workflows/build-and-deploy.yml | 4 ++-- back/Dockerfile | 4 +++- back/src/Model/Websocket/ExSocketInterface.ts | 2 +- front/Dockerfile | 4 +++- 4 files changed, 9 insertions(+), 5 deletions(-) diff --git a/.github/workflows/build-and-deploy.yml b/.github/workflows/build-and-deploy.yml index edd7b553..7e7c9014 100644 --- a/.github/workflows/build-and-deploy.yml +++ b/.github/workflows/build-and-deploy.yml @@ -26,7 +26,7 @@ jobs: uses: docker/build-push-action@v1 with: dockerfile: front/Dockerfile - path: front/ + path: ./ username: ${{ secrets.DOCKER_USERNAME }} password: ${{ secrets.DOCKER_PASSWORD }} repository: thecodingmachine/workadventure-front @@ -49,7 +49,7 @@ jobs: uses: docker/build-push-action@v1 with: dockerfile: back/Dockerfile - path: back/ + path: ./ username: ${{ secrets.DOCKER_USERNAME }} password: ${{ secrets.DOCKER_PASSWORD }} repository: thecodingmachine/workadventure-back diff --git a/back/Dockerfile b/back/Dockerfile index 8b1b8f61..ca98a648 100644 --- a/back/Dockerfile +++ b/back/Dockerfile @@ -1,7 +1,9 @@ FROM thecodingmachine/nodejs:12 -COPY --chown=docker:docker . . +COPY --chown=docker:docker back . +COPY --chown=docker:docker messages ../messages RUN yarn install +RUN cd /usr/src/messages && yarn install ENV NODE_ENV=production diff --git a/back/src/Model/Websocket/ExSocketInterface.ts b/back/src/Model/Websocket/ExSocketInterface.ts index d7edf554..cd1f73ed 100644 --- a/back/src/Model/Websocket/ExSocketInterface.ts +++ b/back/src/Model/Websocket/ExSocketInterface.ts @@ -8,7 +8,7 @@ import {BatchMessage, SubMessage} from "../../../../messages/generated/messages_ export interface ExSocketInterface extends Socket, Identificable { token: string; roomId: string; - webRtcRoomId: string; + webRtcRoomId: string|undefined; userId: number; // A temporary (autoincremented) identifier for this user userUuid: string; // A unique identifier for this user name: string; diff --git a/front/Dockerfile b/front/Dockerfile index c5c605a8..ba2c422b 100644 --- a/front/Dockerfile +++ b/front/Dockerfile @@ -1,8 +1,10 @@ # we are rebuilding on each deploy to cope with the API_URL environment URL FROM thecodingmachine/nodejs:14-apache -COPY --chown=docker:docker . . +COPY --chown=docker:docker front . +COPY --chown=docker:docker messages /var/www/messages RUN yarn install +RUN cd /usr/src/messages && yarn install ENV NODE_ENV=production ENV STARTUP_COMMAND_1="yarn run build" From 30d2a25501a35f93df153aeadadbe89dc89760a9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20N=C3=A9grier?= Date: Fri, 18 Sep 2020 17:36:33 +0200 Subject: [PATCH 151/313] Artillery cleanup --- benchmark/index.ts | 4 +-- benchmark/socketio-load-test.yaml | 44 ------------------------- benchmark/socketioLoadTest.js | 53 ------------------------------- 3 files changed, 1 insertion(+), 100 deletions(-) delete mode 100644 benchmark/socketio-load-test.yaml delete mode 100644 benchmark/socketioLoadTest.js diff --git a/benchmark/index.ts b/benchmark/index.ts index 057d5d2f..736a7bdc 100644 --- a/benchmark/index.ts +++ b/benchmark/index.ts @@ -38,10 +38,8 @@ async function startOneUser(): Promise { } (async () => { - let promises: Promise[] = new Array>(); - for (let userNo = 0; userNo < 40; userNo++) { - promises.push(startOneUser()); + startOneUser(); // Wait 0.5s between adding users await sleep(500); } diff --git a/benchmark/socketio-load-test.yaml b/benchmark/socketio-load-test.yaml deleted file mode 100644 index 81c7e55e..00000000 --- a/benchmark/socketio-load-test.yaml +++ /dev/null @@ -1,44 +0,0 @@ -config: - target: "http://api.workadventure.localhost/" - socketio: - transports: ["websocket"] - query: - token: "test" - phases: - - duration: 20 - arrivalRate: 3 - processor: "./socketioLoadTest.js" -scenarios: - - name: "Connects and moves player for 20 seconds" - weight: 90 - engine: "socketio" - flow: - - emit: - channel: "set-player-details" - data: - name: 'TEST' - characterLayers: ['male3'] - - think: 1 - - emit: - channel: "join-room" - data: - roomId: 'global__maps.workadventure.localhost/Floor0/floor0' - position: - x: 783 - y: 170 - direction: 'down' - moving: false - viewport: - left: 500 - top: 0 - right: 800 - bottom: 200 - - think: 1 - - loop: - - function: "setUserMovesMessage" - - emit: - channel: "user-position" - data: "{{ message }}" - - think: 0.2 - count: 100 - - think: 10 diff --git a/benchmark/socketioLoadTest.js b/benchmark/socketioLoadTest.js deleted file mode 100644 index 3f01bab6..00000000 --- a/benchmark/socketioLoadTest.js +++ /dev/null @@ -1,53 +0,0 @@ -'use strict'; - -require("../messages/generated/messages_pb"); -//import {PositionMessage, UserMovesMessage, ViewportMessage} from "../messages/generated/messages_pb"; - -module.exports = { - setYRandom -}; - -function setYRandom(context, events, done) { - if (context.angle === undefined) { - context.angle = Math.random() * Math.PI * 2; - } - context.angle += 0.05; - - context.vars.x = 320 + 1472/2 * (1 + Math.sin(context.angle)); - context.vars.y = 200 + 1090/2 * (1 + Math.cos(context.angle)); - context.vars.left = context.vars.x - 320; - context.vars.top = context.vars.y - 200; - context.vars.right = context.vars.x + 320; - context.vars.bottom = context.vars.y + 200; - return done(); -} - -function setUserMovesMessage(context, events, done) { - if (context.angle === undefined) { - context.angle = Math.random() * Math.PI * 2; - } - context.angle += 0.05; - - const x = Math.floor(320 + 1472/2 * (1 + Math.sin(context.angle))); - const y = Math.floor(200 + 1090/2 * (1 + Math.cos(context.angle))); - - const positionMessage = new PositionMessage(); - positionMessage.setX(x); - positionMessage.setY(y); - positionMessage.setDirection(PositionMessage.Direction.UP); - positionMessage.setMoving(false); - - const viewportMessage = new ViewportMessage(); - viewportMessage.setTop(y - 200); - viewportMessage.setBottom(y + 200); - viewportMessage.setLeft(x - 320); - viewportMessage.setRight(x + 320); - - const userMovesMessage = new UserMovesMessage(); - userMovesMessage.setPosition(positionMessage); - userMovesMessage.setViewport(viewportMessage); - - context.vars.message = userMovesMessage.serializeBinary().buffer; - console.log(context.vars.message); - return done(); -} From 5c0a4e7c5a11706e8fd8b149a5f88faf2e19b61d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20N=C3=A9grier?= Date: Fri, 18 Sep 2020 17:39:59 +0200 Subject: [PATCH 152/313] Fixing front Dockerfile --- front/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/front/Dockerfile b/front/Dockerfile index ba2c422b..a2bc518f 100644 --- a/front/Dockerfile +++ b/front/Dockerfile @@ -4,7 +4,7 @@ FROM thecodingmachine/nodejs:14-apache COPY --chown=docker:docker front . COPY --chown=docker:docker messages /var/www/messages RUN yarn install -RUN cd /usr/src/messages && yarn install +RUN cd /var/www/messages && yarn install ENV NODE_ENV=production ENV STARTUP_COMMAND_1="yarn run build" From 398ca1760b48b9a8b26037f499f532086148ff38 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20N=C3=A9grier?= Date: Fri, 18 Sep 2020 17:47:18 +0200 Subject: [PATCH 153/313] Fixing CI builds --- .github/workflows/continuous_integration.yml | 8 ++++++++ messages/messages.proto | 14 ++++++++++++++ 2 files changed, 22 insertions(+) diff --git a/.github/workflows/continuous_integration.yml b/.github/workflows/continuous_integration.yml index 7c74fb66..4ca1ebe5 100644 --- a/.github/workflows/continuous_integration.yml +++ b/.github/workflows/continuous_integration.yml @@ -26,6 +26,10 @@ jobs: run: yarn install working-directory: "front" + - name: "Install messages dependencies" + run: yarn install + working-directory: "messages" + - name: "Build" run: yarn run build env: @@ -58,6 +62,10 @@ jobs: run: yarn install working-directory: "back" + - name: "Install messages dependencies" + run: yarn install + working-directory: "messages" + - name: "Build" run: yarn run tsc working-directory: "back" diff --git a/messages/messages.proto b/messages/messages.proto index 7d8cb0a8..9cf6de8a 100644 --- a/messages/messages.proto +++ b/messages/messages.proto @@ -15,6 +15,11 @@ message PositionMessage { bool moving = 4; } +message PointMessage { + int32 x = 1; + int32 y = 2; +} + message ViewportMessage { int32 left = 1; int32 top = 2; @@ -52,3 +57,12 @@ message BatchMessage { string event = 1; repeated SubMessage payload = 2; } + +message GroupUpdateMessage { + int32 groupId = 1; + PointMessage position = 2; +} + +message GroupDeleteMessage { + int32 groupId = 1; +} From d3116c740076059d8312eb542983eb03eaeb3717 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20N=C3=A9grier?= Date: Fri, 18 Sep 2020 17:51:12 +0200 Subject: [PATCH 154/313] Building proto messages in CI --- .github/workflows/continuous_integration.yml | 8 ++++++++ back/Dockerfile | 2 +- front/Dockerfile | 2 +- 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/.github/workflows/continuous_integration.yml b/.github/workflows/continuous_integration.yml index 4ca1ebe5..8545fe58 100644 --- a/.github/workflows/continuous_integration.yml +++ b/.github/workflows/continuous_integration.yml @@ -30,6 +30,10 @@ jobs: run: yarn install working-directory: "messages" + - name: "Build proto messages" + run: yarn run proto + working-directory: "messages" + - name: "Build" run: yarn run build env: @@ -66,6 +70,10 @@ jobs: run: yarn install working-directory: "messages" + - name: "Build proto messages" + run: yarn run proto + working-directory: "messages" + - name: "Build" run: yarn run tsc working-directory: "back" diff --git a/back/Dockerfile b/back/Dockerfile index ca98a648..80c02529 100644 --- a/back/Dockerfile +++ b/back/Dockerfile @@ -3,7 +3,7 @@ FROM thecodingmachine/nodejs:12 COPY --chown=docker:docker back . COPY --chown=docker:docker messages ../messages RUN yarn install -RUN cd /usr/src/messages && yarn install +RUN cd /usr/src/messages && yarn install && yarn proto ENV NODE_ENV=production diff --git a/front/Dockerfile b/front/Dockerfile index a2bc518f..4a6a2e6a 100644 --- a/front/Dockerfile +++ b/front/Dockerfile @@ -4,7 +4,7 @@ FROM thecodingmachine/nodejs:14-apache COPY --chown=docker:docker front . COPY --chown=docker:docker messages /var/www/messages RUN yarn install -RUN cd /var/www/messages && yarn install +RUN cd /var/www/messages && yarn install && yarn proto ENV NODE_ENV=production ENV STARTUP_COMMAND_1="yarn run build" From d2a5060ad2227ffdef9a9e844b7337e6bf3f3a77 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20N=C3=A9grier?= Date: Fri, 18 Sep 2020 18:00:03 +0200 Subject: [PATCH 155/313] Using multistage builds with protocol buffers --- back/Dockerfile | 8 ++++++-- front/Dockerfile | 8 ++++++-- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/back/Dockerfile b/back/Dockerfile index 80c02529..f0c565f9 100644 --- a/back/Dockerfile +++ b/back/Dockerfile @@ -1,9 +1,13 @@ +FROM thecodingmachine/workadventure-back-base:latest as builder +WORKDIR /var/www/messages +COPY --chown=docker:docker messages . +RUN yarn install && yarn proto + FROM thecodingmachine/nodejs:12 COPY --chown=docker:docker back . -COPY --chown=docker:docker messages ../messages +COPY --from=builder --chown=docker:docker /var/www/messages /var/www/messages RUN yarn install -RUN cd /usr/src/messages && yarn install && yarn proto ENV NODE_ENV=production diff --git a/front/Dockerfile b/front/Dockerfile index 4a6a2e6a..98e29a52 100644 --- a/front/Dockerfile +++ b/front/Dockerfile @@ -1,10 +1,14 @@ +FROM thecodingmachine/workadventure-back-base:latest as builder +WORKDIR /var/www/messages +COPY --chown=docker:docker messages . +RUN yarn install && yarn proto + # we are rebuilding on each deploy to cope with the API_URL environment URL FROM thecodingmachine/nodejs:14-apache COPY --chown=docker:docker front . -COPY --chown=docker:docker messages /var/www/messages +COPY --from=builder --chown=docker:docker /var/www/messages /var/www/messages RUN yarn install -RUN cd /var/www/messages && yarn install && yarn proto ENV NODE_ENV=production ENV STARTUP_COMMAND_1="yarn run build" From 5c63573ef1f3e27ed54d76b5abe420f8abdc4866 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20N=C3=A9grier?= Date: Fri, 18 Sep 2020 18:01:36 +0200 Subject: [PATCH 156/313] Adding protoc to CI --- .github/workflows/continuous_integration.yml | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/.github/workflows/continuous_integration.yml b/.github/workflows/continuous_integration.yml index 8545fe58..95aed5a2 100644 --- a/.github/workflows/continuous_integration.yml +++ b/.github/workflows/continuous_integration.yml @@ -20,7 +20,12 @@ jobs: - name: "Setup NodeJS" uses: actions/setup-node@v1 with: - node-version: '12.x' + node-version: '14.x' + + - name: Install Protoc + uses: arduino/setup-protoc@v1 + with: + version: '3.x' - name: "Install dependencies" run: yarn install @@ -62,6 +67,11 @@ jobs: with: node-version: '12.x' + - name: Install Protoc + uses: arduino/setup-protoc@v1 + with: + version: '3.x' + - name: "Install dependencies" run: yarn install working-directory: "back" From b148ca3708b07abfedb19ec6c948c08f4e6dc1b4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20N=C3=A9grier?= Date: Fri, 18 Sep 2020 18:16:26 +0200 Subject: [PATCH 157/313] Linting --- back/src/Controller/IoSocketController.ts | 20 +++++++++++++++----- back/src/Model/Websocket/ProtobufUtils.ts | 6 +++--- front/src/Connection.ts | 2 +- front/src/Network/ProtobufClientUtils.ts | 6 +++--- front/src/Phaser/Game/GameScene.ts | 3 +-- 5 files changed, 23 insertions(+), 14 deletions(-) diff --git a/back/src/Controller/IoSocketController.ts b/back/src/Controller/IoSocketController.ts index f3eab483..985e6da2 100644 --- a/back/src/Controller/IoSocketController.ts +++ b/back/src/Controller/IoSocketController.ts @@ -32,7 +32,6 @@ import { import {UserMovesMessage} from "../../../messages/generated/messages_pb"; import Direction = PositionMessage.Direction; import {ProtobufUtils} from "../Model/Websocket/ProtobufUtils"; -import toPositionMessage = ProtobufUtils.toPositionMessage; enum SocketIoEvent { CONNECTION = "connection", @@ -284,6 +283,12 @@ export class IoSocketController { socket.on(SocketIoEvent.USER_POSITION, (message: unknown): void => { //console.log(SockerIoEvent.USER_POSITION, userMovesMessage); try { + if (!(message instanceof Buffer)) { + socket.emit(SocketIoEvent.MESSAGE_ERROR, {message: 'Invalid USER_POSITION message. Expecting binary buffer.'}); + console.warn('Invalid USER_POSITION message received (expecting binary buffer): ', message); + return; + } + const userMovesMessage = UserMovesMessage.deserializeBinary(new Uint8Array(message as ArrayBuffer)); const userMoves = userMovesMessage.toObject(); @@ -375,14 +380,19 @@ export class IoSocketController { }); // Let's send the user id to the user - socket.on(SocketIoEvent.SET_PLAYER_DETAILS, (message: any, answerFn) => { - console.log(SocketIoEvent.SET_PLAYER_DETAILS, message); + socket.on(SocketIoEvent.SET_PLAYER_DETAILS, (message: unknown, answerFn) => { + //console.log(SocketIoEvent.SET_PLAYER_DETAILS, message); + if (!(message instanceof Buffer)) { + socket.emit(SocketIoEvent.MESSAGE_ERROR, {message: 'Invalid SET_PLAYER_DETAILS message. Expecting binary buffer.'}); + console.warn('Invalid SET_PLAYER_DETAILS message received (expecting binary buffer): ', message); + return; + } const playerDetailsMessage = SetPlayerDetailsMessage.deserializeBinary(new Uint8Array(message)); const playerDetails = { name: playerDetailsMessage.getName(), characterLayers: playerDetailsMessage.getCharacterlayersList() }; - console.log(SocketIoEvent.SET_PLAYER_DETAILS, playerDetails); + //console.log(SocketIoEvent.SET_PLAYER_DETAILS, playerDetails); if (!isSetPlayerDetailsMessage(playerDetails)) { socket.emit(SocketIoEvent.MESSAGE_ERROR, {message: 'Invalid SET_PLAYER_DETAILS message.'}); console.warn('Invalid SET_PLAYER_DETAILS message received: ', playerDetails); @@ -547,7 +557,7 @@ export class IoSocketController { const userMovedMessage = new UserMovedMessage(); userMovedMessage.setUserid(clientUser.userId); - userMovedMessage.setPosition(toPositionMessage(clientUser.position)); + userMovedMessage.setPosition(ProtobufUtils.toPositionMessage(clientUser.position)); const subMessage = new SubMessage(); subMessage.setUsermovedmessage(userMovedMessage); diff --git a/back/src/Model/Websocket/ProtobufUtils.ts b/back/src/Model/Websocket/ProtobufUtils.ts index ff73b7c0..516a744e 100644 --- a/back/src/Model/Websocket/ProtobufUtils.ts +++ b/back/src/Model/Websocket/ProtobufUtils.ts @@ -1,11 +1,11 @@ import {PointInterface} from "./PointInterface"; import {PositionMessage} from "../../../../messages/generated/messages_pb"; import {ExSocketInterface} from "_Model/Websocket/ExSocketInterface"; +import Direction = PositionMessage.Direction; -export namespace ProtobufUtils { - import Direction = PositionMessage.Direction; +export class ProtobufUtils { - export function toPositionMessage(point: PointInterface): PositionMessage { + public static toPositionMessage(point: PointInterface): PositionMessage { let direction: PositionMessage.DirectionMap[keyof PositionMessage.DirectionMap]; switch (point.direction) { case 'up': diff --git a/front/src/Connection.ts b/front/src/Connection.ts index 78f107fe..fa04feb8 100644 --- a/front/src/Connection.ts +++ b/front/src/Connection.ts @@ -152,7 +152,7 @@ export class Connection implements Connection { * Messages inside batched messages are extracted and sent to listeners directly. */ this.socket.on(EventMessage.BATCH, (batchedMessagesBinary: ArrayBuffer) => { - const batchMessage = BatchMessage.deserializeBinary(new Uint8Array(batchedMessagesBinary as ArrayBuffer)); + const batchMessage = BatchMessage.deserializeBinary(new Uint8Array(batchedMessagesBinary)); for (const message of batchMessage.getPayloadList()) { let event: string; diff --git a/front/src/Network/ProtobufClientUtils.ts b/front/src/Network/ProtobufClientUtils.ts index 311ba80d..6755025c 100644 --- a/front/src/Network/ProtobufClientUtils.ts +++ b/front/src/Network/ProtobufClientUtils.ts @@ -1,10 +1,10 @@ import {PositionMessage} from "../../../messages/generated/messages_pb"; import {PointInterface} from "../Connection"; +import Direction = PositionMessage.Direction; -export namespace ProtobufClientUtils { - import Direction = PositionMessage.Direction; +export class ProtobufClientUtils { - export function toPointInterface(position: PositionMessage): PointInterface { + public static toPointInterface(position: PositionMessage): PointInterface { let direction: string; switch (position.getDirection()) { case Direction.UP: diff --git a/front/src/Phaser/Game/GameScene.ts b/front/src/Phaser/Game/GameScene.ts index bf73b31d..c7a7fd3e 100644 --- a/front/src/Phaser/Game/GameScene.ts +++ b/front/src/Phaser/Game/GameScene.ts @@ -42,7 +42,6 @@ import {ActionableItem} from "../Items/ActionableItem"; import {UserInputManager} from "../UserInput/UserInputManager"; import {UserMovedMessage} from "../../../../messages/generated/messages_pb"; import {ProtobufClientUtils} from "../../Network/ProtobufClientUtils"; -import toPointInterface = ProtobufClientUtils.toPointInterface; export enum Textures { @@ -224,7 +223,7 @@ export class GameScene extends Phaser.Scene implements CenterListener { const messageUserMoved: MessageUserMovedInterface = { userId: message.getUserid(), - position: toPointInterface(position) + position: ProtobufClientUtils.toPointInterface(position) } this.updatePlayerPosition(messageUserMoved); From 57545a96a595b0a4ded896f544e35eb1f178f202 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20N=C3=A9grier?= Date: Fri, 18 Sep 2020 18:18:39 +0200 Subject: [PATCH 158/313] Removing binary call because missing typescript def --- back/src/Controller/IoSocketController.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/back/src/Controller/IoSocketController.ts b/back/src/Controller/IoSocketController.ts index 985e6da2..2334111e 100644 --- a/back/src/Controller/IoSocketController.ts +++ b/back/src/Controller/IoSocketController.ts @@ -59,7 +59,7 @@ function emitInBatch(socket: ExSocketInterface, event: string, payload: SubMessa if (socket.batchTimeout === null) { socket.batchTimeout = setTimeout(() => { - socket.binary(true).emit(SocketIoEvent.BATCH, socket.batchedMessages.serializeBinary().buffer); + socket./*binary(true).*/emit(SocketIoEvent.BATCH, socket.batchedMessages.serializeBinary().buffer); socket.batchedMessages = new BatchMessage(); socket.batchTimeout = null; }, 100); From 4c7e458e52de83434883cdfe8babc0fedb8e8ccd Mon Sep 17 00:00:00 2001 From: Gregoire Parant Date: Sat, 19 Sep 2020 01:08:56 +0200 Subject: [PATCH 159/313] create event and brodcast event in backend --- back/src/Controller/IoSocketController.ts | 8 +++ front/dist/resources/style/style.css | 37 +++++----- .../src/WebRtc/ConsoleGlobalMessageManager.ts | 70 +++++++++++++++---- front/src/WebRtc/GlobalMessageManager.ts | 32 +++++++-- 4 files changed, 110 insertions(+), 37 deletions(-) diff --git a/back/src/Controller/IoSocketController.ts b/back/src/Controller/IoSocketController.ts index 56168804..8033044f 100644 --- a/back/src/Controller/IoSocketController.ts +++ b/back/src/Controller/IoSocketController.ts @@ -24,6 +24,7 @@ import {isUserMovesInterface} from "../Model/Websocket/UserMovesMessage"; import {isViewport} from "../Model/Websocket/ViewportMessage"; import {GroupUpdateInterface} from "_Model/Websocket/GroupUpdateInterface"; import {Movable} from "../Model/Movable"; +import {isUnknown} from "generic-type-guard"; enum SockerIoEvent { CONNECTION = "connection", @@ -44,6 +45,9 @@ enum SockerIoEvent { SET_SILENT = "set_silent", // Set or unset the silent mode for this user. SET_VIEWPORT = "set-viewport", BATCH = "batch", + + PLAY_GLOBAL_MESSAGE = "play-global-message", + STOP_GLOBAL_MESSAGE = "stop-global-message", } function emitInBatch(socket: ExSocketInterface, event: string | symbol, payload: unknown): void { @@ -396,6 +400,10 @@ export class IoSocketController { console.error(e); } }); + + socket.on(SockerIoEvent.PLAY_GLOBAL_MESSAGE, (itemEvent: unknown) => { + socket.broadcast.emit(SockerIoEvent.PLAY_GLOBAL_MESSAGE, itemEvent); + }); }); } diff --git a/front/dist/resources/style/style.css b/front/dist/resources/style/style.css index 39a7af02..90ca3826 100644 --- a/front/dist/resources/style/style.css +++ b/front/dist/resources/style/style.css @@ -404,31 +404,31 @@ body { flex-grow: 5; } -.message-container{ - top: 0; - left: 20%; - position: absolute; - width: 60%; - height: auto; - z-index: 200; - background-color: #00000096; - border-radius: 0 0 10px 10px; -} - +.message-container, .main-console{ position: absolute; width: 80%; - top: 0; + height: 80%; + top: -80%; left: 10%; background: #000000a6; z-index: 200; - height: auto; transition: all 0.1s ease-out; } + +.message-container{ + height: auto; + border-radius: 0 0 10px 10px; + color: white; + padding: 10px; + top: 0; +} + +.message-container div, .main-console div{ position: absolute; background: none repeat scroll 0% 0% #ccc0; - border-color: #000000 #ffffff00 #ffffff00 #ffffff00; + border-color: #000000cf #ffffff00 #ffffff00 #ffffff00; border-style: solid; border-width: 20px 7px; height: auto; @@ -437,16 +437,17 @@ body { z-index: 200; left: 45%; transition: all 0.1s ease-out; - display: none; -} -.main-console div.active{ - display: block; + top: 100%; } + +.message-container div span, .main-console div span{ position: absolute; top: -20px; left: 30%; } + +.message-container div:hover, .main-console div:hover{ cursor: pointer; transform: scale(1.2) translateY(3px); diff --git a/front/src/WebRtc/ConsoleGlobalMessageManager.ts b/front/src/WebRtc/ConsoleGlobalMessageManager.ts index fe7fa216..40f0587e 100644 --- a/front/src/WebRtc/ConsoleGlobalMessageManager.ts +++ b/front/src/WebRtc/ConsoleGlobalMessageManager.ts @@ -13,39 +13,81 @@ export const MESSAGE_TYPE = 'message'; export class ConsoleGlobalMessageManager { private Connection: Connection; + private divMainConsole: HTMLDivElement; + private buttonMainConsole: HTMLDivElement; + private activeConsole: boolean = false; constructor(Connection: Connection) { this.Connection = Connection; + this.buttonMainConsole = document.createElement('div'); + this.divMainConsole = document.createElement('div'); this.initialise(); } - initialise(){ + initialise() { const buttonText = document.createElement('span'); buttonText.innerText = 'Console'; - const buttonMainConsole = document.createElement('div'); - buttonMainConsole.classList.add('active'); - buttonMainConsole.appendChild(buttonText) + this.buttonMainConsole.appendChild(buttonText); + this.buttonMainConsole.addEventListener('click', () => { + if(this.activeConsole){ + this.disabled(); + }else{ + this.active(); + } + }); - const divMainConsole = document.createElement('div'); - divMainConsole.className = CLASS_CONSOLE_MESSAGE; - divMainConsole.appendChild(buttonMainConsole) + this.divMainConsole.className = CLASS_CONSOLE_MESSAGE; + this.divMainConsole.appendChild(this.buttonMainConsole); + + this.createTextMessagePart(); const mainSectionDiv = HtmlUtils.getElementByIdOrFail('main-container'); - mainSectionDiv.appendChild(divMainConsole); + mainSectionDiv.appendChild(this.divMainConsole); } - sendMessage(html: string){ - const inputText = HtmlUtils.getElementByIdOrFail(INPUT_CONSOLE_MESSAGE); - const inputType = HtmlUtils.getElementByIdOrFail(INPUT_TYPE_CONSOLE); - if(AUDIO_TYPE !== inputType.innerText && MESSAGE_TYPE !== inputType.innerText){ + createTextMessagePart(){ + const input = document.createElement('textarea'); + this.divMainConsole.appendChild(input); + input.id = INPUT_CONSOLE_MESSAGE; + const buttonSend = document.createElement('button'); + + buttonSend.innerText = 'Envoyer'; + buttonSend.addEventListener('click', (event: MouseEvent) => { + this.sendMessage(); + this.disabled(); + }); + this.divMainConsole.appendChild(buttonSend); + + const typeConsole = document.createElement('input'); + typeConsole.id = INPUT_TYPE_CONSOLE; + typeConsole.value = MESSAGE_TYPE; + typeConsole.type = 'hidden'; + this.divMainConsole.appendChild(typeConsole); + } + + sendMessage(){ + const inputText = HtmlUtils.getElementByIdOrFail(INPUT_CONSOLE_MESSAGE); + const inputType = HtmlUtils.getElementByIdOrFail(INPUT_TYPE_CONSOLE); + if(AUDIO_TYPE !== inputType.value && MESSAGE_TYPE !== inputType.value){ throw "Error event type"; } let GlobalMessage : GlobalMessageInterface = { id: 1, - message: inputText.innerText, - type: inputType.innerText + message: inputText.value, + type: inputType.value }; + inputText.value = ''; this.Connection.emitGlobalMessage(GlobalMessage); } + + active(){ + this.activeConsole = true; + this.divMainConsole.style.top = '0'; + } + + disabled(){ + this.activeConsole = false; + this.divMainConsole.style.top = '-80%'; + } } \ No newline at end of file diff --git a/front/src/WebRtc/GlobalMessageManager.ts b/front/src/WebRtc/GlobalMessageManager.ts index 29868957..6a0ef7e4 100644 --- a/front/src/WebRtc/GlobalMessageManager.ts +++ b/front/src/WebRtc/GlobalMessageManager.ts @@ -23,13 +23,35 @@ export class GlobalMessageManager { } private playMessage(messageId : number, htmlMessage: string){ - const div = document.createElement('div'); - div.innerHTML = htmlMessage; - div.id = this.getHtmlMessageId(messageId); - div.className = "message-container"; + let previousMessage = document.getElementById(this.getHtmlMessageId(messageId)); + if(previousMessage){ + previousMessage.remove(); + } + + //add button to clear message + const buttonText = document.createElement('span'); + buttonText.id = 'button-clear-message' + buttonText.innerText = 'Clear'; + + const buttonMainConsole = document.createElement('div'); + buttonMainConsole.appendChild(buttonText); + buttonMainConsole.addEventListener('click', () => { + messageContainer.style.top = '-80%'; + setTimeout(() => { + messageContainer.remove(); + buttonMainConsole.remove(); + }); + }); + + //add message container + const messageContainer = document.createElement('div'); + messageContainer.innerHTML = htmlMessage; + messageContainer.id = this.getHtmlMessageId(messageId); + messageContainer.className = "message-container"; + messageContainer.appendChild(buttonMainConsole); const mainSectionDiv = HtmlUtils.getElementByIdOrFail('main-container'); - mainSectionDiv.appendChild(div); + mainSectionDiv.appendChild(messageContainer); } private stopMessage(messageId: number){ From 45ad4bbb36c6852ef2ca6c9e0b711d5c95d6d64c Mon Sep 17 00:00:00 2001 From: Gregoire Parant Date: Sun, 20 Sep 2020 17:12:27 +0200 Subject: [PATCH 160/313] Send and play audio message --- back/src/Controller/FileController.ts | 40 +++++++++++++++++++ front/dist/resources/style/style.css | 21 +++++----- .../ConsoleGlobalMessageManager.ts | 29 ++++++++++++-- .../GlobalMessageManager.ts | 37 ++++++++++++++--- front/src/Connection.ts | 9 +++++ front/src/Phaser/Game/GameScene.ts | 4 +- front/src/index.ts | 1 - 7 files changed, 117 insertions(+), 24 deletions(-) create mode 100644 back/src/Controller/FileController.ts rename front/src/{WebRtc => Administration}/ConsoleGlobalMessageManager.ts (79%) rename front/src/{WebRtc => Administration}/GlobalMessageManager.ts (61%) diff --git a/back/src/Controller/FileController.ts b/back/src/Controller/FileController.ts new file mode 100644 index 00000000..162429dc --- /dev/null +++ b/back/src/Controller/FileController.ts @@ -0,0 +1,40 @@ +import {Application, Request, Response} from "express"; +import {OK} from "http-status-codes"; +import {URL_ROOM_STARTED} from "_Enum/EnvironmentVariable"; +import {uuid} from "uuidv4"; + +export class FileController { + App : Application; + + constructor(App : Application) { + this.App = App; + this.uploadAudioMessage(); + this.downloadAudioMessage(); + } + + uploadAudioMessage(){ + this.App.post("/upload-audio-message", (req: Request, res: Response) => { + //TODO check user connected and admin role + //TODO upload audio message + const audioMessageId = uuid(); + return res.status(OK).send({ + id: audioMessageId, + audioMessageUrl: `/audi-message/${audioMessageId}`, + }); + }); + } + + downloadAudioMessage(){ + this.App.post("/download-audio-message/:id", (req: Request, res: Response) => { + //TODO check user connected and admin role + //TODO upload audio message + let audiMessageId = req.params.id; + + let fs = require('fs'); + let path = `/dist/files/${audiMessageId}`; + let file = fs.createReadStream(path); + res.writeHead(200); + file.pipe(res); + }); + } +} \ No newline at end of file diff --git a/front/dist/resources/style/style.css b/front/dist/resources/style/style.css index 90ca3826..bf66bf3d 100644 --- a/front/dist/resources/style/style.css +++ b/front/dist/resources/style/style.css @@ -427,24 +427,21 @@ body { .message-container div, .main-console div{ position: absolute; - background: none repeat scroll 0% 0% #ccc0; - border-color: #000000cf #ffffff00 #ffffff00 #ffffff00; - border-style: solid; - border-width: 20px 7px; - height: auto; - width: 10%; color: white; z-index: 200; - left: 45%; transition: all 0.1s ease-out; top: 100%; + width: 100px; + height: 40px; + background-color: black; + left: calc(50% - 50px); + border-radius: 0 0 10px 10px; + text-align: center; } -.message-container div span, -.main-console div span{ - position: absolute; - top: -20px; - left: 30%; +.message-container div p, +.main-console div p{ + margin-top: 6px; } .message-container div:hover, diff --git a/front/src/WebRtc/ConsoleGlobalMessageManager.ts b/front/src/Administration/ConsoleGlobalMessageManager.ts similarity index 79% rename from front/src/WebRtc/ConsoleGlobalMessageManager.ts rename to front/src/Administration/ConsoleGlobalMessageManager.ts index 40f0587e..61bdc744 100644 --- a/front/src/WebRtc/ConsoleGlobalMessageManager.ts +++ b/front/src/Administration/ConsoleGlobalMessageManager.ts @@ -1,4 +1,4 @@ -import {HtmlUtils} from "./HtmlUtils"; +import {HtmlUtils} from "../WebRtc/HtmlUtils"; import {Connection, GlobalMessageInterface} from "../Connection"; export const CLASS_CONSOLE_MESSAGE = 'main-console'; @@ -25,7 +25,7 @@ export class ConsoleGlobalMessageManager { } initialise() { - const buttonText = document.createElement('span'); + const buttonText = document.createElement('p'); buttonText.innerText = 'Console'; this.buttonMainConsole.appendChild(buttonText); @@ -67,20 +67,41 @@ export class ConsoleGlobalMessageManager { } sendMessage(){ - const inputText = HtmlUtils.getElementByIdOrFail(INPUT_CONSOLE_MESSAGE); const inputType = HtmlUtils.getElementByIdOrFail(INPUT_TYPE_CONSOLE); if(AUDIO_TYPE !== inputType.value && MESSAGE_TYPE !== inputType.value){ throw "Error event type"; } + if(AUDIO_TYPE !== inputType.value){ + return this.sendAudioMessage(); + } + return this.sendTextMessage(); + } + + private sendTextMessage(){ + const inputText = HtmlUtils.getElementByIdOrFail(INPUT_CONSOLE_MESSAGE); let GlobalMessage : GlobalMessageInterface = { id: 1, message: inputText.value, - type: inputType.value + type: MESSAGE_TYPE }; inputText.value = ''; this.Connection.emitGlobalMessage(GlobalMessage); } + private async sendAudioMessage(){ + const inputAudio = HtmlUtils.getElementByIdOrFail(UPLOAD_CONSOLE_MESSAGE); + let res = await this.Connection.uploadAudio(inputAudio.value); + + let GlobalMessage : GlobalMessageInterface = { + id: res.id, + message: res.audioMessageUrl, + type: MESSAGE_TYPE + }; + inputAudio.value = ''; + this.Connection.emitGlobalMessage(GlobalMessage); + } + + active(){ this.activeConsole = true; this.divMainConsole.style.top = '0'; diff --git a/front/src/WebRtc/GlobalMessageManager.ts b/front/src/Administration/GlobalMessageManager.ts similarity index 61% rename from front/src/WebRtc/GlobalMessageManager.ts rename to front/src/Administration/GlobalMessageManager.ts index 6a0ef7e4..ec1693f8 100644 --- a/front/src/WebRtc/GlobalMessageManager.ts +++ b/front/src/Administration/GlobalMessageManager.ts @@ -1,5 +1,6 @@ -import {HtmlUtils} from "./HtmlUtils"; +import {HtmlUtils} from "./../WebRtc/HtmlUtils"; import {Connection, GlobalMessageInterface} from "../Connection"; +import {AUDIO_TYPE, MESSAGE_TYPE} from "./ConsoleGlobalMessageManager"; export class GlobalMessageManager { @@ -13,7 +14,7 @@ export class GlobalMessageManager { initialise(){ //receive signal to show message this.Connection.receivePlayGlobalMessage((message: GlobalMessageInterface) => { - this.playMessage(message.id, message.message); + this.playMessage(message); }); //receive signal to close message @@ -22,14 +23,40 @@ export class GlobalMessageManager { }); } - private playMessage(messageId : number, htmlMessage: string){ - let previousMessage = document.getElementById(this.getHtmlMessageId(messageId)); + private playMessage(message : GlobalMessageInterface){ + let previousMessage = document.getElementById(this.getHtmlMessageId(message.id)); if(previousMessage){ previousMessage.remove(); } + if(AUDIO_TYPE === message.type){ + this.playAudioMessage(message.id, message.message); + } + + if(MESSAGE_TYPE === message.type){ + this.playTextMessage(message.id, message.message); + } + } + + private playAudioMessage(messageId : number, urlMessage: string){ + const messageVideo : HTMLAudioElement = document.createElement('audio'); + messageVideo.id = this.getHtmlMessageId(messageId); + messageVideo.src = urlMessage; + messageVideo.onended = () => { + messageVideo.remove(); + } + messageVideo.onloadeddata = () => { + messageVideo.play(); + }; + const mainSectionDiv = HtmlUtils.getElementByIdOrFail('main-container'); + mainSectionDiv.appendChild(messageVideo); + + //TODO add element when audio message is played + } + + private playTextMessage(messageId : number, htmlMessage: string){ //add button to clear message - const buttonText = document.createElement('span'); + const buttonText = document.createElement('p'); buttonText.id = 'button-clear-message' buttonText.innerText = 'Clear'; diff --git a/front/src/Connection.ts b/front/src/Connection.ts index 1341347b..f8aeb9bc 100644 --- a/front/src/Connection.ts +++ b/front/src/Connection.ts @@ -199,6 +199,15 @@ export class Connection implements Connection { }); } + public uploadAudio(file : any){ + return Axios.post(`${API_URL}/upload-audio-message`, {file}).then((res: any) => { + return res.data; + }).catch((err) => { + console.error(err); + throw err; + }); + } + public closeConnection(): void { this.socket?.close(); } diff --git a/front/src/Phaser/Game/GameScene.ts b/front/src/Phaser/Game/GameScene.ts index 332c3bcd..15b269ae 100644 --- a/front/src/Phaser/Game/GameScene.ts +++ b/front/src/Phaser/Game/GameScene.ts @@ -40,8 +40,8 @@ import {FourOFourSceneName} from "../Reconnecting/FourOFourScene"; import {ItemFactoryInterface} from "../Items/ItemFactoryInterface"; import {ActionableItem} from "../Items/ActionableItem"; import {UserInputManager} from "../UserInput/UserInputManager"; -import {GlobalMessageManager} from "../../WebRtc/GlobalMessageManager"; -import {ConsoleGlobalMessageManager} from "../../WebRtc/ConsoleGlobalMessageManager"; +import {GlobalMessageManager} from "../../Administration/GlobalMessageManager"; +import {ConsoleGlobalMessageManager} from "../../Administration/ConsoleGlobalMessageManager"; export enum Textures { diff --git a/front/src/index.ts b/front/src/index.ts index 2356bd0a..8009843e 100644 --- a/front/src/index.ts +++ b/front/src/index.ts @@ -10,7 +10,6 @@ import {FourOFourScene} from "./Phaser/Reconnecting/FourOFourScene"; import WebGLRenderer = Phaser.Renderer.WebGL.WebGLRenderer; import {OutlinePipeline} from "./Phaser/Shaders/OutlinePipeline"; import {CustomizeScene} from "./Phaser/Login/CustomizeScene"; -import {HtmlUtils} from "./WebRtc/HtmlUtils"; import {CoWebsiteManager} from "./WebRtc/CoWebsiteManager"; //CoWebsiteManager.loadCoWebsite('https://thecodingmachine.com'); From 844bffa98813e7098f366386f60344b4b24df67e Mon Sep 17 00:00:00 2001 From: Gregoire Parant Date: Sun, 20 Sep 2020 19:01:21 +0200 Subject: [PATCH 161/313] Create file controller to upload audio document --- back/package.json | 2 + back/src/App.ts | 3 + back/src/Controller/FileController.ts | 24 ++- back/yarn.lock | 142 +++++++++++++++++- .../ConsoleGlobalMessageManager.ts | 15 +- front/src/Connection.ts | 4 +- 6 files changed, 171 insertions(+), 19 deletions(-) diff --git a/back/package.json b/back/package.json index a20c876f..b061e5a5 100644 --- a/back/package.json +++ b/back/package.json @@ -39,6 +39,7 @@ "@types/express": "^4.17.4", "@types/http-status-codes": "^1.2.0", "@types/jsonwebtoken": "^8.3.8", + "@types/multer": "^1.4.4", "@types/socket.io": "^2.1.4", "@types/uuidv4": "^5.0.0", "body-parser": "^1.19.0", @@ -46,6 +47,7 @@ "generic-type-guard": "^3.2.0", "http-status-codes": "^1.4.0", "jsonwebtoken": "^8.5.1", + "multer": "^1.4.2", "prom-client": "^12.0.0", "socket.io": "^2.3.0", "systeminformation": "^4.26.5", diff --git a/back/src/App.ts b/back/src/App.ts index e12afdb4..401f93fc 100644 --- a/back/src/App.ts +++ b/back/src/App.ts @@ -7,12 +7,14 @@ import bodyParser = require('body-parser'); import * as http from "http"; import {MapController} from "./Controller/MapController"; import {PrometheusController} from "./Controller/PrometheusController"; +import {FileController} from "./Controller/FileController"; class App { public app: Application; public server: http.Server; public ioSocketController: IoSocketController; public authenticateController: AuthenticateController; + public fileController: FileController; public mapController: MapController; public prometheusController: PrometheusController; @@ -30,6 +32,7 @@ class App { //create socket controllers this.ioSocketController = new IoSocketController(this.server); this.authenticateController = new AuthenticateController(this.app); + this.fileController = new FileController(this.app); this.mapController = new MapController(this.app); this.prometheusController = new PrometheusController(this.app, this.ioSocketController); } diff --git a/back/src/Controller/FileController.ts b/back/src/Controller/FileController.ts index 162429dc..a337537f 100644 --- a/back/src/Controller/FileController.ts +++ b/back/src/Controller/FileController.ts @@ -1,7 +1,11 @@ -import {Application, Request, Response} from "express"; +import {Application, Request, RequestHandler, Response} from "express"; import {OK} from "http-status-codes"; import {URL_ROOM_STARTED} from "_Enum/EnvironmentVariable"; import {uuid} from "uuidv4"; +import multer from 'multer'; +import fs from "fs"; + +const upload = multer({ dest: 'dist/files/' }); export class FileController { App : Application; @@ -13,26 +17,30 @@ export class FileController { } uploadAudioMessage(){ - this.App.post("/upload-audio-message", (req: Request, res: Response) => { + this.App.post("/upload-audio-message", (upload.single('file') as RequestHandler), (req: Request, res: Response) => { //TODO check user connected and admin role //TODO upload audio message const audioMessageId = uuid(); + + fs.copyFileSync(req.file.path, `dist/files/${audioMessageId}`); + fs.unlinkSync(req.file.path); + return res.status(OK).send({ id: audioMessageId, - audioMessageUrl: `/audi-message/${audioMessageId}`, + path: `/download-audio-message/${audioMessageId}` }); }); } downloadAudioMessage(){ - this.App.post("/download-audio-message/:id", (req: Request, res: Response) => { + this.App.get("/download-audio-message/:id", (req: Request, res: Response) => { //TODO check user connected and admin role //TODO upload audio message - let audiMessageId = req.params.id; + const audiMessageId = req.params.id; - let fs = require('fs'); - let path = `/dist/files/${audiMessageId}`; - let file = fs.createReadStream(path); + const fs = require('fs'); + const path = `dist/files/${audiMessageId}`; + const file = fs.createReadStream(path); res.writeHead(200); file.pipe(res); }); diff --git a/back/yarn.lock b/back/yarn.lock index f660a5c8..83ab3c54 100644 --- a/back/yarn.lock +++ b/back/yarn.lock @@ -48,6 +48,16 @@ "@types/node" "*" "@types/range-parser" "*" +"@types/express@*": + version "4.17.8" + resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.8.tgz#3df4293293317e61c60137d273a2e96cd8d5f27a" + integrity sha512-wLhcKh3PMlyA2cNAB9sjM1BntnhPMiM0JOBwPBqttjHev2428MLEB4AYVN+d8s2iyCVZac+o41Pflm/ZH5vLXQ== + dependencies: + "@types/body-parser" "*" + "@types/express-serve-static-core" "*" + "@types/qs" "*" + "@types/serve-static" "*" + "@types/express@^4.17.4": version "4.17.4" resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.4.tgz#e78bf09f3f530889575f4da8a94cd45384520aac" @@ -81,6 +91,13 @@ version "2.0.1" resolved "https://registry.yarnpkg.com/@types/mime/-/mime-2.0.1.tgz#dc488842312a7f075149312905b5e3c0b054c79d" +"@types/multer@^1.4.4": + version "1.4.4" + resolved "https://registry.yarnpkg.com/@types/multer/-/multer-1.4.4.tgz#bb5d9abc410da82726ceca74008bb81813349a88" + integrity sha512-wdfkiKBBEMTODNbuF3J+qDDSqJxt50yB9pgDiTcFew7f97Gcc7/sM4HR66ofGgpJPOALWOqKAch4gPyqEXSkeQ== + dependencies: + "@types/express" "*" + "@types/node@*": version "13.11.0" resolved "https://registry.yarnpkg.com/@types/node/-/node-13.11.0.tgz#390ea202539c61c8fa6ba4428b57e05bc36dc47b" @@ -214,6 +231,11 @@ ansi-styles@^4.1.0: "@types/color-name" "^1.1.1" color-convert "^2.0.1" +append-field@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/append-field/-/append-field-1.0.0.tgz#1e3440e915f0b1203d23748e78edd7b9b5b43e56" + integrity sha1-HjRA6RXwsSA9I3SOeO3XubW0PlY= + arg@^4.1.0: version "4.1.3" resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" @@ -305,6 +327,14 @@ buffer-from@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" +busboy@^0.2.11: + version "0.2.14" + resolved "https://registry.yarnpkg.com/busboy/-/busboy-0.2.14.tgz#6c2a622efcf47c57bbbe1e2a9c37ad36c7925453" + integrity sha1-bCpiLvz0fFe7vh4qnDetNseSVFM= + dependencies: + dicer "0.2.5" + readable-stream "1.1.x" + bytes@3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" @@ -393,6 +423,16 @@ concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" +concat-stream@^1.5.2: + version "1.6.2" + resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" + integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== + dependencies: + buffer-from "^1.0.0" + inherits "^2.0.3" + readable-stream "^2.2.2" + typedarray "^0.0.6" + content-disposition@0.5.3: version "0.5.3" resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.3.tgz#e130caf7e7279087c5616c2007d0485698984fbd" @@ -415,6 +455,11 @@ cookie@0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.0.tgz#beb437e7022b3b6d49019d088665303ebe9c14ba" +core-util-is@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= + cross-spawn@^6.0.5: version "6.0.5" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" @@ -476,6 +521,14 @@ destroy@~1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" +dicer@0.2.5: + version "0.2.5" + resolved "https://registry.yarnpkg.com/dicer/-/dicer-0.2.5.tgz#5996c086bb33218c812c090bddc09cd12facb70f" + integrity sha1-WZbAhrszIYyBLAkL3cCc0S+stw8= + dependencies: + readable-stream "1.1.x" + streamsearch "0.1.2" + diff@^4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" @@ -914,7 +967,7 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@2.0.4: +inherits@2, inherits@2.0.4, inherits@^2.0.3, inherits@~2.0.1, inherits@~2.0.3: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" @@ -982,10 +1035,20 @@ is-wsl@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" +isarray@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" + integrity sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8= + isarray@2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.1.tgz#a37d94ed9cda2d59865c9f76fe596ee1f338741e" +isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= + isexe@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" @@ -1187,6 +1250,20 @@ ms@^2.1.1: version "2.1.2" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" +multer@^1.4.2: + version "1.4.2" + resolved "https://registry.yarnpkg.com/multer/-/multer-1.4.2.tgz#2f1f4d12dbaeeba74cb37e623f234bf4d3d2057a" + integrity sha512-xY8pX7V+ybyUpbYMxtjM9KAiD9ixtg5/JkeKUTD6xilfDv0vzzOFcCp4Ljb1UU3tSOM3VTZtKo63OmzOrGi3Cg== + dependencies: + append-field "^1.0.0" + busboy "^0.2.11" + concat-stream "^1.5.2" + mkdirp "^0.5.1" + object-assign "^4.1.1" + on-finished "^2.3.0" + type-is "^1.6.4" + xtend "^4.0.0" + mute-stream@0.0.8: version "0.0.8" resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" @@ -1222,7 +1299,7 @@ normalize-package-data@^2.3.2, normalize-package-data@^2.3.4: semver "2 || 3 || 4 || 5" validate-npm-package-license "^3.0.1" -object-assign@^4.0.1: +object-assign@^4.0.1, object-assign@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" @@ -1230,7 +1307,7 @@ object-component@0.0.3: version "0.0.3" resolved "https://registry.yarnpkg.com/object-component/-/object-component-0.0.3.tgz#f0c69aa50efc95b866c186f400a33769cb2f1291" -on-finished@~2.3.0: +on-finished@^2.3.0, on-finished@~2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" dependencies: @@ -1339,6 +1416,11 @@ prelude-ls@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" +process-nextick-args@~2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" + integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== + progress@^2.0.0: version "2.0.3" resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" @@ -1393,6 +1475,29 @@ read-pkg@^1.0.0: normalize-package-data "^2.3.2" path-type "^1.0.0" +readable-stream@1.1.x: + version "1.1.14" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9" + integrity sha1-fPTFTvZI44EwhMY23SB54WbAgdk= + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.1" + isarray "0.0.1" + string_decoder "~0.10.x" + +readable-stream@^2.2.2: + version "2.3.7" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" + integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + redent@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde" @@ -1455,7 +1560,7 @@ rxjs@^6.5.3: dependencies: tslib "^1.9.0" -safe-buffer@5.1.2: +safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.2" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" @@ -1623,6 +1728,11 @@ sprintf-js@~1.0.2: version "1.5.0" resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" +streamsearch@0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/streamsearch/-/streamsearch-0.1.2.tgz#808b9d0e56fc273d809ba57338e929919a1a9f1a" + integrity sha1-gIudDlb8Jz2Am6VzOOkpkZoanxo= + string-width@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" @@ -1639,6 +1749,18 @@ string-width@^4.1.0: is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.0" +string_decoder@~0.10.x: + version "0.10.31" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" + integrity sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ= + +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + strip-ansi@^5.1.0, strip-ansi@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" @@ -1797,13 +1919,18 @@ type-fest@^0.8.1: version "0.8.1" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" -type-is@~1.6.17, type-is@~1.6.18: +type-is@^1.6.4, type-is@~1.6.17, type-is@~1.6.18: version "1.6.18" resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" dependencies: media-typer "0.3.0" mime-types "~2.1.24" +typedarray@^0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" + integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= + typescript@^3.8.3: version "3.8.3" resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.8.3.tgz#409eb8544ea0335711205869ec458ab109ee1061" @@ -1818,6 +1945,11 @@ uri-js@^4.2.2: dependencies: punycode "^2.1.0" +util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= + utils-merge@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" diff --git a/front/src/Administration/ConsoleGlobalMessageManager.ts b/front/src/Administration/ConsoleGlobalMessageManager.ts index 61bdc744..4a76a0d2 100644 --- a/front/src/Administration/ConsoleGlobalMessageManager.ts +++ b/front/src/Administration/ConsoleGlobalMessageManager.ts @@ -71,7 +71,7 @@ export class ConsoleGlobalMessageManager { if(AUDIO_TYPE !== inputType.value && MESSAGE_TYPE !== inputType.value){ throw "Error event type"; } - if(AUDIO_TYPE !== inputType.value){ + if(AUDIO_TYPE === inputType.value){ return this.sendAudioMessage(); } return this.sendTextMessage(); @@ -89,12 +89,19 @@ export class ConsoleGlobalMessageManager { } private async sendAudioMessage(){ - const inputAudio = HtmlUtils.getElementByIdOrFail(UPLOAD_CONSOLE_MESSAGE); - let res = await this.Connection.uploadAudio(inputAudio.value); + const inputAudio = HtmlUtils.getElementByIdOrFail(UPLOAD_CONSOLE_MESSAGE); + const selectedFile = inputAudio.files ? inputAudio.files[0] : null; + if(!selectedFile){ + throw 'no file selected'; + } + + const fd = new FormData(); + fd.append('file', selectedFile); + let res = await this.Connection.uploadAudio(fd); let GlobalMessage : GlobalMessageInterface = { id: res.id, - message: res.audioMessageUrl, + message: res.path, type: MESSAGE_TYPE }; inputAudio.value = ''; diff --git a/front/src/Connection.ts b/front/src/Connection.ts index f8aeb9bc..66a133f3 100644 --- a/front/src/Connection.ts +++ b/front/src/Connection.ts @@ -199,8 +199,8 @@ export class Connection implements Connection { }); } - public uploadAudio(file : any){ - return Axios.post(`${API_URL}/upload-audio-message`, {file}).then((res: any) => { + public uploadAudio(file : FormData){ + return Axios.post(`${API_URL}/upload-audio-message`, file).then((res: any) => { return res.data; }).catch((err) => { console.error(err); From 9b955ebd20fe819ab64c4158cbc65490e5bb2f1d Mon Sep 17 00:00:00 2001 From: Gregoire Parant Date: Sun, 20 Sep 2020 19:31:24 +0200 Subject: [PATCH 162/313] fix style quill box --- front/dist/index.html | 9 ++++ front/dist/resources/style/style.css | 26 +++++++--- .../ConsoleGlobalMessageManager.ts | 51 ++++++++++++++++--- 3 files changed, 74 insertions(+), 12 deletions(-) diff --git a/front/dist/index.html b/front/dist/index.html index 4fd514a8..f885079a 100644 --- a/front/dist/index.html +++ b/front/dist/index.html @@ -6,6 +6,12 @@ content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"> + + + + + + + @@ -40,6 +47,7 @@
    +
    @@ -120,5 +128,6 @@ + diff --git a/front/dist/resources/style/style.css b/front/dist/resources/style/style.css index bf66bf3d..6ad80d88 100644 --- a/front/dist/resources/style/style.css +++ b/front/dist/resources/style/style.css @@ -409,6 +409,7 @@ body { position: absolute; width: 80%; height: 80%; + min-height: 200px; top: -80%; left: 10%; background: #000000a6; @@ -424,8 +425,8 @@ body { top: 0; } -.message-container div, -.main-console div{ +.main-console div.console, +.message-container div { position: absolute; color: white; z-index: 200; @@ -439,13 +440,26 @@ body { text-align: center; } -.message-container div p, -.main-console div p{ +.main-console div.console p, +.message-container div p{ margin-top: 6px; } -.message-container div:hover, -.main-console div:hover{ +.main-console div.console:hover, +.message-container div:hover { cursor: pointer; transform: scale(1.2) translateY(3px); +} + +.main-console #input-send-text{ + min-height: 200px; +} + +.main-console #input-send-text .ql-editor{ + color: white; + min-height: 200px; +} + +.main-console .ql-toolbar{ + background: white; } \ No newline at end of file diff --git a/front/src/Administration/ConsoleGlobalMessageManager.ts b/front/src/Administration/ConsoleGlobalMessageManager.ts index 4a76a0d2..7be459d4 100644 --- a/front/src/Administration/ConsoleGlobalMessageManager.ts +++ b/front/src/Administration/ConsoleGlobalMessageManager.ts @@ -1,3 +1,5 @@ +const Quill = require("quill"); + import {HtmlUtils} from "../WebRtc/HtmlUtils"; import {Connection, GlobalMessageInterface} from "../Connection"; @@ -20,6 +22,7 @@ export class ConsoleGlobalMessageManager { constructor(Connection: Connection) { this.Connection = Connection; this.buttonMainConsole = document.createElement('div'); + this.buttonMainConsole.classList.add('console'); this.divMainConsole = document.createElement('div'); this.initialise(); } @@ -47,23 +50,59 @@ export class ConsoleGlobalMessageManager { } createTextMessagePart(){ - const input = document.createElement('textarea'); - this.divMainConsole.appendChild(input); - input.id = INPUT_CONSOLE_MESSAGE; - const buttonSend = document.createElement('button'); + const div = document.createElement('div'); + div.id = INPUT_CONSOLE_MESSAGE; + const buttonSend = document.createElement('button'); buttonSend.innerText = 'Envoyer'; buttonSend.addEventListener('click', (event: MouseEvent) => { this.sendMessage(); this.disabled(); }); - this.divMainConsole.appendChild(buttonSend); const typeConsole = document.createElement('input'); typeConsole.id = INPUT_TYPE_CONSOLE; typeConsole.value = MESSAGE_TYPE; typeConsole.type = 'hidden'; - this.divMainConsole.appendChild(typeConsole); + + const section = document.createElement('section'); + section.appendChild(buttonSend); + section.appendChild(typeConsole); + section.appendChild(div); + this.divMainConsole.appendChild(section); + + //TODO refactor + setTimeout(() => { + const toolbarOptions = [ + ['bold', 'italic', 'underline', 'strike'], // toggled buttons + ['blockquote', 'code-block'], + + [{ 'header': 1 }, { 'header': 2 }], // custom button values + [{ 'list': 'ordered'}, { 'list': 'bullet' }], + [{ 'script': 'sub'}, { 'script': 'super' }], // superscript/subscript + [{ 'indent': '-1'}, { 'indent': '+1' }], // outdent/indent + [{ 'direction': 'rtl' }], // text direction + + [{ 'size': ['small', false, 'large', 'huge'] }], // custom dropdown + [{ 'header': [1, 2, 3, 4, 5, 6, false] }], + + [{ 'color': [] }, { 'background': [] }], // dropdown with defaults from theme + [{ 'font': [] }], + [{ 'align': [] }], + + ['clean'], + + ['link', 'image', 'video'] + // remove formatting button + ]; + + let quill = new Quill(`#${INPUT_CONSOLE_MESSAGE}`, { + theme: 'snow', + modules: { + toolbar: toolbarOptions + }, + }); + }, 1000); } sendMessage(){ From e0ae79eaf17e91bf237f2f70b96846535f9035e9 Mon Sep 17 00:00:00 2001 From: Gregoire Parant Date: Mon, 21 Sep 2020 00:34:25 +0200 Subject: [PATCH 163/313] Fini quill box --- front/dist/resources/style/style.css | 21 +++++++++++ .../ConsoleGlobalMessageManager.ts | 18 ++++++++-- front/src/Phaser/Game/GameScene.ts | 5 +-- .../src/Phaser/UserInput/UserInputManager.ts | 35 ++++++++++++------- 4 files changed, 61 insertions(+), 18 deletions(-) diff --git a/front/dist/resources/style/style.css b/front/dist/resources/style/style.css index 6ad80d88..31fb8b51 100644 --- a/front/dist/resources/style/style.css +++ b/front/dist/resources/style/style.css @@ -462,4 +462,25 @@ body { .main-console .ql-toolbar{ background: white; +} + +.main-console .btn-action{ + margin: 10px; + text-align: center; +} + +.main-console .btn-action .btn{ + border: 1px solid black; + background-color: #00000000; + color: #ffda01; + border-radius: 10px; + padding: 10px 30px; + transition: all .2s ease; +} +.main-console .btn-action .btn:hover{ + cursor: pointer; + background-color: #ffda01; + color: black; + border: 1px solid black; + transform: scale(1.1); } \ No newline at end of file diff --git a/front/src/Administration/ConsoleGlobalMessageManager.ts b/front/src/Administration/ConsoleGlobalMessageManager.ts index 7be459d4..2c576cba 100644 --- a/front/src/Administration/ConsoleGlobalMessageManager.ts +++ b/front/src/Administration/ConsoleGlobalMessageManager.ts @@ -1,7 +1,10 @@ +import {GameScene} from "../Phaser/Game/GameScene"; + const Quill = require("quill"); import {HtmlUtils} from "../WebRtc/HtmlUtils"; import {Connection, GlobalMessageInterface} from "../Connection"; +import {UserInputManager} from "../Phaser/UserInput/UserInputManager"; export const CLASS_CONSOLE_MESSAGE = 'main-console'; export const INPUT_CONSOLE_MESSAGE = 'input-send-text'; @@ -18,12 +21,14 @@ export class ConsoleGlobalMessageManager { private divMainConsole: HTMLDivElement; private buttonMainConsole: HTMLDivElement; private activeConsole: boolean = false; + private userInputManager!: UserInputManager; - constructor(Connection: Connection) { + constructor(Connection: Connection, userInputManager : UserInputManager) { this.Connection = Connection; this.buttonMainConsole = document.createElement('div'); this.buttonMainConsole.classList.add('console'); this.divMainConsole = document.createElement('div'); + this.userInputManager = userInputManager; this.initialise(); } @@ -55,10 +60,14 @@ export class ConsoleGlobalMessageManager { const buttonSend = document.createElement('button'); buttonSend.innerText = 'Envoyer'; + buttonSend.classList.add('btn'); buttonSend.addEventListener('click', (event: MouseEvent) => { this.sendMessage(); this.disabled(); }); + const buttonDiv = document.createElement('div'); + buttonDiv.classList.add('btn-action'); + buttonDiv.appendChild(buttonSend) const typeConsole = document.createElement('input'); typeConsole.id = INPUT_TYPE_CONSOLE; @@ -66,9 +75,9 @@ export class ConsoleGlobalMessageManager { typeConsole.type = 'hidden'; const section = document.createElement('section'); - section.appendChild(buttonSend); - section.appendChild(typeConsole); section.appendChild(div); + section.appendChild(buttonDiv); + section.appendChild(typeConsole); this.divMainConsole.appendChild(section); //TODO refactor @@ -102,6 +111,7 @@ export class ConsoleGlobalMessageManager { toolbar: toolbarOptions }, }); + }, 1000); } @@ -149,11 +159,13 @@ export class ConsoleGlobalMessageManager { active(){ + this.userInputManager.clearAllInputKeyboard(); this.activeConsole = true; this.divMainConsole.style.top = '0'; } disabled(){ + this.userInputManager.initKeyBoardEvent(); this.activeConsole = false; this.divMainConsole.style.top = '-80%'; } diff --git a/front/src/Phaser/Game/GameScene.ts b/front/src/Phaser/Game/GameScene.ts index 15b269ae..654b9d75 100644 --- a/front/src/Phaser/Game/GameScene.ts +++ b/front/src/Phaser/Game/GameScene.ts @@ -270,8 +270,6 @@ export class GameScene extends Phaser.Scene implements CenterListener { // When connection is performed, let's connect SimplePeer this.simplePeer = new SimplePeer(this.connection); this.GlobalMessageManager = new GlobalMessageManager(this.connection); - //TODO check right of user - this.ConsoleGlobalMessageManager = new ConsoleGlobalMessageManager(this.connection); const self = this; this.simplePeer.registerPeerConnectionListener({ @@ -483,6 +481,9 @@ export class GameScene extends Phaser.Scene implements CenterListener { //create input to move this.userInputManager = new UserInputManager(this); + //TODO check right of user + this.ConsoleGlobalMessageManager = new ConsoleGlobalMessageManager(this.connection, this.userInputManager); + //notify game manager can to create currentUser in map this.createCurrentPlayer(); diff --git a/front/src/Phaser/UserInput/UserInputManager.ts b/front/src/Phaser/UserInput/UserInputManager.ts index d40d149e..a7be41cf 100644 --- a/front/src/Phaser/UserInput/UserInputManager.ts +++ b/front/src/Phaser/UserInput/UserInputManager.ts @@ -29,29 +29,38 @@ export class ActiveEventList { //this class is responsible for catching user inputs and listing all active user actions at every game tick events. export class UserInputManager { - private KeysCode: UserInputManagerDatum[]; + private KeysCode!: UserInputManagerDatum[]; + private Scene: GameScene; constructor(Scene : GameScene) { + this.Scene = Scene; + this.initKeyBoardEvent(); + } + initKeyBoardEvent(){ this.KeysCode = [ - {event: UserInputEvent.MoveUp, keyInstance: Scene.input.keyboard.addKey(Phaser.Input.Keyboard.KeyCodes.Z) }, - {event: UserInputEvent.MoveLeft, keyInstance: Scene.input.keyboard.addKey(Phaser.Input.Keyboard.KeyCodes.Q) }, - {event: UserInputEvent.MoveDown, keyInstance: Scene.input.keyboard.addKey(Phaser.Input.Keyboard.KeyCodes.S) }, - {event: UserInputEvent.MoveRight, keyInstance: Scene.input.keyboard.addKey(Phaser.Input.Keyboard.KeyCodes.D) }, + {event: UserInputEvent.MoveUp, keyInstance: this.Scene.input.keyboard.addKey(Phaser.Input.Keyboard.KeyCodes.Z) }, + {event: UserInputEvent.MoveLeft, keyInstance: this.Scene.input.keyboard.addKey(Phaser.Input.Keyboard.KeyCodes.Q) }, + {event: UserInputEvent.MoveDown, keyInstance: this.Scene.input.keyboard.addKey(Phaser.Input.Keyboard.KeyCodes.S) }, + {event: UserInputEvent.MoveRight, keyInstance: this.Scene.input.keyboard.addKey(Phaser.Input.Keyboard.KeyCodes.D) }, - {event: UserInputEvent.MoveUp, keyInstance: Scene.input.keyboard.addKey(Phaser.Input.Keyboard.KeyCodes.UP) }, - {event: UserInputEvent.MoveLeft, keyInstance: Scene.input.keyboard.addKey(Phaser.Input.Keyboard.KeyCodes.LEFT) }, - {event: UserInputEvent.MoveDown, keyInstance: Scene.input.keyboard.addKey(Phaser.Input.Keyboard.KeyCodes.DOWN) }, - {event: UserInputEvent.MoveRight, keyInstance: Scene.input.keyboard.addKey(Phaser.Input.Keyboard.KeyCodes.RIGHT) }, + {event: UserInputEvent.MoveUp, keyInstance: this.Scene.input.keyboard.addKey(Phaser.Input.Keyboard.KeyCodes.UP) }, + {event: UserInputEvent.MoveLeft, keyInstance: this.Scene.input.keyboard.addKey(Phaser.Input.Keyboard.KeyCodes.LEFT) }, + {event: UserInputEvent.MoveDown, keyInstance: this.Scene.input.keyboard.addKey(Phaser.Input.Keyboard.KeyCodes.DOWN) }, + {event: UserInputEvent.MoveRight, keyInstance: this.Scene.input.keyboard.addKey(Phaser.Input.Keyboard.KeyCodes.RIGHT) }, - {event: UserInputEvent.SpeedUp, keyInstance: Scene.input.keyboard.addKey(Phaser.Input.Keyboard.KeyCodes.SHIFT) }, + {event: UserInputEvent.SpeedUp, keyInstance: this.Scene.input.keyboard.addKey(Phaser.Input.Keyboard.KeyCodes.SHIFT) }, - {event: UserInputEvent.Interact, keyInstance: Scene.input.keyboard.addKey(Phaser.Input.Keyboard.KeyCodes.E) }, - {event: UserInputEvent.Interact, keyInstance: Scene.input.keyboard.addKey(Phaser.Input.Keyboard.KeyCodes.SPACE) }, - {event: UserInputEvent.Shout, keyInstance: Scene.input.keyboard.addKey(Phaser.Input.Keyboard.KeyCodes.F) }, + {event: UserInputEvent.Interact, keyInstance: this.Scene.input.keyboard.addKey(Phaser.Input.Keyboard.KeyCodes.E) }, + {event: UserInputEvent.Interact, keyInstance: this.Scene.input.keyboard.addKey(Phaser.Input.Keyboard.KeyCodes.SPACE) }, + {event: UserInputEvent.Shout, keyInstance: this.Scene.input.keyboard.addKey(Phaser.Input.Keyboard.KeyCodes.F) }, ]; } + clearAllInputKeyboard(){ + this.Scene.input.keyboard.removeAllKeys(); + } + getEventListForGameTick(): ActiveEventList { const eventsMap = new ActiveEventList(); this.KeysCode.forEach(d => { From 1829912c91ff02bbc4af086056085cf6c32f534c Mon Sep 17 00:00:00 2001 From: Gregoire Parant Date: Mon, 21 Sep 2020 00:42:39 +0200 Subject: [PATCH 164/313] Fix remove last childnode --- front/src/Administration/ConsoleGlobalMessageManager.ts | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/front/src/Administration/ConsoleGlobalMessageManager.ts b/front/src/Administration/ConsoleGlobalMessageManager.ts index 2c576cba..21bd4514 100644 --- a/front/src/Administration/ConsoleGlobalMessageManager.ts +++ b/front/src/Administration/ConsoleGlobalMessageManager.ts @@ -33,6 +33,11 @@ export class ConsoleGlobalMessageManager { } initialise() { + const mainSectionDiv = HtmlUtils.getElementByIdOrFail('main-container'); + mainSectionDiv.childNodes.forEach((c : ChildNode) => { + c.remove(); + }); + const buttonText = document.createElement('p'); buttonText.innerText = 'Console'; @@ -50,7 +55,6 @@ export class ConsoleGlobalMessageManager { this.createTextMessagePart(); - const mainSectionDiv = HtmlUtils.getElementByIdOrFail('main-container'); mainSectionDiv.appendChild(this.divMainConsole); } From 16b3e487116b68c9d21e76e248e6d88ad22ce73c Mon Sep 17 00:00:00 2001 From: Gregoire Parant Date: Mon, 21 Sep 2020 01:16:10 +0200 Subject: [PATCH 165/313] Add menu to switch --- front/dist/resources/style/style.css | 16 +++++++++++ .../ConsoleGlobalMessageManager.ts | 27 ++++++++++++++++--- 2 files changed, 40 insertions(+), 3 deletions(-) diff --git a/front/dist/resources/style/style.css b/front/dist/resources/style/style.css index 31fb8b51..3fc554ec 100644 --- a/front/dist/resources/style/style.css +++ b/front/dist/resources/style/style.css @@ -483,4 +483,20 @@ body { color: black; border: 1px solid black; transform: scale(1.1); +} + +.main-console .menu { + padding: 20px; + color: #ffffffa6; + text-align: center; +} + +.main-console .menu span { + margin: 20px; + cursor: pointer; +} + +.main-console .menu span.active { + color: white; + border-bottom: solid 1px white; } \ No newline at end of file diff --git a/front/src/Administration/ConsoleGlobalMessageManager.ts b/front/src/Administration/ConsoleGlobalMessageManager.ts index 21bd4514..efabd25a 100644 --- a/front/src/Administration/ConsoleGlobalMessageManager.ts +++ b/front/src/Administration/ConsoleGlobalMessageManager.ts @@ -33,10 +33,30 @@ export class ConsoleGlobalMessageManager { } initialise() { - const mainSectionDiv = HtmlUtils.getElementByIdOrFail('main-container'); - mainSectionDiv.childNodes.forEach((c : ChildNode) => { - c.remove(); + try { + let mainConsole = HtmlUtils.getElementByIdOrFail(CLASS_CONSOLE_MESSAGE); + mainConsole.remove(); + }catch (err){} + + const menu = document.createElement('div'); + menu.classList.add('menu') + const textMessage = document.createElement('span'); + textMessage.innerText = "Message"; + textMessage.classList.add('active'); + textMessage.addEventListener('click', () => { + textMessage.classList.add('active'); + textAudio.classList.remove('active'); }); + menu.appendChild(textMessage); + const textAudio = document.createElement('span'); + textAudio.innerText = "Audio"; + textAudio.addEventListener('click', () => { + textAudio.classList.add('active'); + textMessage.classList.remove('active'); + }); + menu.appendChild(textMessage); + menu.appendChild(textAudio); + this.divMainConsole.appendChild(menu); const buttonText = document.createElement('p'); buttonText.innerText = 'Console'; @@ -55,6 +75,7 @@ export class ConsoleGlobalMessageManager { this.createTextMessagePart(); + const mainSectionDiv = HtmlUtils.getElementByIdOrFail('main-container'); mainSectionDiv.appendChild(this.divMainConsole); } From a19f09bef2fdaa43041e3c604f70b1ed04906b2e Mon Sep 17 00:00:00 2001 From: arp Date: Fri, 18 Sep 2020 16:29:53 +0200 Subject: [PATCH 166/313] improve the register workflow --- back/src/Controller/AdminController.ts | 8 +++---- front/src/index.ts | 3 ++- front/src/register.ts | 31 ++++++++++++++++++++------ 3 files changed, 29 insertions(+), 13 deletions(-) diff --git a/back/src/Controller/AdminController.ts b/back/src/Controller/AdminController.ts index 7c20498f..c4905a8a 100644 --- a/back/src/Controller/AdminController.ts +++ b/back/src/Controller/AdminController.ts @@ -1,7 +1,7 @@ import {Application, Request, Response} from "express"; import {OK} from "http-status-codes"; import {ADMIN_API_TOKEN, ADMIN_API_URL} from "../Enum/EnvironmentVariable"; -import Axios, {AxiosError} from "axios"; +import Axios from "axios"; export class AdminController { App : Application; @@ -27,12 +27,10 @@ export class AdminController { return res.status(e.status || 500).send('An error happened'); } - const teamSlug = response.data.teamSlug; + const organizationSlug = response.data.organizationSlug; const worldSlug = response.data.worldSlug; const roomSlug = response.data.roomSlug; - return res.status(OK).send({ - loginUrl: '/@/'+teamSlug+'/'+worldSlug+'/'+roomSlug, - }); + return res.status(OK).send({organizationSlug, worldSlug, roomSlug}); }); } } diff --git a/front/src/index.ts b/front/src/index.ts index 8be675fb..1f6b1d4a 100644 --- a/front/src/index.ts +++ b/front/src/index.ts @@ -14,7 +14,8 @@ import {CoWebsiteManager} from "./WebRtc/CoWebsiteManager"; import {redirectIfToken} from "./register"; //CoWebsiteManager.loadCoWebsite('https://thecodingmachine.com'); -redirectIfToken(); +let connectionData //todo: do something with this data +redirectIfToken().then(res => connectionData = res); // Load Jitsi if the environment variable is set. if (JITSI_URL) { diff --git a/front/src/register.ts b/front/src/register.ts index 0cc9dd13..98fe0d1e 100644 --- a/front/src/register.ts +++ b/front/src/register.ts @@ -1,12 +1,29 @@ import Axios from "axios"; import {API_URL} from "./Enum/EnvironmentVariable"; -declare let window:Window; +declare let history:History; -export function redirectIfToken() { - const match = window.location.toString().match(/\/register\/(.+)/); - if (match) { - Axios.get(`${API_URL}/register/`+match[1]).then((res) => { - window.location = res.data.loginUrl; - }); +//todo: better naming +export interface ConnexionData { + organizationSlug: string, + worldSlug: string, + roomSlug: string, +} + +export async function redirectIfToken(): Promise { + const match = /\/register\/(.+)/.exec(window.location.toString()); + if (!match) { + return null } + let res = null; + try { + res = await Axios.get(`${API_URL}/register/`+match[1]) + } catch (e) { + return null; + } + const organizationSlug = res.data.organizationSlug; + const worldSlug = res.data.worldSlug; + const roomSlug = res.data.roomSlug; + const connexionUrl = '/@/'+organizationSlug+'/'+worldSlug+'/'+roomSlug; + history.pushState({}, '', connexionUrl); + return {organizationSlug, worldSlug, roomSlug}; } \ No newline at end of file From 76d37794382f52410a5d2d25ec91e7ccbc54058e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20N=C3=A9grier?= Date: Mon, 21 Sep 2020 11:24:03 +0200 Subject: [PATCH 167/313] Moved GroupUpdateMessage to protobuf --- back/src/Controller/IoSocketController.ts | 40 +++++++++++++---------- back/src/Model/Group.ts | 23 ++++++++++--- back/src/Model/World.ts | 5 +-- front/src/Connection.ts | 29 +++++++++++++--- front/src/Phaser/Game/GameScene.ts | 12 +++---- 5 files changed, 76 insertions(+), 33 deletions(-) diff --git a/back/src/Controller/IoSocketController.ts b/back/src/Controller/IoSocketController.ts index 2334111e..4a1c9240 100644 --- a/back/src/Controller/IoSocketController.ts +++ b/back/src/Controller/IoSocketController.ts @@ -14,7 +14,7 @@ import si from "systeminformation"; import {Gauge} from "prom-client"; import {TokenInterface} from "../Controller/AuthenticateController"; import {isJoinRoomMessageInterface} from "../Model/Websocket/JoinRoomMessage"; -import {isPointInterface, PointInterface} from "../Model/Websocket/PointInterface"; +import {PointInterface} from "../Model/Websocket/PointInterface"; import {isWebRtcSignalMessageInterface} from "../Model/Websocket/WebRtcSignalMessage"; import {UserInGroupInterface} from "../Model/Websocket/UserInGroupInterface"; import {isItemEventMessageInterface} from "../Model/Websocket/ItemEventMessage"; @@ -27,7 +27,7 @@ import { SetPlayerDetailsMessage, SubMessage, UserMovedMessage, - BatchMessage + BatchMessage, GroupUpdateMessage, PointMessage } from "../../../messages/generated/messages_pb"; import {UserMovesMessage} from "../../../messages/generated/messages_pb"; import Direction = PositionMessage.Direction; @@ -90,7 +90,7 @@ export class IoSocketController { // Authentication with token. it will be decoded and stored in the socket. // Completely commented for now, as we do not use the "/login" route at all. this.Io.use((socket: Socket, next) => { - console.log(socket.handshake.query.token); + //console.log(socket.handshake.query.token); if (!socket.handshake.query || !socket.handshake.query.token) { console.error('An authentication error happened, a user tried to connect without a token.'); return next(new Error('Authentication error')); @@ -176,8 +176,8 @@ export class IoSocketController { const srvSockets = this.Io.sockets.sockets; this.nbClientsGauge.inc(); console.log(new Date().toISOString() + ' A user joined (', Object.keys(srvSockets).length, ' connected users)'); - si.currentLoad().then(data => console.log(' Current load: ', data.avgload)); - si.currentLoad().then(data => console.log(' CPU: ', data.currentload, '%')); + //si.currentLoad().then(data => console.log(' Current load: ', data.avgload)); + //si.currentLoad().then(data => console.log(' CPU: ', data.currentload, '%')); // End log server load /*join-rom event permit to join one room. @@ -189,7 +189,7 @@ export class IoSocketController { y: user y position on map */ socket.on(SocketIoEvent.JOIN_ROOM, (message: unknown, answerFn): void => { - console.log(SocketIoEvent.JOIN_ROOM, message); + //console.log(SocketIoEvent.JOIN_ROOM, message); try { if (!isJoinRoomMessageInterface(message)) { socket.emit(SocketIoEvent.MESSAGE_ERROR, {message: 'Invalid JOIN_ROOM message.'}); @@ -374,8 +374,8 @@ export class IoSocketController { const srvSockets = this.Io.sockets.sockets; this.nbClientsGauge.dec(); console.log('A user left (', Object.keys(srvSockets).length, ' connected users)'); - si.currentLoad().then(data => console.log('Current load: ', data.avgload)); - si.currentLoad().then(data => console.log('CPU: ', data.currentload, '%')); + //si.currentLoad().then(data => console.log('Current load: ', data.avgload)); + //si.currentLoad().then(data => console.log('CPU: ', data.currentload, '%')); // End log server load }); @@ -408,7 +408,7 @@ export class IoSocketController { }); socket.on(SocketIoEvent.SET_SILENT, (silent: unknown) => { - console.log(SocketIoEvent.SET_SILENT, silent); + //console.log(SocketIoEvent.SET_SILENT, silent); if (typeof silent !== "boolean") { socket.emit(SocketIoEvent.MESSAGE_ERROR, {message: 'Invalid SET_SILENT message.'}); console.warn('Invalid SET_SILENT message received: ', silent); @@ -543,10 +543,7 @@ export class IoSocketController { clientListener.emit(SocketIoEvent.JOIN_ROOM, messageUserJoined); } else if (thing instanceof Group) { - clientListener.emit(SocketIoEvent.GROUP_CREATE_UPDATE, { - position: thing.getPosition(), - groupId: thing.getId() - } as GroupUpdateInterface); + this.emitCreateUpdateGroupEvent(clientListener, thing); } else { console.error('Unexpected type for Movable.'); } @@ -565,10 +562,7 @@ export class IoSocketController { clientListener.emitInBatch(SocketIoEvent.USER_MOVED, subMessage); //console.log("Sending USER_MOVED event"); } else if (thing instanceof Group) { - clientListener.emit(SocketIoEvent.GROUP_CREATE_UPDATE, { - position: thing.getPosition(), - groupId: thing.getId() - } as GroupUpdateInterface); + this.emitCreateUpdateGroupEvent(clientListener, thing); } else { console.error('Unexpected type for Movable.'); } @@ -600,6 +594,18 @@ export class IoSocketController { return world; } + private emitCreateUpdateGroupEvent(socket: Socket, group: Group): void { + const position = group.getPosition(); + const pointMessage = new PointMessage(); + pointMessage.setX(Math.floor(position.x)); + pointMessage.setY(Math.floor(position.y)); + const groupUpdateMessage = new GroupUpdateMessage(); + groupUpdateMessage.setGroupid(group.getId()); + groupUpdateMessage.setPosition(pointMessage); + + socket.emit(SocketIoEvent.GROUP_CREATE_UPDATE, groupUpdateMessage.serializeBinary().buffer); + } + /** * * @param socket diff --git a/back/src/Model/Group.ts b/back/src/Model/Group.ts index 43990ef4..4364455d 100644 --- a/back/src/Model/Group.ts +++ b/back/src/Model/Group.ts @@ -13,6 +13,8 @@ export class Group implements Movable { private users: Set; private connectCallback: ConnectCallback; private disconnectCallback: DisconnectCallback; + private x!: number; + private y!: number; constructor(users: User[], connectCallback: ConnectCallback, disconnectCallback: DisconnectCallback) { @@ -25,6 +27,8 @@ export class Group implements Movable { users.forEach((user: User) => { this.join(user); }); + + this.updatePosition(); } getUsers(): User[] { @@ -39,6 +43,16 @@ export class Group implements Movable { * Returns the barycenter of all users (i.e. the center of the group) */ getPosition(): PositionInterface { + return { + x: this.x, + y: this.y + }; + } + + /** + * Computes the barycenter of all users (i.e. the center of the group) + */ + updatePosition(): void { let x = 0; let y = 0; // Let's compute the barycenter of all users. @@ -48,10 +62,11 @@ export class Group implements Movable { }); x /= this.users.size; y /= this.users.size; - return { - x, - y - }; + if (this.users.size === 0) { + throw new Error("EMPTY GROUP FOUND!!!"); + } + this.x = x; + this.y = y; } isFull(): boolean { diff --git a/back/src/Model/World.ts b/back/src/Model/World.ts index dc3dcd07..452c6c17 100644 --- a/back/src/Model/World.ts +++ b/back/src/Model/World.ts @@ -90,6 +90,7 @@ export class World { this.positionNotifier.updatePosition(user, userPosition, user.position); const oldGroupPosition = user.group?.getPosition(); + user.group?.updatePosition(); user.position = userPosition; @@ -126,7 +127,7 @@ export class World { } // At the very end, if the user is part of a group, let's call the callback to update group position - if (typeof user.group !== 'undefined') { + if (user.group !== undefined) { this.positionNotifier.updatePosition(user.group, user.group.getPosition(), oldGroupPosition ? oldGroupPosition : user.group.getPosition()); } } @@ -158,7 +159,7 @@ export class World { */ private leaveGroup(user: User): void { const group = user.group; - if (typeof group === 'undefined') { + if (group === undefined) { throw new Error("The user is part of no group"); } group.leave(user); diff --git a/front/src/Connection.ts b/front/src/Connection.ts index fa04feb8..02752c10 100644 --- a/front/src/Connection.ts +++ b/front/src/Connection.ts @@ -2,7 +2,7 @@ import Axios from "axios"; import {API_URL} from "./Enum/EnvironmentVariable"; import {MessageUI} from "./Logger/MessageUI"; import { - BatchMessage, + BatchMessage, GroupUpdateMessage, PositionMessage, SetPlayerDetailsMessage, UserMovedMessage, UserMovesMessage, @@ -78,7 +78,7 @@ export interface PositionInterface { export interface GroupCreatedUpdatedMessageInterface { position: PositionInterface, - groupId: string + groupId: number } export interface WebRtcStartMessageInterface { @@ -301,10 +301,31 @@ export class Connection implements Connection { } public onGroupUpdatedOrCreated(callback: (groupCreateUpdateMessage: GroupCreatedUpdatedMessageInterface) => void): void { - this.socket.on(EventMessage.GROUP_CREATE_UPDATE, callback); + // TODO: READ THIS FROM BINARY FORMAT + // TODO: READ THIS FROM BINARY FORMAT + // TODO: READ THIS FROM BINARY FORMAT + // TODO: CHANGE THIS EVENT TO BE PART OF THE BATCHES + // TODO: CHANGE THIS EVENT TO BE PART OF THE BATCHES + // TODO: CHANGE THIS EVENT TO BE PART OF THE BATCHES + // TODO: CHANGE THIS EVENT TO BE PART OF THE BATCHES + // TODO: CHANGE THIS EVENT TO BE PART OF THE BATCHES + this.socket.on(EventMessage.GROUP_CREATE_UPDATE, (buffer: ArrayBuffer) => { + const message = GroupUpdateMessage.deserializeBinary(new Uint8Array(buffer)); + const position = message.getPosition(); + if (position === undefined) { + throw new Error('Missing position in GROUP_CREATE_UPDATE'); + } + + const groupCreateUpdateMessage: GroupCreatedUpdatedMessageInterface = { + groupId: message.getGroupid(), + position: position.toObject() + } + + callback(groupCreateUpdateMessage); + }); } - public onGroupDeleted(callback: (groupId: string) => void): void { + public onGroupDeleted(callback: (groupId: number) => void): void { this.socket.on(EventMessage.GROUP_DELETE, callback) } diff --git a/front/src/Phaser/Game/GameScene.ts b/front/src/Phaser/Game/GameScene.ts index c7a7fd3e..8abddfd3 100644 --- a/front/src/Phaser/Game/GameScene.ts +++ b/front/src/Phaser/Game/GameScene.ts @@ -80,7 +80,7 @@ interface GroupCreatedUpdatedEventInterface { interface DeleteGroupEventInterface { type: 'DeleteGroupEvent' - groupId: string + groupId: number } export class GameScene extends Phaser.Scene implements CenterListener { @@ -93,7 +93,7 @@ export class GameScene extends Phaser.Scene implements CenterListener { Layers!: Array; Objects!: Array; mapFile!: ITiledMap; - groups: Map; + groups: Map; startX!: number; startY!: number; circleTexture!: CanvasTexture; @@ -149,7 +149,7 @@ export class GameScene extends Phaser.Scene implements CenterListener { this.GameManager = gameManager; this.Terrains = []; - this.groups = new Map(); + this.groups = new Map(); this.instance = instance; this.MapKey = MapKey; @@ -237,7 +237,7 @@ export class GameScene extends Phaser.Scene implements CenterListener { this.shareGroupPosition(groupPositionMessage); }) - connection.onGroupDeleted((groupId: string) => { + connection.onGroupDeleted((groupId: number) => { try { this.deleteGroup(groupId); } catch (e) { @@ -1108,14 +1108,14 @@ export class GameScene extends Phaser.Scene implements CenterListener { } } - deleteGroup(groupId: string): void { + deleteGroup(groupId: number): void { this.pendingEvents.enqueue({ type: "DeleteGroupEvent", groupId }); } - doDeleteGroup(groupId: string): void { + doDeleteGroup(groupId: number): void { const group = this.groups.get(groupId); if(!group){ return; From 8c43c6774173ae3483101747477d6b9ee0c2b17c Mon Sep 17 00:00:00 2001 From: Gregoire Parant Date: Mon, 21 Sep 2020 15:00:39 +0200 Subject: [PATCH 168/313] Create feature to send and read audio message --- front/dist/index.html | 3 + front/dist/resources/logos/megaphone.svg | 18 +++ front/dist/resources/logos/music-file.svg | 27 +++++ .../dist/resources/logos/music-file.svg.back | 1 + front/dist/resources/style/style.css | 59 +++++++++ .../ConsoleGlobalMessageManager.ts | 112 ++++++++++++++++-- .../Administration/GlobalMessageManager.ts | 49 ++++++-- 7 files changed, 247 insertions(+), 22 deletions(-) create mode 100644 front/dist/resources/logos/megaphone.svg create mode 100644 front/dist/resources/logos/music-file.svg create mode 100644 front/dist/resources/logos/music-file.svg.back diff --git a/front/dist/index.html b/front/dist/index.html index f885079a..9d883ffe 100644 --- a/front/dist/index.html +++ b/front/dist/index.html @@ -95,6 +95,9 @@
    +
    + +
    + + + + + + + + + diff --git a/front/dist/resources/logos/music-file.svg b/front/dist/resources/logos/music-file.svg new file mode 100644 index 00000000..a97656ba --- /dev/null +++ b/front/dist/resources/logos/music-file.svg @@ -0,0 +1,27 @@ + + + + + + + + + + + diff --git a/front/dist/resources/logos/music-file.svg.back b/front/dist/resources/logos/music-file.svg.back new file mode 100644 index 00000000..185bff28 --- /dev/null +++ b/front/dist/resources/logos/music-file.svg.back @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/front/dist/resources/style/style.css b/front/dist/resources/style/style.css index 3fc554ec..4b292df4 100644 --- a/front/dist/resources/style/style.css +++ b/front/dist/resources/style/style.css @@ -499,4 +499,63 @@ body { .main-console .menu span.active { color: white; border-bottom: solid 1px white; +} + +.main-console section{ + text-align: center; + display: none; +} + +.main-console section.active{ + display: block; +} + +.main-console section div.upload{ + text-align: center; + border: solid 1px #ffda01; + height: 150px; + margin: 10px 200px; + padding: 20px; + min-height: 200px; +} + +.main-console section div.upload label{ + color: #ffda01; +} +.main-console section div.upload input{ + display: none; +} +.main-console section div.upload label img{ + height: 150px; + cursor: pointer; +} +.main-console section div.upload label img{ + cursor: pointer; +} + +/*audio html when audio message playing*/ +.main-container .audio-playing { + position: absolute; + width: 200px; + height: 54px; + right: -210px; + top: 40px; + transition: all 0.1s ease-out; + background-color: black; + border-radius: 30px 0 0 30px; + display: inline-flex; +} + +.main-container .audio-playing.active{ + right: 0; +} +.main-container .audio-playing img{ + width: 30px; + border-radius: 50%; + background-color: #ffda01; + padding: 10px; +} +.main-container .audio-playing p{ + color: white; + margin-left: 10px; } \ No newline at end of file diff --git a/front/src/Administration/ConsoleGlobalMessageManager.ts b/front/src/Administration/ConsoleGlobalMessageManager.ts index efabd25a..37ba6dbb 100644 --- a/front/src/Administration/ConsoleGlobalMessageManager.ts +++ b/front/src/Administration/ConsoleGlobalMessageManager.ts @@ -34,10 +34,14 @@ export class ConsoleGlobalMessageManager { initialise() { try { - let mainConsole = HtmlUtils.getElementByIdOrFail(CLASS_CONSOLE_MESSAGE); - mainConsole.remove(); + HtmlUtils.removeElementByIdOrFail(CLASS_CONSOLE_MESSAGE); }catch (err){} + const typeConsole = document.createElement('input'); + typeConsole.id = INPUT_TYPE_CONSOLE; + typeConsole.value = MESSAGE_TYPE; + typeConsole.type = 'hidden'; + const menu = document.createElement('div'); menu.classList.add('menu') const textMessage = document.createElement('span'); @@ -45,14 +49,28 @@ export class ConsoleGlobalMessageManager { textMessage.classList.add('active'); textMessage.addEventListener('click', () => { textMessage.classList.add('active'); + const messageSection = HtmlUtils.getElementByIdOrFail(this.getSectionId(INPUT_CONSOLE_MESSAGE)); + messageSection.classList.add('active'); + textAudio.classList.remove('active'); + const audioSection = HtmlUtils.getElementByIdOrFail(this.getSectionId(UPLOAD_CONSOLE_MESSAGE)); + audioSection.classList.remove('active'); + + typeConsole.value = MESSAGE_TYPE; }); menu.appendChild(textMessage); const textAudio = document.createElement('span'); textAudio.innerText = "Audio"; textAudio.addEventListener('click', () => { textAudio.classList.add('active'); + const audioSection = HtmlUtils.getElementByIdOrFail(this.getSectionId(UPLOAD_CONSOLE_MESSAGE)); + audioSection.classList.add('active'); + textMessage.classList.remove('active'); + const messageSection = HtmlUtils.getElementByIdOrFail(this.getSectionId(INPUT_CONSOLE_MESSAGE)); + messageSection.classList.remove('active'); + + typeConsole.value = AUDIO_TYPE; }); menu.appendChild(textMessage); menu.appendChild(textAudio); @@ -72,8 +90,10 @@ export class ConsoleGlobalMessageManager { this.divMainConsole.className = CLASS_CONSOLE_MESSAGE; this.divMainConsole.appendChild(this.buttonMainConsole); + this.divMainConsole.appendChild(typeConsole); this.createTextMessagePart(); + this.createUploadAudioPart(); const mainSectionDiv = HtmlUtils.getElementByIdOrFail('main-container'); mainSectionDiv.appendChild(this.divMainConsole); @@ -81,8 +101,7 @@ export class ConsoleGlobalMessageManager { createTextMessagePart(){ const div = document.createElement('div'); - div.id = INPUT_CONSOLE_MESSAGE; - + div.id = INPUT_CONSOLE_MESSAGE const buttonSend = document.createElement('button'); buttonSend.innerText = 'Envoyer'; buttonSend.classList.add('btn'); @@ -94,15 +113,11 @@ export class ConsoleGlobalMessageManager { buttonDiv.classList.add('btn-action'); buttonDiv.appendChild(buttonSend) - const typeConsole = document.createElement('input'); - typeConsole.id = INPUT_TYPE_CONSOLE; - typeConsole.value = MESSAGE_TYPE; - typeConsole.type = 'hidden'; - const section = document.createElement('section'); + section.id = this.getSectionId(INPUT_CONSOLE_MESSAGE); + section.classList.add('active'); section.appendChild(div); section.appendChild(buttonDiv); - section.appendChild(typeConsole); this.divMainConsole.appendChild(section); //TODO refactor @@ -140,6 +155,62 @@ export class ConsoleGlobalMessageManager { }, 1000); } + createUploadAudioPart(){ + const div = document.createElement('div'); + div.classList.add('upload'); + + const label = document.createElement('label'); + label.setAttribute('for', UPLOAD_CONSOLE_MESSAGE); + + const img = document.createElement('img'); + img.setAttribute('for', UPLOAD_CONSOLE_MESSAGE); + img.src = 'resources/logos/music-file.svg'; + + const input = document.createElement('input'); + input.type = 'file'; + input.id = UPLOAD_CONSOLE_MESSAGE + input.addEventListener('input', (e: any) => { + if(!e.target || !e.target.files || e.target.files.length === 0){ + return; + } + let file : File = e.target.files[0]; + + if(!file){ + return; + } + + try { + HtmlUtils.removeElementByIdOrFail('audi-message-filename'); + }catch (e) {} + + const p = document.createElement('p'); + p.id = 'audi-message-filename'; + p.innerText = `${file.name} : ${this.getFileSize(file.size)}`; + label.appendChild(p); + }); + + label.appendChild(img); + div.appendChild(label); + div.appendChild(input); + + const buttonSend = document.createElement('button'); + buttonSend.innerText = 'Envoyer'; + buttonSend.classList.add('btn'); + buttonSend.addEventListener('click', (event: MouseEvent) => { + this.sendMessage(); + this.disabled(); + }); + const buttonDiv = document.createElement('div'); + buttonDiv.classList.add('btn-action'); + buttonDiv.appendChild(buttonSend) + + const section = document.createElement('section'); + section.id = this.getSectionId(UPLOAD_CONSOLE_MESSAGE); + section.appendChild(div); + section.appendChild(buttonDiv); + this.divMainConsole.appendChild(section); + } + sendMessage(){ const inputType = HtmlUtils.getElementByIdOrFail(INPUT_TYPE_CONSOLE); if(AUDIO_TYPE !== inputType.value && MESSAGE_TYPE !== inputType.value){ @@ -176,9 +247,12 @@ export class ConsoleGlobalMessageManager { let GlobalMessage : GlobalMessageInterface = { id: res.id, message: res.path, - type: MESSAGE_TYPE + type: AUDIO_TYPE }; inputAudio.value = ''; + try { + HtmlUtils.removeElementByIdOrFail('audi-message-filename'); + }catch (e) {} this.Connection.emitGlobalMessage(GlobalMessage); } @@ -194,4 +268,20 @@ export class ConsoleGlobalMessageManager { this.activeConsole = false; this.divMainConsole.style.top = '-80%'; } + + private getSectionId(id: string) : string { + return `section-${id}`; + } + + private getFileSize(number: number) :string { + if (number < 1024) { + return number + 'bytes'; + } else if (number >= 1024 && number < 1048576) { + return (number / 1024).toFixed(1) + 'KB'; + } else if (number >= 1048576) { + return (number / 1048576).toFixed(1) + 'MB'; + }else{ + return ''; + } + } } \ No newline at end of file diff --git a/front/src/Administration/GlobalMessageManager.ts b/front/src/Administration/GlobalMessageManager.ts index ec1693f8..ec700e2a 100644 --- a/front/src/Administration/GlobalMessageManager.ts +++ b/front/src/Administration/GlobalMessageManager.ts @@ -1,6 +1,7 @@ import {HtmlUtils} from "./../WebRtc/HtmlUtils"; import {Connection, GlobalMessageInterface} from "../Connection"; import {AUDIO_TYPE, MESSAGE_TYPE} from "./ConsoleGlobalMessageManager"; +import {API_URL} from "../Enum/EnvironmentVariable"; export class GlobalMessageManager { @@ -39,19 +40,45 @@ export class GlobalMessageManager { } private playAudioMessage(messageId : number, urlMessage: string){ - const messageVideo : HTMLAudioElement = document.createElement('audio'); - messageVideo.id = this.getHtmlMessageId(messageId); - messageVideo.src = urlMessage; - messageVideo.onended = () => { - messageVideo.remove(); + //delete previous elements + const previousDivAudio = document.getElementsByClassName('audio-playing'); + for(let i = 0; i < previousDivAudio.length; i++){ + previousDivAudio[i].remove(); } - messageVideo.onloadeddata = () => { - messageVideo.play(); - }; - const mainSectionDiv = HtmlUtils.getElementByIdOrFail('main-container'); - mainSectionDiv.appendChild(messageVideo); - //TODO add element when audio message is played + //create new element + const divAudio : HTMLDivElement = document.createElement('div'); + divAudio.id = `audio-playing-${messageId}`; + divAudio.classList.add('audio-playing'); + const imgAudio : HTMLImageElement = document.createElement('img'); + imgAudio.src = '/resources/logos/megaphone.svg'; + const pAudio : HTMLParagraphElement = document.createElement('p'); + pAudio.textContent = 'Message audio' + divAudio.appendChild(imgAudio); + divAudio.appendChild(pAudio); + + const mainSectionDiv = HtmlUtils.getElementByIdOrFail('main-container'); + mainSectionDiv.appendChild(divAudio); + + const messageAudio : HTMLAudioElement = document.createElement('audio'); + messageAudio.id = this.getHtmlMessageId(messageId); + messageAudio.autoplay = true; + messageAudio.style.display = 'none'; + messageAudio.onended = () => { + divAudio.classList.remove('active'); + messageAudio.remove(); + setTimeout(() => { + divAudio.remove(); + }, 1000); + } + messageAudio.onplay = () => { + console.log('play'); + divAudio.classList.add('active'); + } + const messageAudioSource : HTMLSourceElement = document.createElement('source'); + messageAudioSource.src = `${API_URL}${urlMessage}`; + messageAudio.appendChild(messageAudioSource); + mainSectionDiv.appendChild(messageAudio); } private playTextMessage(messageId : number, htmlMessage: string){ From 0d2893ec75fcf3ee751e713d8b4dff5a352fb797 Mon Sep 17 00:00:00 2001 From: Gregoire Parant Date: Mon, 21 Sep 2020 15:11:46 +0200 Subject: [PATCH 169/313] Send at every player connected --- back/src/Controller/IoSocketController.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/back/src/Controller/IoSocketController.ts b/back/src/Controller/IoSocketController.ts index 8033044f..dc64513c 100644 --- a/back/src/Controller/IoSocketController.ts +++ b/back/src/Controller/IoSocketController.ts @@ -402,7 +402,8 @@ export class IoSocketController { }); socket.on(SockerIoEvent.PLAY_GLOBAL_MESSAGE, (itemEvent: unknown) => { - socket.broadcast.emit(SockerIoEvent.PLAY_GLOBAL_MESSAGE, itemEvent); + //permit to send message at every member connected + this.Io.emit(SockerIoEvent.PLAY_GLOBAL_MESSAGE, itemEvent); }); }); } From 942d2cbcef442e2c5a3a4681b5a47cd7e004c5a9 Mon Sep 17 00:00:00 2001 From: Gregoire Parant Date: Wed, 23 Sep 2020 17:22:00 +0200 Subject: [PATCH 170/313] Refactor and remove prevent default keyboard --- front/src/Phaser/Components/TextInput.ts | 2 -- front/src/Phaser/Game/GameScene.ts | 3 +- .../src/Phaser/UserInput/UserInputManager.ts | 31 ++++++++++++------- 3 files changed, 20 insertions(+), 16 deletions(-) diff --git a/front/src/Phaser/Components/TextInput.ts b/front/src/Phaser/Components/TextInput.ts index 3a20eadf..7a549d1f 100644 --- a/front/src/Phaser/Components/TextInput.ts +++ b/front/src/Phaser/Components/TextInput.ts @@ -10,8 +10,6 @@ export class TextInput extends Phaser.GameObjects.BitmapText { this.underLine = this.scene.add.text(x, y+1, '_______', { fontFamily: 'Arial', fontSize: "32px", color: '#ffffff'}) - const keySpace = this.scene.input.keyboard.addKey(Phaser.Input.Keyboard.KeyCodes.SPACE); - const keyBackspace = this.scene.input.keyboard.addKey(Phaser.Input.Keyboard.KeyCodes.BACKSPACE); this.scene.input.keyboard.on('keydown', (event: KeyboardEvent) => { if (event.keyCode === 8 && this.text.length > 0) { this.deleteLetter(); diff --git a/front/src/Phaser/Game/GameScene.ts b/front/src/Phaser/Game/GameScene.ts index 654b9d75..a88cca71 100644 --- a/front/src/Phaser/Game/GameScene.ts +++ b/front/src/Phaser/Game/GameScene.ts @@ -525,8 +525,7 @@ export class GameScene extends Phaser.Scene implements CenterListener { this.createPromiseResolve(); - // TODO: use inputmanager instead - this.input.keyboard.on('keyup-SPACE', () => { + this.userInputManager.spaceEvent( () => { this.outlinedItem?.activate(); }); diff --git a/front/src/Phaser/UserInput/UserInputManager.ts b/front/src/Phaser/UserInput/UserInputManager.ts index a7be41cf..fa7080b5 100644 --- a/front/src/Phaser/UserInput/UserInputManager.ts +++ b/front/src/Phaser/UserInput/UserInputManager.ts @@ -39,21 +39,21 @@ export class UserInputManager { initKeyBoardEvent(){ this.KeysCode = [ - {event: UserInputEvent.MoveUp, keyInstance: this.Scene.input.keyboard.addKey(Phaser.Input.Keyboard.KeyCodes.Z) }, - {event: UserInputEvent.MoveLeft, keyInstance: this.Scene.input.keyboard.addKey(Phaser.Input.Keyboard.KeyCodes.Q) }, - {event: UserInputEvent.MoveDown, keyInstance: this.Scene.input.keyboard.addKey(Phaser.Input.Keyboard.KeyCodes.S) }, - {event: UserInputEvent.MoveRight, keyInstance: this.Scene.input.keyboard.addKey(Phaser.Input.Keyboard.KeyCodes.D) }, + {event: UserInputEvent.MoveUp, keyInstance: this.Scene.input.keyboard.addKey(Phaser.Input.Keyboard.KeyCodes.Z, false) }, + {event: UserInputEvent.MoveLeft, keyInstance: this.Scene.input.keyboard.addKey(Phaser.Input.Keyboard.KeyCodes.Q, false) }, + {event: UserInputEvent.MoveDown, keyInstance: this.Scene.input.keyboard.addKey(Phaser.Input.Keyboard.KeyCodes.S, false) }, + {event: UserInputEvent.MoveRight, keyInstance: this.Scene.input.keyboard.addKey(Phaser.Input.Keyboard.KeyCodes.D, false) }, - {event: UserInputEvent.MoveUp, keyInstance: this.Scene.input.keyboard.addKey(Phaser.Input.Keyboard.KeyCodes.UP) }, - {event: UserInputEvent.MoveLeft, keyInstance: this.Scene.input.keyboard.addKey(Phaser.Input.Keyboard.KeyCodes.LEFT) }, - {event: UserInputEvent.MoveDown, keyInstance: this.Scene.input.keyboard.addKey(Phaser.Input.Keyboard.KeyCodes.DOWN) }, - {event: UserInputEvent.MoveRight, keyInstance: this.Scene.input.keyboard.addKey(Phaser.Input.Keyboard.KeyCodes.RIGHT) }, + {event: UserInputEvent.MoveUp, keyInstance: this.Scene.input.keyboard.addKey(Phaser.Input.Keyboard.KeyCodes.UP, false) }, + {event: UserInputEvent.MoveLeft, keyInstance: this.Scene.input.keyboard.addKey(Phaser.Input.Keyboard.KeyCodes.LEFT, false) }, + {event: UserInputEvent.MoveDown, keyInstance: this.Scene.input.keyboard.addKey(Phaser.Input.Keyboard.KeyCodes.DOWN, false) }, + {event: UserInputEvent.MoveRight, keyInstance: this.Scene.input.keyboard.addKey(Phaser.Input.Keyboard.KeyCodes.RIGHT, false) }, - {event: UserInputEvent.SpeedUp, keyInstance: this.Scene.input.keyboard.addKey(Phaser.Input.Keyboard.KeyCodes.SHIFT) }, + {event: UserInputEvent.SpeedUp, keyInstance: this.Scene.input.keyboard.addKey(Phaser.Input.Keyboard.KeyCodes.SHIFT, false) }, - {event: UserInputEvent.Interact, keyInstance: this.Scene.input.keyboard.addKey(Phaser.Input.Keyboard.KeyCodes.E) }, - {event: UserInputEvent.Interact, keyInstance: this.Scene.input.keyboard.addKey(Phaser.Input.Keyboard.KeyCodes.SPACE) }, - {event: UserInputEvent.Shout, keyInstance: this.Scene.input.keyboard.addKey(Phaser.Input.Keyboard.KeyCodes.F) }, + {event: UserInputEvent.Interact, keyInstance: this.Scene.input.keyboard.addKey(Phaser.Input.Keyboard.KeyCodes.E, false) }, + {event: UserInputEvent.Interact, keyInstance: this.Scene.input.keyboard.addKey(Phaser.Input.Keyboard.KeyCodes.SPACE, false) }, + {event: UserInputEvent.Shout, keyInstance: this.Scene.input.keyboard.addKey(Phaser.Input.Keyboard.KeyCodes.F, false) }, ]; } @@ -70,4 +70,11 @@ export class UserInputManager { }); return eventsMap; } + + spaceEvent(callback : Function){ + this.Scene.input.keyboard.on('keyup-SPACE', (event: Event) => { + callback(); + return event; + }); + } } From d5fdb9d8577a02f1e9cb6f3612236352f0673035 Mon Sep 17 00:00:00 2001 From: Gregoire Parant Date: Wed, 23 Sep 2020 18:07:31 +0200 Subject: [PATCH 171/313] Fix style --- front/dist/resources/style/style.css | 17 +++++++++++++---- .../ConsoleGlobalMessageManager.ts | 10 +++++++--- .../src/Administration/GlobalMessageManager.ts | 11 ++++++++--- 3 files changed, 28 insertions(+), 10 deletions(-) diff --git a/front/dist/resources/style/style.css b/front/dist/resources/style/style.css index 4b292df4..e22795a9 100644 --- a/front/dist/resources/style/style.css +++ b/front/dist/resources/style/style.css @@ -410,6 +410,7 @@ body { width: 80%; height: 80%; min-height: 200px; + max-height: 80%; top: -80%; left: 10%; background: #000000a6; @@ -421,12 +422,19 @@ body { height: auto; border-radius: 0 0 10px 10px; color: white; - padding: 10px; top: 0; } +.message-container .content-message{ + position: relative; + padding: 20px; + margin: 20px; + overflow: scroll; + max-height: 400px; +} + .main-console div.console, -.message-container div { +.message-container div.clear { position: absolute; color: white; z-index: 200; @@ -441,12 +449,12 @@ body { } .main-console div.console p, -.message-container div p{ +.message-container div.clear p{ margin-top: 6px; } .main-console div.console:hover, -.message-container div:hover { +.message-container div.clear:hover { cursor: pointer; transform: scale(1.2) translateY(3px); } @@ -458,6 +466,7 @@ body { .main-console #input-send-text .ql-editor{ color: white; min-height: 200px; + max-height: 300px; } .main-console .ql-toolbar{ diff --git a/front/src/Administration/ConsoleGlobalMessageManager.ts b/front/src/Administration/ConsoleGlobalMessageManager.ts index 37ba6dbb..582427af 100644 --- a/front/src/Administration/ConsoleGlobalMessageManager.ts +++ b/front/src/Administration/ConsoleGlobalMessageManager.ts @@ -223,13 +223,17 @@ export class ConsoleGlobalMessageManager { } private sendTextMessage(){ - const inputText = HtmlUtils.getElementByIdOrFail(INPUT_CONSOLE_MESSAGE); + let elements = document.getElementsByClassName('ql-editor'); + let quillEditor = elements.item(0); + if(!quillEditor){ + throw "Error get quill node"; + } let GlobalMessage : GlobalMessageInterface = { id: 1, - message: inputText.value, + message: quillEditor.innerHTML, type: MESSAGE_TYPE }; - inputText.value = ''; + quillEditor.innerHTML = ''; this.Connection.emitGlobalMessage(GlobalMessage); } diff --git a/front/src/Administration/GlobalMessageManager.ts b/front/src/Administration/GlobalMessageManager.ts index ec700e2a..e2850bff 100644 --- a/front/src/Administration/GlobalMessageManager.ts +++ b/front/src/Administration/GlobalMessageManager.ts @@ -72,7 +72,6 @@ export class GlobalMessageManager { }, 1000); } messageAudio.onplay = () => { - console.log('play'); divAudio.classList.add('active'); } const messageAudioSource : HTMLSourceElement = document.createElement('source'); @@ -84,10 +83,11 @@ export class GlobalMessageManager { private playTextMessage(messageId : number, htmlMessage: string){ //add button to clear message const buttonText = document.createElement('p'); - buttonText.id = 'button-clear-message' + buttonText.id = 'button-clear-message'; buttonText.innerText = 'Clear'; const buttonMainConsole = document.createElement('div'); + buttonMainConsole.classList.add('clear'); buttonMainConsole.appendChild(buttonText); buttonMainConsole.addEventListener('click', () => { messageContainer.style.top = '-80%'; @@ -97,11 +97,16 @@ export class GlobalMessageManager { }); }); + //create content message + const messageCotent = document.createElement('div'); + messageCotent.innerHTML = htmlMessage; + messageCotent.className = "content-message"; + //add message container const messageContainer = document.createElement('div'); - messageContainer.innerHTML = htmlMessage; messageContainer.id = this.getHtmlMessageId(messageId); messageContainer.className = "message-container"; + messageContainer.appendChild(messageCotent); messageContainer.appendChild(buttonMainConsole); const mainSectionDiv = HtmlUtils.getElementByIdOrFail('main-container'); From 4beeb62c6f616f5104305f01239c954e777a8c2e Mon Sep 17 00:00:00 2001 From: Gregoire Parant Date: Wed, 23 Sep 2020 18:28:12 +0200 Subject: [PATCH 172/313] Fix CI --- back/package.json | 1 - back/src/Controller/FileController.ts | 17 +- back/yarn.lock | 17 - maps/yarn.lock | 2240 +++++++++++++++++++++++++ 4 files changed, 2254 insertions(+), 21 deletions(-) create mode 100644 maps/yarn.lock diff --git a/back/package.json b/back/package.json index b6888fbb..b69093aa 100644 --- a/back/package.json +++ b/back/package.json @@ -39,7 +39,6 @@ "@types/express": "^4.17.4", "@types/http-status-codes": "^1.2.0", "@types/jsonwebtoken": "^8.3.8", - "@types/multer": "^1.4.4", "@types/socket.io": "^2.1.4", "@types/uuidv4": "^5.0.0", "axios": "^0.20.0", diff --git a/back/src/Controller/FileController.ts b/back/src/Controller/FileController.ts index a337537f..c98b97ae 100644 --- a/back/src/Controller/FileController.ts +++ b/back/src/Controller/FileController.ts @@ -1,12 +1,23 @@ +const multer = require('multer'); import {Application, Request, RequestHandler, Response} from "express"; import {OK} from "http-status-codes"; import {URL_ROOM_STARTED} from "_Enum/EnvironmentVariable"; import {uuid} from "uuidv4"; -import multer from 'multer'; import fs from "fs"; const upload = multer({ dest: 'dist/files/' }); +class FileUpload{ + path: string + constructor(path : string) { + this.path = path; + } +} + +interface RequestFileHandlerInterface extends Request{ + file: FileUpload +} + export class FileController { App : Application; @@ -22,8 +33,8 @@ export class FileController { //TODO upload audio message const audioMessageId = uuid(); - fs.copyFileSync(req.file.path, `dist/files/${audioMessageId}`); - fs.unlinkSync(req.file.path); + fs.copyFileSync((req as RequestFileHandlerInterface).file.path, `dist/files/${audioMessageId}`); + fs.unlinkSync((req as RequestFileHandlerInterface).file.path); return res.status(OK).send({ id: audioMessageId, diff --git a/back/yarn.lock b/back/yarn.lock index f7ec048b..7fd73c0d 100644 --- a/back/yarn.lock +++ b/back/yarn.lock @@ -48,16 +48,6 @@ "@types/node" "*" "@types/range-parser" "*" -"@types/express@*": - version "4.17.8" - resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.8.tgz#3df4293293317e61c60137d273a2e96cd8d5f27a" - integrity sha512-wLhcKh3PMlyA2cNAB9sjM1BntnhPMiM0JOBwPBqttjHev2428MLEB4AYVN+d8s2iyCVZac+o41Pflm/ZH5vLXQ== - dependencies: - "@types/body-parser" "*" - "@types/express-serve-static-core" "*" - "@types/qs" "*" - "@types/serve-static" "*" - "@types/express@^4.17.4": version "4.17.4" resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.4.tgz#e78bf09f3f530889575f4da8a94cd45384520aac" @@ -91,13 +81,6 @@ version "2.0.1" resolved "https://registry.yarnpkg.com/@types/mime/-/mime-2.0.1.tgz#dc488842312a7f075149312905b5e3c0b054c79d" -"@types/multer@^1.4.4": - version "1.4.4" - resolved "https://registry.yarnpkg.com/@types/multer/-/multer-1.4.4.tgz#bb5d9abc410da82726ceca74008bb81813349a88" - integrity sha512-wdfkiKBBEMTODNbuF3J+qDDSqJxt50yB9pgDiTcFew7f97Gcc7/sM4HR66ofGgpJPOALWOqKAch4gPyqEXSkeQ== - dependencies: - "@types/express" "*" - "@types/node@*": version "13.11.0" resolved "https://registry.yarnpkg.com/@types/node/-/node-13.11.0.tgz#390ea202539c61c8fa6ba4428b57e05bc36dc47b" diff --git a/maps/yarn.lock b/maps/yarn.lock new file mode 100644 index 00000000..04c9d5ff --- /dev/null +++ b/maps/yarn.lock @@ -0,0 +1,2240 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@babel/code-frame@^7.0.0": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.10.4.tgz#168da1a36e90da68ae8d49c0f1b48c7c6249213a" + integrity sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg== + dependencies: + "@babel/highlight" "^7.10.4" + +"@babel/helper-validator-identifier@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz#a78c7a7251e01f616512d31b10adcf52ada5e0d2" + integrity sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw== + +"@babel/highlight@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.10.4.tgz#7d1bdfd65753538fabe6c38596cdb76d9ac60143" + integrity sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA== + dependencies: + "@babel/helper-validator-identifier" "^7.10.4" + chalk "^2.0.0" + js-tokens "^4.0.0" + +"@mrmlnc/readdir-enhanced@^2.2.1": + version "2.2.1" + resolved "https://registry.yarnpkg.com/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz#524af240d1a360527b730475ecfa1344aa540dde" + integrity sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g== + dependencies: + call-me-maybe "^1.0.1" + glob-to-regexp "^0.3.0" + +"@nodelib/fs.stat@^1.1.2": + version "1.1.3" + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz#2b5a3ab3f918cca48a8c754c08168e3f03eba61b" + integrity sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw== + +"@types/color-name@^1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@types/color-name/-/color-name-1.1.1.tgz#1c1261bbeaa10a8055bbc5d8ab84b7b2afc846a0" + integrity sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ== + +"@types/eslint-visitor-keys@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#1ee30d79544ca84d68d4b3cdb0af4f205663dd2d" + integrity sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag== + +"@types/jasmine@^3.5.10": + version "3.5.14" + resolved "https://registry.yarnpkg.com/@types/jasmine/-/jasmine-3.5.14.tgz#f41a14e8ffa939062a71cf9722e5ee7d4e1f94af" + integrity sha512-Fkgk536sHPqcOtd+Ow+WiUNuk0TSo/BntKkF8wSvcd6M2FvPjeXcUE6Oz/bwDZiUZEaXLslAgw00Q94Pnx6T4w== + +"@types/json-schema@^7.0.3", "@types/json-schema@^7.0.5": + version "7.0.6" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.6.tgz#f4c7ec43e81b319a9815115031709f26987891f0" + integrity sha512-3c+yGKvVP5Y9TYBEibGNR+kLtijnj7mYrXRg+WpFb2X9xm04g/DXYkfg4hmzJQosc9snFNUPkbYIhu+KAm6jJw== + +"@types/strip-bom@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@types/strip-bom/-/strip-bom-3.0.0.tgz#14a8ec3956c2e81edb7520790aecf21c290aebd2" + integrity sha1-FKjsOVbC6B7bdSB5CuzyHCkK69I= + +"@types/strip-json-comments@0.0.30": + version "0.0.30" + resolved "https://registry.yarnpkg.com/@types/strip-json-comments/-/strip-json-comments-0.0.30.tgz#9aa30c04db212a9a0649d6ae6fd50accc40748a1" + integrity sha512-7NQmHra/JILCd1QqpSzl8+mJRc8ZHz3uDm8YV1Ks9IhK0epEiTw8aIErbvH9PI+6XbqhyIQy3462nEsn7UVzjQ== + +"@typescript-eslint/eslint-plugin@^2.26.0": + version "2.34.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-2.34.0.tgz#6f8ce8a46c7dea4a6f1d171d2bb8fbae6dac2be9" + integrity sha512-4zY3Z88rEE99+CNvTbXSyovv2z9PNOVffTWD2W8QF5s2prBQtwN2zadqERcrHpcR7O/+KMI3fcTAmUUhK/iQcQ== + dependencies: + "@typescript-eslint/experimental-utils" "2.34.0" + functional-red-black-tree "^1.0.1" + regexpp "^3.0.0" + tsutils "^3.17.1" + +"@typescript-eslint/experimental-utils@2.34.0": + version "2.34.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-2.34.0.tgz#d3524b644cdb40eebceca67f8cf3e4cc9c8f980f" + integrity sha512-eS6FTkq+wuMJ+sgtuNTtcqavWXqsflWcfBnlYhg/nS4aZ1leewkXGbvBhaapn1q6qf4M71bsR1tez5JTRMuqwA== + dependencies: + "@types/json-schema" "^7.0.3" + "@typescript-eslint/typescript-estree" "2.34.0" + eslint-scope "^5.0.0" + eslint-utils "^2.0.0" + +"@typescript-eslint/parser@^2.26.0": + version "2.34.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-2.34.0.tgz#50252630ca319685420e9a39ca05fe185a256bc8" + integrity sha512-03ilO0ucSD0EPTw2X4PntSIRFtDPWjrVq7C3/Z3VQHRC7+13YB55rcJI3Jt+YgeHbjUdJPcPa7b23rXCBokuyA== + dependencies: + "@types/eslint-visitor-keys" "^1.0.0" + "@typescript-eslint/experimental-utils" "2.34.0" + "@typescript-eslint/typescript-estree" "2.34.0" + eslint-visitor-keys "^1.1.0" + +"@typescript-eslint/typescript-estree@2.34.0": + version "2.34.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-2.34.0.tgz#14aeb6353b39ef0732cc7f1b8285294937cf37d5" + integrity sha512-OMAr+nJWKdlVM9LOqCqh3pQQPwxHAN7Du8DR6dmwCrAmxtiXQnhHJ6tBNtf+cggqfo51SG/FCwnKhXCIM7hnVg== + dependencies: + debug "^4.1.1" + eslint-visitor-keys "^1.1.0" + glob "^7.1.6" + is-glob "^4.0.1" + lodash "^4.17.15" + semver "^7.3.2" + tsutils "^3.17.1" + +acorn-jsx@^5.2.0: + version "5.3.1" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.1.tgz#fc8661e11b7ac1539c47dbfea2e72b3af34d267b" + integrity sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng== + +acorn@^7.1.1: + version "7.4.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.0.tgz#e1ad486e6c54501634c6c397c5c121daa383607c" + integrity sha512-+G7P8jJmCHr+S+cLfQxygbWhXy+8YTVGzAkpEbcLo2mLoL7tij/VG41QSHACSf5QgYRhMZYHuNc6drJaO0Da+w== + +ajv-keywords@^3.5.2: + version "3.5.2" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" + integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== + +ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.4: + version "6.12.5" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.5.tgz#19b0e8bae8f476e5ba666300387775fb1a00a4da" + integrity sha512-lRF8RORchjpKG50/WFf8xmg7sgCLFiYNNnqdKflk63whMQcWR5ngGjiSXkL9bjxy6B2npOK2HSMN49jEBMSkag== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +ansi-escapes@^4.2.1: + version "4.3.1" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.1.tgz#a5c47cc43181f1f38ffd7076837700d395522a61" + integrity sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA== + dependencies: + type-fest "^0.11.0" + +ansi-regex@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" + integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== + +ansi-regex@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" + integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== + +ansi-styles@^3.2.0, ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + +ansi-styles@^4.1.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.2.1.tgz#90ae75c424d008d2624c5bf29ead3177ebfcf359" + integrity sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA== + dependencies: + "@types/color-name" "^1.1.1" + color-convert "^2.0.1" + +anymatch@~3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.1.tgz#c55ecf02185e2469259399310c173ce31233b142" + integrity sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +arg@^4.1.0: + version "4.1.3" + resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" + integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== + +argparse@^1.0.7: + version "1.0.10" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== + dependencies: + sprintf-js "~1.0.2" + +arr-diff@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" + integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA= + +arr-flatten@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" + integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== + +arr-union@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" + integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= + +array-find-index@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1" + integrity sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E= + +array-unique@^0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" + integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= + +assign-symbols@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" + integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= + +astral-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" + integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg== + +atob@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" + integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== + +balanced-match@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" + integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= + +base@^0.11.1: + version "0.11.2" + resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" + integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg== + dependencies: + cache-base "^1.0.1" + class-utils "^0.3.5" + component-emitter "^1.2.1" + define-property "^1.0.0" + isobject "^3.0.1" + mixin-deep "^1.2.0" + pascalcase "^0.1.1" + +big.js@^5.2.2: + version "5.2.2" + resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" + integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== + +binary-extensions@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.1.0.tgz#30fa40c9e7fe07dbc895678cd287024dea241dd9" + integrity sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ== + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +braces@^2.3.1: + version "2.3.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" + integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== + dependencies: + arr-flatten "^1.1.0" + array-unique "^0.3.2" + extend-shallow "^2.0.1" + fill-range "^4.0.0" + isobject "^3.0.1" + repeat-element "^1.1.2" + snapdragon "^0.8.1" + snapdragon-node "^2.0.1" + split-string "^3.0.2" + to-regex "^3.0.1" + +braces@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + +buffer-from@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" + integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== + +cache-base@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" + integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ== + dependencies: + collection-visit "^1.0.0" + component-emitter "^1.2.1" + get-value "^2.0.6" + has-value "^1.0.0" + isobject "^3.0.1" + set-value "^2.0.0" + to-object-path "^0.3.0" + union-value "^1.0.0" + unset-value "^1.0.0" + +call-me-maybe@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/call-me-maybe/-/call-me-maybe-1.0.1.tgz#26d208ea89e37b5cbde60250a15f031c16a4d66b" + integrity sha1-JtII6onje1y95gJQoV8DHBak1ms= + +callsites@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== + +camelcase-keys@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7" + integrity sha1-MIvur/3ygRkFHvodkyITyRuPkuc= + dependencies: + camelcase "^2.0.0" + map-obj "^1.0.0" + +camelcase@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f" + integrity sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8= + +chalk@^2.0.0, chalk@^2.1.0: + version "2.4.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +chalk@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a" + integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +chardet@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" + integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== + +chokidar@^3.4.0: + version "3.4.2" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.4.2.tgz#38dc8e658dec3809741eb3ef7bb0a47fe424232d" + integrity sha512-IZHaDeBeI+sZJRX7lGcXsdzgvZqKv6sECqsbErJA4mHWfpRrD8B97kSFN4cQz6nGBGiuFia1MKR4d6c1o8Cv7A== + dependencies: + anymatch "~3.1.1" + braces "~3.0.2" + glob-parent "~5.1.0" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.4.0" + optionalDependencies: + fsevents "~2.1.2" + +class-utils@^0.3.5: + version "0.3.6" + resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" + integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg== + dependencies: + arr-union "^3.1.0" + define-property "^0.2.5" + isobject "^3.0.0" + static-extend "^0.1.1" + +cli-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" + integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== + dependencies: + restore-cursor "^3.1.0" + +cli-width@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6" + integrity sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw== + +collection-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" + integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA= + dependencies: + map-visit "^1.0.0" + object-visit "^1.0.0" + +color-convert@^1.9.0: + version "1.9.3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= + +color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +component-emitter@^1.2.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" + integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= + +copy-descriptor@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" + integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= + +cross-spawn@^6.0.5: + version "6.0.5" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" + integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== + dependencies: + nice-try "^1.0.4" + path-key "^2.0.1" + semver "^5.5.0" + shebang-command "^1.2.0" + which "^1.2.9" + +currently-unhandled@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea" + integrity sha1-mI3zP+qxke95mmE2nddsF635V+o= + dependencies: + array-find-index "^1.0.1" + +dateformat@~1.0.4-1.2.3: + version "1.0.12" + resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-1.0.12.tgz#9f124b67594c937ff706932e4a642cca8dbbfee9" + integrity sha1-nxJLZ1lMk3/3BpMuSmQsyo27/uk= + dependencies: + get-stdin "^4.0.1" + meow "^3.3.0" + +debug@^2.2.0, debug@^2.3.3: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + +debug@^4.0.1, debug@^4.1.1: + version "4.2.0" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.2.0.tgz#7f150f93920e94c58f5574c2fd01a3110effe7f1" + integrity sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg== + dependencies: + ms "2.1.2" + +decamelize@^1.1.2: + version "1.2.0" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" + integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= + +decode-uri-component@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" + integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= + +deep-is@~0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" + integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= + +define-property@^0.2.5: + version "0.2.5" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" + integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY= + dependencies: + is-descriptor "^0.1.0" + +define-property@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" + integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY= + dependencies: + is-descriptor "^1.0.0" + +define-property@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" + integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ== + dependencies: + is-descriptor "^1.0.2" + isobject "^3.0.1" + +diff@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" + integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== + +doctrine@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" + integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== + dependencies: + esutils "^2.0.2" + +dynamic-dedupe@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/dynamic-dedupe/-/dynamic-dedupe-0.3.0.tgz#06e44c223f5e4e94d78ef9db23a6515ce2f962a1" + integrity sha1-BuRMIj9eTpTXjvnbI6ZRXOL5YqE= + dependencies: + xtend "^4.0.0" + +emoji-regex@^7.0.1: + version "7.0.3" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" + integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== + +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + +emojis-list@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78" + integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q== + +error-ex@^1.2.0: + version "1.3.2" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== + dependencies: + is-arrayish "^0.2.1" + +escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= + +eslint-scope@^5.0.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" + integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== + dependencies: + esrecurse "^4.3.0" + estraverse "^4.1.1" + +eslint-utils@^1.4.3: + version "1.4.3" + resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.4.3.tgz#74fec7c54d0776b6f67e0251040b5806564e981f" + integrity sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q== + dependencies: + eslint-visitor-keys "^1.1.0" + +eslint-utils@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27" + integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg== + dependencies: + eslint-visitor-keys "^1.1.0" + +eslint-visitor-keys@^1.1.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" + integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== + +eslint@^6.8.0: + version "6.8.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-6.8.0.tgz#62262d6729739f9275723824302fb227c8c93ffb" + integrity sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig== + dependencies: + "@babel/code-frame" "^7.0.0" + ajv "^6.10.0" + chalk "^2.1.0" + cross-spawn "^6.0.5" + debug "^4.0.1" + doctrine "^3.0.0" + eslint-scope "^5.0.0" + eslint-utils "^1.4.3" + eslint-visitor-keys "^1.1.0" + espree "^6.1.2" + esquery "^1.0.1" + esutils "^2.0.2" + file-entry-cache "^5.0.1" + functional-red-black-tree "^1.0.1" + glob-parent "^5.0.0" + globals "^12.1.0" + ignore "^4.0.6" + import-fresh "^3.0.0" + imurmurhash "^0.1.4" + inquirer "^7.0.0" + is-glob "^4.0.0" + js-yaml "^3.13.1" + json-stable-stringify-without-jsonify "^1.0.1" + levn "^0.3.0" + lodash "^4.17.14" + minimatch "^3.0.4" + mkdirp "^0.5.1" + natural-compare "^1.4.0" + optionator "^0.8.3" + progress "^2.0.0" + regexpp "^2.0.1" + semver "^6.1.2" + strip-ansi "^5.2.0" + strip-json-comments "^3.0.1" + table "^5.2.3" + text-table "^0.2.0" + v8-compile-cache "^2.0.3" + +espree@^6.1.2: + version "6.2.1" + resolved "https://registry.yarnpkg.com/espree/-/espree-6.2.1.tgz#77fc72e1fd744a2052c20f38a5b575832e82734a" + integrity sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw== + dependencies: + acorn "^7.1.1" + acorn-jsx "^5.2.0" + eslint-visitor-keys "^1.1.0" + +esprima@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== + +esquery@^1.0.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.3.1.tgz#b78b5828aa8e214e29fb74c4d5b752e1c033da57" + integrity sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ== + dependencies: + estraverse "^5.1.0" + +esrecurse@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" + integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== + dependencies: + estraverse "^5.2.0" + +estraverse@^4.1.1: + version "4.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" + integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== + +estraverse@^5.1.0, estraverse@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.2.0.tgz#307df42547e6cc7324d3cf03c155d5cdb8c53880" + integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ== + +esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== + +eventemitter3@^4.0.4: + version "4.0.7" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" + integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== + +expand-brackets@^2.1.4: + version "2.1.4" + resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" + integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI= + dependencies: + debug "^2.3.3" + define-property "^0.2.5" + extend-shallow "^2.0.1" + posix-character-classes "^0.1.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +exports-loader@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/exports-loader/-/exports-loader-1.1.0.tgz#26a16706e4cf533145de24c1419baf33b624fb5c" + integrity sha512-zGB2SujiAyO0Rwn4GQ17/HlT8cwmT8abcBeZpr2R3sItJ5sI5Y9BzNzus3H9tH1iWLAoJLi9N3TP54D2+j859Q== + dependencies: + loader-utils "^2.0.0" + schema-utils "^2.7.0" + source-map "^0.6.1" + +extend-shallow@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" + integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= + dependencies: + is-extendable "^0.1.0" + +extend-shallow@^3.0.0, extend-shallow@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" + integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg= + dependencies: + assign-symbols "^1.0.0" + is-extendable "^1.0.1" + +external-editor@^3.0.3: + version "3.1.0" + resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" + integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== + dependencies: + chardet "^0.7.0" + iconv-lite "^0.4.24" + tmp "^0.0.33" + +extglob@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" + integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw== + dependencies: + array-unique "^0.3.2" + define-property "^1.0.0" + expand-brackets "^2.1.4" + extend-shallow "^2.0.1" + fragment-cache "^0.2.1" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +fast-deep-equal@^3.1.1: + version "3.1.3" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + +fast-glob@^2.2.6: + version "2.2.7" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-2.2.7.tgz#6953857c3afa475fff92ee6015d52da70a4cd39d" + integrity sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw== + dependencies: + "@mrmlnc/readdir-enhanced" "^2.2.1" + "@nodelib/fs.stat" "^1.1.2" + glob-parent "^3.1.0" + is-glob "^4.0.0" + merge2 "^1.2.3" + micromatch "^3.1.10" + +fast-json-stable-stringify@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + +fast-levenshtein@~2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= + +figures@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" + integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== + dependencies: + escape-string-regexp "^1.0.5" + +file-entry-cache@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-5.0.1.tgz#ca0f6efa6dd3d561333fb14515065c2fafdf439c" + integrity sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g== + dependencies: + flat-cache "^2.0.1" + +fill-range@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" + integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc= + dependencies: + extend-shallow "^2.0.1" + is-number "^3.0.0" + repeat-string "^1.6.1" + to-regex-range "^2.1.0" + +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + +find-up@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" + integrity sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8= + dependencies: + path-exists "^2.0.0" + pinkie-promise "^2.0.0" + +flat-cache@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-2.0.1.tgz#5d296d6f04bda44a4630a301413bdbc2ec085ec0" + integrity sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA== + dependencies: + flatted "^2.0.0" + rimraf "2.6.3" + write "1.0.3" + +flatted@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.2.tgz#4575b21e2bcee7434aa9be662f4b7b5f9c2b5138" + integrity sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA== + +for-in@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" + integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= + +fragment-cache@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" + integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk= + dependencies: + map-cache "^0.2.2" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= + +fsevents@~2.1.2: + version "2.1.3" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.3.tgz#fb738703ae8d2f9fe900c33836ddebee8b97f23e" + integrity sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ== + +functional-red-black-tree@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" + integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= + +get-stdin@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe" + integrity sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4= + +get-value@^2.0.3, get-value@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" + integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= + +glob-parent@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" + integrity sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4= + dependencies: + is-glob "^3.1.0" + path-dirname "^1.0.0" + +glob-parent@^5.0.0, glob-parent@~5.1.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.1.tgz#b6c1ef417c4e5663ea498f1c45afac6916bbc229" + integrity sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ== + dependencies: + is-glob "^4.0.1" + +glob-to-regexp@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz#8c5a1494d2066c570cc3bfe4496175acc4d502ab" + integrity sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs= + +glob@^7.1.3, glob@^7.1.6: + version "7.1.6" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" + integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +globals@^12.1.0: + version "12.4.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-12.4.0.tgz#a18813576a41b00a24a97e7f815918c2e19925f8" + integrity sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg== + dependencies: + type-fest "^0.8.1" + +graceful-fs@^4.1.2: + version "4.2.4" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" + integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= + +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + +has-value@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" + integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8= + dependencies: + get-value "^2.0.3" + has-values "^0.1.4" + isobject "^2.0.0" + +has-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" + integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc= + dependencies: + get-value "^2.0.6" + has-values "^1.0.0" + isobject "^3.0.0" + +has-values@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" + integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E= + +has-values@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" + integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8= + dependencies: + is-number "^3.0.0" + kind-of "^4.0.0" + +hosted-git-info@^2.1.4: + version "2.8.8" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.8.tgz#7539bd4bc1e0e0a895815a2e0262420b12858488" + integrity sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg== + +iconv-lite@^0.4.24: + version "0.4.24" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== + dependencies: + safer-buffer ">= 2.1.2 < 3" + +ignore@^4.0.6: + version "4.0.6" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" + integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== + +import-fresh@^3.0.0: + version "3.2.1" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.2.1.tgz#633ff618506e793af5ac91bf48b72677e15cbe66" + integrity sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ== + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" + +imports-loader@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/imports-loader/-/imports-loader-1.1.0.tgz#1c3a388d0c5cd7f9eb08f3646d4aae3b70e57933" + integrity sha512-HcPM6rULdQ6EBLVq+5O+CF9xb7qiUjsRm6V28bTG/c3IU5sQkVZzUDwYY0r4jHvSAmVFdO9WA/vLAURR5WQSeQ== + dependencies: + loader-utils "^2.0.0" + schema-utils "^2.7.0" + source-map "^0.6.1" + strip-comments "^2.0.1" + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= + +indent-string@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80" + integrity sha1-ji1INIdCEhtKghi3oTfppSBJ3IA= + dependencies: + repeating "^2.0.0" + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +inherits@2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" + integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= + +inquirer@^7.0.0: + version "7.3.3" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-7.3.3.tgz#04d176b2af04afc157a83fd7c100e98ee0aad003" + integrity sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA== + dependencies: + ansi-escapes "^4.2.1" + chalk "^4.1.0" + cli-cursor "^3.1.0" + cli-width "^3.0.0" + external-editor "^3.0.3" + figures "^3.0.0" + lodash "^4.17.19" + mute-stream "0.0.8" + run-async "^2.4.0" + rxjs "^6.6.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + through "^2.3.6" + +is-accessor-descriptor@^0.1.6: + version "0.1.6" + resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" + integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY= + dependencies: + kind-of "^3.0.2" + +is-accessor-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" + integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ== + dependencies: + kind-of "^6.0.0" + +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= + +is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + dependencies: + binary-extensions "^2.0.0" + +is-buffer@^1.1.5: + version "1.1.6" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" + integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== + +is-data-descriptor@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" + integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y= + dependencies: + kind-of "^3.0.2" + +is-data-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" + integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ== + dependencies: + kind-of "^6.0.0" + +is-descriptor@^0.1.0: + version "0.1.6" + resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" + integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg== + dependencies: + is-accessor-descriptor "^0.1.6" + is-data-descriptor "^0.1.4" + kind-of "^5.0.0" + +is-descriptor@^1.0.0, is-descriptor@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" + integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg== + dependencies: + is-accessor-descriptor "^1.0.0" + is-data-descriptor "^1.0.0" + kind-of "^6.0.2" + +is-extendable@^0.1.0, is-extendable@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" + integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= + +is-extendable@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" + integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA== + dependencies: + is-plain-object "^2.0.4" + +is-extglob@^2.1.0, is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= + +is-finite@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.1.0.tgz#904135c77fb42c0641d6aa1bcdbc4daa8da082f3" + integrity sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w== + +is-fullwidth-code-point@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" + integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= + +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + +is-glob@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" + integrity sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo= + dependencies: + is-extglob "^2.1.0" + +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" + integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== + dependencies: + is-extglob "^2.1.1" + +is-number@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" + integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU= + dependencies: + kind-of "^3.0.2" + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +is-plain-object@^2.0.3, is-plain-object@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" + integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== + dependencies: + isobject "^3.0.1" + +is-utf8@^0.2.0: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" + integrity sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI= + +is-windows@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" + integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== + +isarray@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= + +isobject@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" + integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk= + dependencies: + isarray "1.0.0" + +isobject@^3.0.0, isobject@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" + integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= + +jasmine-core@~3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/jasmine-core/-/jasmine-core-3.6.0.tgz#491f3bb23941799c353ceb7a45b38a950ebc5a20" + integrity sha512-8uQYa7zJN8hq9z+g8z1bqCfdC8eoDAeVnM5sfqs7KHv9/ifoJ500m018fpFc7RDaO6SWCLCXwo/wPSNcdYTgcw== + +jasmine@^3.5.0: + version "3.6.1" + resolved "https://registry.yarnpkg.com/jasmine/-/jasmine-3.6.1.tgz#a20456b309a669b547a3c24bb2120f16f70cfc65" + integrity sha512-Jqp8P6ZWkTVFGmJwBK46p+kJNrZCdqkQ4GL+PGuBXZwK1fM4ST9BizkYgIwCFqYYqnTizAy6+XG2Ej5dFrej9Q== + dependencies: + fast-glob "^2.2.6" + jasmine-core "~3.6.0" + +js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +js-yaml@^3.13.1: + version "3.14.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.0.tgz#a7a34170f26a21bb162424d8adacb4113a69e482" + integrity sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +json-stable-stringify-without-jsonify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" + integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= + +json5@^2.1.2: + version "2.1.3" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.3.tgz#c9b0f7fa9233bfe5807fe66fcf3a5617ed597d43" + integrity sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA== + dependencies: + minimist "^1.2.5" + +kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: + version "3.2.2" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" + integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= + dependencies: + is-buffer "^1.1.5" + +kind-of@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" + integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc= + dependencies: + is-buffer "^1.1.5" + +kind-of@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" + integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== + +kind-of@^6.0.0, kind-of@^6.0.2: + version "6.0.3" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" + integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== + +levn@^0.3.0, levn@~0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" + integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= + dependencies: + prelude-ls "~1.1.2" + type-check "~0.3.2" + +load-json-file@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" + integrity sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA= + dependencies: + graceful-fs "^4.1.2" + parse-json "^2.2.0" + pify "^2.0.0" + pinkie-promise "^2.0.0" + strip-bom "^2.0.0" + +loader-utils@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-2.0.0.tgz#e4cace5b816d425a166b5f097e10cd12b36064b0" + integrity sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ== + dependencies: + big.js "^5.2.2" + emojis-list "^3.0.0" + json5 "^2.1.2" + +lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19: + version "4.17.20" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52" + integrity sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA== + +loud-rejection@^1.0.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f" + integrity sha1-W0b4AUft7leIcPCG0Eghz5mOVR8= + dependencies: + currently-unhandled "^0.4.1" + signal-exit "^3.0.0" + +make-error@^1.1.1: + version "1.3.6" + resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" + integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== + +map-cache@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" + integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= + +map-obj@^1.0.0, map-obj@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" + integrity sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0= + +map-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" + integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48= + dependencies: + object-visit "^1.0.0" + +meow@^3.3.0: + version "3.7.0" + resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb" + integrity sha1-cstmi0JSKCkKu/qFaJJYcwioAfs= + dependencies: + camelcase-keys "^2.0.0" + decamelize "^1.1.2" + loud-rejection "^1.0.0" + map-obj "^1.0.1" + minimist "^1.1.3" + normalize-package-data "^2.3.4" + object-assign "^4.0.1" + read-pkg-up "^1.0.1" + redent "^1.0.0" + trim-newlines "^1.0.0" + +merge2@^1.2.3: + version "1.4.1" + resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" + integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== + +micromatch@^3.1.10: + version "3.1.10" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" + integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + braces "^2.3.1" + define-property "^2.0.2" + extend-shallow "^3.0.2" + extglob "^2.0.4" + fragment-cache "^0.2.1" + kind-of "^6.0.2" + nanomatch "^1.2.9" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.2" + +mimic-fn@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== + +minimatch@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== + dependencies: + brace-expansion "^1.1.7" + +minimist@^1.1.3, minimist@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" + integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== + +mixin-deep@^1.2.0: + version "1.3.2" + resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566" + integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA== + dependencies: + for-in "^1.0.2" + is-extendable "^1.0.1" + +mkdirp@^0.5.1: + version "0.5.5" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" + integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== + dependencies: + minimist "^1.2.5" + +mkdirp@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" + integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= + +ms@2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +mute-stream@0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" + integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== + +nanomatch@^1.2.9: + version "1.2.13" + resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" + integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA== + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + define-property "^2.0.2" + extend-shallow "^3.0.2" + fragment-cache "^0.2.1" + is-windows "^1.0.2" + kind-of "^6.0.2" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= + +nice-try@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" + integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== + +normalize-package-data@^2.3.2, normalize-package-data@^2.3.4: + version "2.5.0" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" + integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== + dependencies: + hosted-git-info "^2.1.4" + resolve "^1.10.0" + semver "2 || 3 || 4 || 5" + validate-npm-package-license "^3.0.1" + +normalize-path@^3.0.0, normalize-path@~3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +object-assign@^4.0.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= + +object-copy@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" + integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw= + dependencies: + copy-descriptor "^0.1.0" + define-property "^0.2.5" + kind-of "^3.0.3" + +object-visit@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" + integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs= + dependencies: + isobject "^3.0.0" + +object.pick@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" + integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c= + dependencies: + isobject "^3.0.1" + +once@^1.3.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= + dependencies: + wrappy "1" + +onetime@^5.1.0: + version "5.1.2" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" + integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== + dependencies: + mimic-fn "^2.1.0" + +optionator@^0.8.3: + version "0.8.3" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" + integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== + dependencies: + deep-is "~0.1.3" + fast-levenshtein "~2.0.6" + levn "~0.3.0" + prelude-ls "~1.1.2" + type-check "~0.3.2" + word-wrap "~1.2.3" + +os-tmpdir@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= + +parent-module@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" + integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== + dependencies: + callsites "^3.0.0" + +parse-json@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" + integrity sha1-9ID0BDTvgHQfhGkJn43qGPVaTck= + dependencies: + error-ex "^1.2.0" + +pascalcase@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" + integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= + +path-dirname@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" + integrity sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA= + +path-exists@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" + integrity sha1-D+tsZPD8UY2adU3V77YscCJ2H0s= + dependencies: + pinkie-promise "^2.0.0" + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= + +path-key@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" + integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= + +path-parse@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" + integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== + +path-type@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" + integrity sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE= + dependencies: + graceful-fs "^4.1.2" + pify "^2.0.0" + pinkie-promise "^2.0.0" + +path@^0.12.7: + version "0.12.7" + resolved "https://registry.yarnpkg.com/path/-/path-0.12.7.tgz#d4dc2a506c4ce2197eb481ebfcd5b36c0140b10f" + integrity sha1-1NwqUGxM4hl+tIHr/NWzbAFAsQ8= + dependencies: + process "^0.11.1" + util "^0.10.3" + +phaser@^3.24.1: + version "3.24.1" + resolved "https://registry.yarnpkg.com/phaser/-/phaser-3.24.1.tgz#376e0c965d2a35af37c06ee78627dafbde5be017" + integrity sha512-WbrRMkbpEzarkfrq83akeauc6b8xNxsOTpDygyW7wrU2G2ne6kOYu3hji4UAaGnZaOLrVuj8ycYPjX9P1LxcDw== + dependencies: + eventemitter3 "^4.0.4" + exports-loader "^1.1.0" + imports-loader "^1.1.0" + path "^0.12.7" + +picomatch@^2.0.4, picomatch@^2.2.1: + version "2.2.2" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" + integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== + +pify@^2.0.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= + +pinkie-promise@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" + integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o= + dependencies: + pinkie "^2.0.0" + +pinkie@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" + integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA= + +posix-character-classes@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" + integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= + +prelude-ls@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" + integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= + +process@^0.11.1: + version "0.11.10" + resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" + integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI= + +progress@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" + integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== + +punycode@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" + integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== + +read-pkg-up@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" + integrity sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI= + dependencies: + find-up "^1.0.0" + read-pkg "^1.0.0" + +read-pkg@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" + integrity sha1-9f+qXs0pyzHAR0vKfXVra7KePyg= + dependencies: + load-json-file "^1.0.0" + normalize-package-data "^2.3.2" + path-type "^1.0.0" + +readdirp@~3.4.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.4.0.tgz#9fdccdf9e9155805449221ac645e8303ab5b9ada" + integrity sha512-0xe001vZBnJEK+uKcj8qOhyAKPzIT+gStxWr3LCB0DwcXR5NZJ3IaC+yGnHCYzB/S7ov3m3EEbZI2zeNvX+hGQ== + dependencies: + picomatch "^2.2.1" + +redent@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde" + integrity sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94= + dependencies: + indent-string "^2.1.0" + strip-indent "^1.0.1" + +regex-not@^1.0.0, regex-not@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" + integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A== + dependencies: + extend-shallow "^3.0.2" + safe-regex "^1.1.0" + +regexpp@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-2.0.1.tgz#8d19d31cf632482b589049f8281f93dbcba4d07f" + integrity sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw== + +regexpp@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.1.0.tgz#206d0ad0a5648cffbdb8ae46438f3dc51c9f78e2" + integrity sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q== + +repeat-element@^1.1.2: + version "1.1.3" + resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce" + integrity sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g== + +repeat-string@^1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" + integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= + +repeating@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" + integrity sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo= + dependencies: + is-finite "^1.0.0" + +resolve-from@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== + +resolve-url@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" + integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= + +resolve@^1.0.0, resolve@^1.10.0: + version "1.17.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.17.0.tgz#b25941b54968231cc2d1bb76a79cb7f2c0bf8444" + integrity sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w== + dependencies: + path-parse "^1.0.6" + +restore-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" + integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== + dependencies: + onetime "^5.1.0" + signal-exit "^3.0.2" + +ret@~0.1.10: + version "0.1.15" + resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" + integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== + +rimraf@2.6.3: + version "2.6.3" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" + integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== + dependencies: + glob "^7.1.3" + +rimraf@^2.6.1: + version "2.7.1" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" + integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== + dependencies: + glob "^7.1.3" + +run-async@^2.4.0: + version "2.4.1" + resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" + integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== + +rxjs@^6.6.0: + version "6.6.3" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.3.tgz#8ca84635c4daa900c0d3967a6ee7ac60271ee552" + integrity sha512-trsQc+xYYXZ3urjOiJOuCOa5N3jAZ3eiSpQB5hIT8zGlL2QfnHLJ2r7GMkBGuIausdJN1OneaI6gQlsqNHHmZQ== + dependencies: + tslib "^1.9.0" + +safe-regex@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" + integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4= + dependencies: + ret "~0.1.10" + +"safer-buffer@>= 2.1.2 < 3": + version "2.1.2" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +schema-utils@^2.7.0: + version "2.7.1" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.7.1.tgz#1ca4f32d1b24c590c203b8e7a50bf0ea4cd394d7" + integrity sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg== + dependencies: + "@types/json-schema" "^7.0.5" + ajv "^6.12.4" + ajv-keywords "^3.5.2" + +"semver@2 || 3 || 4 || 5", semver@^5.5.0: + version "5.7.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" + integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== + +semver@^6.1.2: + version "6.3.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" + integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== + +semver@^7.3.2: + version "7.3.2" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938" + integrity sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ== + +set-value@^2.0.0, set-value@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b" + integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw== + dependencies: + extend-shallow "^2.0.1" + is-extendable "^0.1.1" + is-plain-object "^2.0.3" + split-string "^3.0.1" + +shebang-command@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" + integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= + dependencies: + shebang-regex "^1.0.0" + +shebang-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" + integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= + +signal-exit@^3.0.0, signal-exit@^3.0.2: + version "3.0.3" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" + integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== + +slice-ansi@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636" + integrity sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ== + dependencies: + ansi-styles "^3.2.0" + astral-regex "^1.0.0" + is-fullwidth-code-point "^2.0.0" + +snapdragon-node@^2.0.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" + integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw== + dependencies: + define-property "^1.0.0" + isobject "^3.0.0" + snapdragon-util "^3.0.1" + +snapdragon-util@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" + integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ== + dependencies: + kind-of "^3.2.0" + +snapdragon@^0.8.1: + version "0.8.2" + resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" + integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg== + dependencies: + base "^0.11.1" + debug "^2.2.0" + define-property "^0.2.5" + extend-shallow "^2.0.1" + map-cache "^0.2.2" + source-map "^0.5.6" + source-map-resolve "^0.5.0" + use "^3.1.0" + +source-map-resolve@^0.5.0: + version "0.5.3" + resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a" + integrity sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw== + dependencies: + atob "^2.1.2" + decode-uri-component "^0.2.0" + resolve-url "^0.2.1" + source-map-url "^0.4.0" + urix "^0.1.0" + +source-map-support@^0.5.12, source-map-support@^0.5.17: + version "0.5.19" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61" + integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map-url@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" + integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM= + +source-map@^0.5.6: + version "0.5.7" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" + integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= + +source-map@^0.6.0, source-map@^0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +spdx-correct@^3.0.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9" + integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w== + dependencies: + spdx-expression-parse "^3.0.0" + spdx-license-ids "^3.0.0" + +spdx-exceptions@^2.1.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" + integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== + +spdx-expression-parse@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" + integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== + dependencies: + spdx-exceptions "^2.1.0" + spdx-license-ids "^3.0.0" + +spdx-license-ids@^3.0.0: + version "3.0.6" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.6.tgz#c80757383c28abf7296744998cbc106ae8b854ce" + integrity sha512-+orQK83kyMva3WyPf59k1+Y525csj5JejicWut55zeTWANuN17qSiSLUXWtzHeNWORSvT7GLDJ/E/XiIWoXBTw== + +split-string@^3.0.1, split-string@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" + integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw== + dependencies: + extend-shallow "^3.0.0" + +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= + +static-extend@^0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" + integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY= + dependencies: + define-property "^0.2.5" + object-copy "^0.1.0" + +string-width@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" + integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== + dependencies: + emoji-regex "^7.0.1" + is-fullwidth-code-point "^2.0.0" + strip-ansi "^5.1.0" + +string-width@^4.1.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.0.tgz#952182c46cc7b2c313d1596e623992bd163b72b5" + integrity sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.0" + +strip-ansi@^5.1.0, strip-ansi@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" + integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== + dependencies: + ansi-regex "^4.1.0" + +strip-ansi@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" + integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== + dependencies: + ansi-regex "^5.0.0" + +strip-bom@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" + integrity sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4= + dependencies: + is-utf8 "^0.2.0" + +strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= + +strip-comments@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/strip-comments/-/strip-comments-2.0.1.tgz#4ad11c3fbcac177a67a40ac224ca339ca1c1ba9b" + integrity sha512-ZprKx+bBLXv067WTCALv8SSz5l2+XhpYCsVtSqlMnkAXMWDq+/ekVbl1ghqP9rUHTzv6sm/DwCOiYutU/yp1fw== + +strip-indent@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2" + integrity sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI= + dependencies: + get-stdin "^4.0.1" + +strip-json-comments@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" + integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= + +strip-json-comments@^3.0.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== + +supports-color@^5.3.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + +supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + dependencies: + has-flag "^4.0.0" + +table@^5.2.3: + version "5.4.6" + resolved "https://registry.yarnpkg.com/table/-/table-5.4.6.tgz#1292d19500ce3f86053b05f0e8e7e4a3bb21079e" + integrity sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug== + dependencies: + ajv "^6.10.2" + lodash "^4.17.14" + slice-ansi "^2.1.0" + string-width "^3.0.0" + +text-table@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= + +through@^2.3.6: + version "2.3.8" + resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= + +tmp@^0.0.33: + version "0.0.33" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" + integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== + dependencies: + os-tmpdir "~1.0.2" + +to-object-path@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" + integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68= + dependencies: + kind-of "^3.0.2" + +to-regex-range@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" + integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg= + dependencies: + is-number "^3.0.0" + repeat-string "^1.6.1" + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + +to-regex@^3.0.1, to-regex@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" + integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw== + dependencies: + define-property "^2.0.2" + extend-shallow "^3.0.2" + regex-not "^1.0.2" + safe-regex "^1.1.0" + +tree-kill@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/tree-kill/-/tree-kill-1.2.2.tgz#4ca09a9092c88b73a7cdc5e8a01b507b0790a0cc" + integrity sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A== + +trim-newlines@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613" + integrity sha1-WIeWa7WCpFA6QetST301ARgVphM= + +ts-node-dev@^1.0.0-pre.44: + version "1.0.0-pre.62" + resolved "https://registry.yarnpkg.com/ts-node-dev/-/ts-node-dev-1.0.0-pre.62.tgz#835644c43669b659a880379b9d06df86cef665ad" + integrity sha512-hfsEuCqUZOVnZ86l7A3icxD1nFt1HEmLVbx4YOHCkrbSHPBNWcw+IczAPZo3zz7YiOm9vs0xG6OENNrkgm89tQ== + dependencies: + chokidar "^3.4.0" + dateformat "~1.0.4-1.2.3" + dynamic-dedupe "^0.3.0" + minimist "^1.2.5" + mkdirp "^1.0.4" + resolve "^1.0.0" + rimraf "^2.6.1" + source-map-support "^0.5.12" + tree-kill "^1.2.2" + ts-node "^8.10.2" + tsconfig "^7.0.0" + +ts-node@^8.10.2: + version "8.10.2" + resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-8.10.2.tgz#eee03764633b1234ddd37f8db9ec10b75ec7fb8d" + integrity sha512-ISJJGgkIpDdBhWVu3jufsWpK3Rzo7bdiIXJjQc0ynKxVOVcg2oIrf2H2cejminGrptVc6q6/uynAHNCuWGbpVA== + dependencies: + arg "^4.1.0" + diff "^4.0.1" + make-error "^1.1.1" + source-map-support "^0.5.17" + yn "3.1.1" + +tsconfig@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/tsconfig/-/tsconfig-7.0.0.tgz#84538875a4dc216e5c4a5432b3a4dec3d54e91b7" + integrity sha512-vZXmzPrL+EmC4T/4rVlT2jNVMWCi/O4DIiSj3UHg1OE5kCKbk4mfrXc6dZksLgRM/TZlKnousKH9bbTazUWRRw== + dependencies: + "@types/strip-bom" "^3.0.0" + "@types/strip-json-comments" "0.0.30" + strip-bom "^3.0.0" + strip-json-comments "^2.0.0" + +tslib@^1.8.1, tslib@^1.9.0: + version "1.13.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.13.0.tgz#c881e13cc7015894ed914862d276436fa9a47043" + integrity sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q== + +tsutils@^3.17.1: + version "3.17.1" + resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.17.1.tgz#ed719917f11ca0dee586272b2ac49e015a2dd759" + integrity sha512-kzeQ5B8H3w60nFY2g8cJIuH7JDpsALXySGtwGJ0p2LSjLgay3NdIpqq5SoOBe46bKDW2iq25irHCr8wjomUS2g== + dependencies: + tslib "^1.8.1" + +type-check@~0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" + integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I= + dependencies: + prelude-ls "~1.1.2" + +type-fest@^0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.11.0.tgz#97abf0872310fed88a5c466b25681576145e33f1" + integrity sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ== + +type-fest@^0.8.1: + version "0.8.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" + integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== + +typescript@^3.8.3: + version "3.9.7" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.9.7.tgz#98d600a5ebdc38f40cb277522f12dc800e9e25fa" + integrity sha512-BLbiRkiBzAwsjut4x/dsibSTB6yWpwT5qWmC2OfuCg3GgVQCSgMs4vEctYPhsaGtd0AeuuHMkjZ2h2WG8MSzRw== + +union-value@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" + integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg== + dependencies: + arr-union "^3.1.0" + get-value "^2.0.6" + is-extendable "^0.1.1" + set-value "^2.0.1" + +unset-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" + integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk= + dependencies: + has-value "^0.3.1" + isobject "^3.0.0" + +uri-js@^4.2.2: + version "4.4.0" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.0.tgz#aa714261de793e8a82347a7bcc9ce74e86f28602" + integrity sha512-B0yRTzYdUCCn9n+F4+Gh4yIDtMQcaJsmYBDsTSG8g/OejKBodLQ2IHfN3bM7jUsRXndopT7OIXWdYqc1fjmV6g== + dependencies: + punycode "^2.1.0" + +urix@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" + integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= + +use@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" + integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== + +util@^0.10.3: + version "0.10.4" + resolved "https://registry.yarnpkg.com/util/-/util-0.10.4.tgz#3aa0125bfe668a4672de58857d3ace27ecb76901" + integrity sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A== + dependencies: + inherits "2.0.3" + +v8-compile-cache@^2.0.3: + version "2.1.1" + resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.1.1.tgz#54bc3cdd43317bca91e35dcaf305b1a7237de745" + integrity sha512-8OQ9CL+VWyt3JStj7HX7/ciTL2V3Rl1Wf5OL+SNTm0yK1KvtReVulksyeRnCANHHuUxHlQig+JJDlUhBt1NQDQ== + +validate-npm-package-license@^3.0.1: + version "3.0.4" + resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" + integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== + dependencies: + spdx-correct "^3.0.0" + spdx-expression-parse "^3.0.0" + +which@^1.2.9: + version "1.3.1" + resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" + integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== + dependencies: + isexe "^2.0.0" + +word-wrap@~1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" + integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= + +write@1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/write/-/write-1.0.3.tgz#0800e14523b923a387e415123c865616aae0f5c3" + integrity sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig== + dependencies: + mkdirp "^0.5.1" + +xtend@^4.0.0: + version "4.0.2" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" + integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== + +yn@3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" + integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== From 4ea15e1d04eeea6c46851c19adf6b48d1d263e39 Mon Sep 17 00:00:00 2001 From: Gregoire Parant Date: Wed, 23 Sep 2020 18:29:18 +0200 Subject: [PATCH 173/313] Fix CI --- maps/yarn.lock | 2240 ------------------------------------------------ 1 file changed, 2240 deletions(-) delete mode 100644 maps/yarn.lock diff --git a/maps/yarn.lock b/maps/yarn.lock deleted file mode 100644 index 04c9d5ff..00000000 --- a/maps/yarn.lock +++ /dev/null @@ -1,2240 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@babel/code-frame@^7.0.0": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.10.4.tgz#168da1a36e90da68ae8d49c0f1b48c7c6249213a" - integrity sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg== - dependencies: - "@babel/highlight" "^7.10.4" - -"@babel/helper-validator-identifier@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz#a78c7a7251e01f616512d31b10adcf52ada5e0d2" - integrity sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw== - -"@babel/highlight@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.10.4.tgz#7d1bdfd65753538fabe6c38596cdb76d9ac60143" - integrity sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA== - dependencies: - "@babel/helper-validator-identifier" "^7.10.4" - chalk "^2.0.0" - js-tokens "^4.0.0" - -"@mrmlnc/readdir-enhanced@^2.2.1": - version "2.2.1" - resolved "https://registry.yarnpkg.com/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz#524af240d1a360527b730475ecfa1344aa540dde" - integrity sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g== - dependencies: - call-me-maybe "^1.0.1" - glob-to-regexp "^0.3.0" - -"@nodelib/fs.stat@^1.1.2": - version "1.1.3" - resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz#2b5a3ab3f918cca48a8c754c08168e3f03eba61b" - integrity sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw== - -"@types/color-name@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@types/color-name/-/color-name-1.1.1.tgz#1c1261bbeaa10a8055bbc5d8ab84b7b2afc846a0" - integrity sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ== - -"@types/eslint-visitor-keys@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#1ee30d79544ca84d68d4b3cdb0af4f205663dd2d" - integrity sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag== - -"@types/jasmine@^3.5.10": - version "3.5.14" - resolved "https://registry.yarnpkg.com/@types/jasmine/-/jasmine-3.5.14.tgz#f41a14e8ffa939062a71cf9722e5ee7d4e1f94af" - integrity sha512-Fkgk536sHPqcOtd+Ow+WiUNuk0TSo/BntKkF8wSvcd6M2FvPjeXcUE6Oz/bwDZiUZEaXLslAgw00Q94Pnx6T4w== - -"@types/json-schema@^7.0.3", "@types/json-schema@^7.0.5": - version "7.0.6" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.6.tgz#f4c7ec43e81b319a9815115031709f26987891f0" - integrity sha512-3c+yGKvVP5Y9TYBEibGNR+kLtijnj7mYrXRg+WpFb2X9xm04g/DXYkfg4hmzJQosc9snFNUPkbYIhu+KAm6jJw== - -"@types/strip-bom@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@types/strip-bom/-/strip-bom-3.0.0.tgz#14a8ec3956c2e81edb7520790aecf21c290aebd2" - integrity sha1-FKjsOVbC6B7bdSB5CuzyHCkK69I= - -"@types/strip-json-comments@0.0.30": - version "0.0.30" - resolved "https://registry.yarnpkg.com/@types/strip-json-comments/-/strip-json-comments-0.0.30.tgz#9aa30c04db212a9a0649d6ae6fd50accc40748a1" - integrity sha512-7NQmHra/JILCd1QqpSzl8+mJRc8ZHz3uDm8YV1Ks9IhK0epEiTw8aIErbvH9PI+6XbqhyIQy3462nEsn7UVzjQ== - -"@typescript-eslint/eslint-plugin@^2.26.0": - version "2.34.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-2.34.0.tgz#6f8ce8a46c7dea4a6f1d171d2bb8fbae6dac2be9" - integrity sha512-4zY3Z88rEE99+CNvTbXSyovv2z9PNOVffTWD2W8QF5s2prBQtwN2zadqERcrHpcR7O/+KMI3fcTAmUUhK/iQcQ== - dependencies: - "@typescript-eslint/experimental-utils" "2.34.0" - functional-red-black-tree "^1.0.1" - regexpp "^3.0.0" - tsutils "^3.17.1" - -"@typescript-eslint/experimental-utils@2.34.0": - version "2.34.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-2.34.0.tgz#d3524b644cdb40eebceca67f8cf3e4cc9c8f980f" - integrity sha512-eS6FTkq+wuMJ+sgtuNTtcqavWXqsflWcfBnlYhg/nS4aZ1leewkXGbvBhaapn1q6qf4M71bsR1tez5JTRMuqwA== - dependencies: - "@types/json-schema" "^7.0.3" - "@typescript-eslint/typescript-estree" "2.34.0" - eslint-scope "^5.0.0" - eslint-utils "^2.0.0" - -"@typescript-eslint/parser@^2.26.0": - version "2.34.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-2.34.0.tgz#50252630ca319685420e9a39ca05fe185a256bc8" - integrity sha512-03ilO0ucSD0EPTw2X4PntSIRFtDPWjrVq7C3/Z3VQHRC7+13YB55rcJI3Jt+YgeHbjUdJPcPa7b23rXCBokuyA== - dependencies: - "@types/eslint-visitor-keys" "^1.0.0" - "@typescript-eslint/experimental-utils" "2.34.0" - "@typescript-eslint/typescript-estree" "2.34.0" - eslint-visitor-keys "^1.1.0" - -"@typescript-eslint/typescript-estree@2.34.0": - version "2.34.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-2.34.0.tgz#14aeb6353b39ef0732cc7f1b8285294937cf37d5" - integrity sha512-OMAr+nJWKdlVM9LOqCqh3pQQPwxHAN7Du8DR6dmwCrAmxtiXQnhHJ6tBNtf+cggqfo51SG/FCwnKhXCIM7hnVg== - dependencies: - debug "^4.1.1" - eslint-visitor-keys "^1.1.0" - glob "^7.1.6" - is-glob "^4.0.1" - lodash "^4.17.15" - semver "^7.3.2" - tsutils "^3.17.1" - -acorn-jsx@^5.2.0: - version "5.3.1" - resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.1.tgz#fc8661e11b7ac1539c47dbfea2e72b3af34d267b" - integrity sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng== - -acorn@^7.1.1: - version "7.4.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.0.tgz#e1ad486e6c54501634c6c397c5c121daa383607c" - integrity sha512-+G7P8jJmCHr+S+cLfQxygbWhXy+8YTVGzAkpEbcLo2mLoL7tij/VG41QSHACSf5QgYRhMZYHuNc6drJaO0Da+w== - -ajv-keywords@^3.5.2: - version "3.5.2" - resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" - integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== - -ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.4: - version "6.12.5" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.5.tgz#19b0e8bae8f476e5ba666300387775fb1a00a4da" - integrity sha512-lRF8RORchjpKG50/WFf8xmg7sgCLFiYNNnqdKflk63whMQcWR5ngGjiSXkL9bjxy6B2npOK2HSMN49jEBMSkag== - dependencies: - fast-deep-equal "^3.1.1" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.4.1" - uri-js "^4.2.2" - -ansi-escapes@^4.2.1: - version "4.3.1" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.1.tgz#a5c47cc43181f1f38ffd7076837700d395522a61" - integrity sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA== - dependencies: - type-fest "^0.11.0" - -ansi-regex@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" - integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== - -ansi-regex@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" - integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== - -ansi-styles@^3.2.0, ansi-styles@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" - integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== - dependencies: - color-convert "^1.9.0" - -ansi-styles@^4.1.0: - version "4.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.2.1.tgz#90ae75c424d008d2624c5bf29ead3177ebfcf359" - integrity sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA== - dependencies: - "@types/color-name" "^1.1.1" - color-convert "^2.0.1" - -anymatch@~3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.1.tgz#c55ecf02185e2469259399310c173ce31233b142" - integrity sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg== - dependencies: - normalize-path "^3.0.0" - picomatch "^2.0.4" - -arg@^4.1.0: - version "4.1.3" - resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" - integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== - -argparse@^1.0.7: - version "1.0.10" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" - integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== - dependencies: - sprintf-js "~1.0.2" - -arr-diff@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" - integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA= - -arr-flatten@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" - integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== - -arr-union@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" - integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= - -array-find-index@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1" - integrity sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E= - -array-unique@^0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" - integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= - -assign-symbols@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" - integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= - -astral-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" - integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg== - -atob@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" - integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== - -balanced-match@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" - integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= - -base@^0.11.1: - version "0.11.2" - resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" - integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg== - dependencies: - cache-base "^1.0.1" - class-utils "^0.3.5" - component-emitter "^1.2.1" - define-property "^1.0.0" - isobject "^3.0.1" - mixin-deep "^1.2.0" - pascalcase "^0.1.1" - -big.js@^5.2.2: - version "5.2.2" - resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" - integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== - -binary-extensions@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.1.0.tgz#30fa40c9e7fe07dbc895678cd287024dea241dd9" - integrity sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ== - -brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" - integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== - dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" - -braces@^2.3.1: - version "2.3.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" - integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== - dependencies: - arr-flatten "^1.1.0" - array-unique "^0.3.2" - extend-shallow "^2.0.1" - fill-range "^4.0.0" - isobject "^3.0.1" - repeat-element "^1.1.2" - snapdragon "^0.8.1" - snapdragon-node "^2.0.1" - split-string "^3.0.2" - to-regex "^3.0.1" - -braces@~3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" - integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== - dependencies: - fill-range "^7.0.1" - -buffer-from@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" - integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== - -cache-base@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" - integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ== - dependencies: - collection-visit "^1.0.0" - component-emitter "^1.2.1" - get-value "^2.0.6" - has-value "^1.0.0" - isobject "^3.0.1" - set-value "^2.0.0" - to-object-path "^0.3.0" - union-value "^1.0.0" - unset-value "^1.0.0" - -call-me-maybe@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/call-me-maybe/-/call-me-maybe-1.0.1.tgz#26d208ea89e37b5cbde60250a15f031c16a4d66b" - integrity sha1-JtII6onje1y95gJQoV8DHBak1ms= - -callsites@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" - integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== - -camelcase-keys@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7" - integrity sha1-MIvur/3ygRkFHvodkyITyRuPkuc= - dependencies: - camelcase "^2.0.0" - map-obj "^1.0.0" - -camelcase@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f" - integrity sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8= - -chalk@^2.0.0, chalk@^2.1.0: - version "2.4.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" - integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== - dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" - -chalk@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a" - integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - -chardet@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" - integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== - -chokidar@^3.4.0: - version "3.4.2" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.4.2.tgz#38dc8e658dec3809741eb3ef7bb0a47fe424232d" - integrity sha512-IZHaDeBeI+sZJRX7lGcXsdzgvZqKv6sECqsbErJA4mHWfpRrD8B97kSFN4cQz6nGBGiuFia1MKR4d6c1o8Cv7A== - dependencies: - anymatch "~3.1.1" - braces "~3.0.2" - glob-parent "~5.1.0" - is-binary-path "~2.1.0" - is-glob "~4.0.1" - normalize-path "~3.0.0" - readdirp "~3.4.0" - optionalDependencies: - fsevents "~2.1.2" - -class-utils@^0.3.5: - version "0.3.6" - resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" - integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg== - dependencies: - arr-union "^3.1.0" - define-property "^0.2.5" - isobject "^3.0.0" - static-extend "^0.1.1" - -cli-cursor@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" - integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== - dependencies: - restore-cursor "^3.1.0" - -cli-width@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6" - integrity sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw== - -collection-visit@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" - integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA= - dependencies: - map-visit "^1.0.0" - object-visit "^1.0.0" - -color-convert@^1.9.0: - version "1.9.3" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" - integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== - dependencies: - color-name "1.1.3" - -color-convert@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" - integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== - dependencies: - color-name "~1.1.4" - -color-name@1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" - integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= - -color-name@~1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" - integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== - -component-emitter@^1.2.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" - integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== - -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= - -copy-descriptor@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" - integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= - -cross-spawn@^6.0.5: - version "6.0.5" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" - integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== - dependencies: - nice-try "^1.0.4" - path-key "^2.0.1" - semver "^5.5.0" - shebang-command "^1.2.0" - which "^1.2.9" - -currently-unhandled@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea" - integrity sha1-mI3zP+qxke95mmE2nddsF635V+o= - dependencies: - array-find-index "^1.0.1" - -dateformat@~1.0.4-1.2.3: - version "1.0.12" - resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-1.0.12.tgz#9f124b67594c937ff706932e4a642cca8dbbfee9" - integrity sha1-nxJLZ1lMk3/3BpMuSmQsyo27/uk= - dependencies: - get-stdin "^4.0.1" - meow "^3.3.0" - -debug@^2.2.0, debug@^2.3.3: - version "2.6.9" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" - integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== - dependencies: - ms "2.0.0" - -debug@^4.0.1, debug@^4.1.1: - version "4.2.0" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.2.0.tgz#7f150f93920e94c58f5574c2fd01a3110effe7f1" - integrity sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg== - dependencies: - ms "2.1.2" - -decamelize@^1.1.2: - version "1.2.0" - resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" - integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= - -decode-uri-component@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" - integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= - -deep-is@~0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" - integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= - -define-property@^0.2.5: - version "0.2.5" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" - integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY= - dependencies: - is-descriptor "^0.1.0" - -define-property@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" - integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY= - dependencies: - is-descriptor "^1.0.0" - -define-property@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" - integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ== - dependencies: - is-descriptor "^1.0.2" - isobject "^3.0.1" - -diff@^4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" - integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== - -doctrine@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" - integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== - dependencies: - esutils "^2.0.2" - -dynamic-dedupe@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/dynamic-dedupe/-/dynamic-dedupe-0.3.0.tgz#06e44c223f5e4e94d78ef9db23a6515ce2f962a1" - integrity sha1-BuRMIj9eTpTXjvnbI6ZRXOL5YqE= - dependencies: - xtend "^4.0.0" - -emoji-regex@^7.0.1: - version "7.0.3" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" - integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== - -emoji-regex@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" - integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== - -emojis-list@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78" - integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q== - -error-ex@^1.2.0: - version "1.3.2" - resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" - integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== - dependencies: - is-arrayish "^0.2.1" - -escape-string-regexp@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" - integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= - -eslint-scope@^5.0.0: - version "5.1.1" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" - integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== - dependencies: - esrecurse "^4.3.0" - estraverse "^4.1.1" - -eslint-utils@^1.4.3: - version "1.4.3" - resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.4.3.tgz#74fec7c54d0776b6f67e0251040b5806564e981f" - integrity sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q== - dependencies: - eslint-visitor-keys "^1.1.0" - -eslint-utils@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27" - integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg== - dependencies: - eslint-visitor-keys "^1.1.0" - -eslint-visitor-keys@^1.1.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" - integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== - -eslint@^6.8.0: - version "6.8.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-6.8.0.tgz#62262d6729739f9275723824302fb227c8c93ffb" - integrity sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig== - dependencies: - "@babel/code-frame" "^7.0.0" - ajv "^6.10.0" - chalk "^2.1.0" - cross-spawn "^6.0.5" - debug "^4.0.1" - doctrine "^3.0.0" - eslint-scope "^5.0.0" - eslint-utils "^1.4.3" - eslint-visitor-keys "^1.1.0" - espree "^6.1.2" - esquery "^1.0.1" - esutils "^2.0.2" - file-entry-cache "^5.0.1" - functional-red-black-tree "^1.0.1" - glob-parent "^5.0.0" - globals "^12.1.0" - ignore "^4.0.6" - import-fresh "^3.0.0" - imurmurhash "^0.1.4" - inquirer "^7.0.0" - is-glob "^4.0.0" - js-yaml "^3.13.1" - json-stable-stringify-without-jsonify "^1.0.1" - levn "^0.3.0" - lodash "^4.17.14" - minimatch "^3.0.4" - mkdirp "^0.5.1" - natural-compare "^1.4.0" - optionator "^0.8.3" - progress "^2.0.0" - regexpp "^2.0.1" - semver "^6.1.2" - strip-ansi "^5.2.0" - strip-json-comments "^3.0.1" - table "^5.2.3" - text-table "^0.2.0" - v8-compile-cache "^2.0.3" - -espree@^6.1.2: - version "6.2.1" - resolved "https://registry.yarnpkg.com/espree/-/espree-6.2.1.tgz#77fc72e1fd744a2052c20f38a5b575832e82734a" - integrity sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw== - dependencies: - acorn "^7.1.1" - acorn-jsx "^5.2.0" - eslint-visitor-keys "^1.1.0" - -esprima@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" - integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== - -esquery@^1.0.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.3.1.tgz#b78b5828aa8e214e29fb74c4d5b752e1c033da57" - integrity sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ== - dependencies: - estraverse "^5.1.0" - -esrecurse@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" - integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== - dependencies: - estraverse "^5.2.0" - -estraverse@^4.1.1: - version "4.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" - integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== - -estraverse@^5.1.0, estraverse@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.2.0.tgz#307df42547e6cc7324d3cf03c155d5cdb8c53880" - integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ== - -esutils@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" - integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== - -eventemitter3@^4.0.4: - version "4.0.7" - resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" - integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== - -expand-brackets@^2.1.4: - version "2.1.4" - resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" - integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI= - dependencies: - debug "^2.3.3" - define-property "^0.2.5" - extend-shallow "^2.0.1" - posix-character-classes "^0.1.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -exports-loader@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/exports-loader/-/exports-loader-1.1.0.tgz#26a16706e4cf533145de24c1419baf33b624fb5c" - integrity sha512-zGB2SujiAyO0Rwn4GQ17/HlT8cwmT8abcBeZpr2R3sItJ5sI5Y9BzNzus3H9tH1iWLAoJLi9N3TP54D2+j859Q== - dependencies: - loader-utils "^2.0.0" - schema-utils "^2.7.0" - source-map "^0.6.1" - -extend-shallow@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" - integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= - dependencies: - is-extendable "^0.1.0" - -extend-shallow@^3.0.0, extend-shallow@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" - integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg= - dependencies: - assign-symbols "^1.0.0" - is-extendable "^1.0.1" - -external-editor@^3.0.3: - version "3.1.0" - resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" - integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== - dependencies: - chardet "^0.7.0" - iconv-lite "^0.4.24" - tmp "^0.0.33" - -extglob@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" - integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw== - dependencies: - array-unique "^0.3.2" - define-property "^1.0.0" - expand-brackets "^2.1.4" - extend-shallow "^2.0.1" - fragment-cache "^0.2.1" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -fast-deep-equal@^3.1.1: - version "3.1.3" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" - integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== - -fast-glob@^2.2.6: - version "2.2.7" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-2.2.7.tgz#6953857c3afa475fff92ee6015d52da70a4cd39d" - integrity sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw== - dependencies: - "@mrmlnc/readdir-enhanced" "^2.2.1" - "@nodelib/fs.stat" "^1.1.2" - glob-parent "^3.1.0" - is-glob "^4.0.0" - merge2 "^1.2.3" - micromatch "^3.1.10" - -fast-json-stable-stringify@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" - integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== - -fast-levenshtein@~2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" - integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= - -figures@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" - integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== - dependencies: - escape-string-regexp "^1.0.5" - -file-entry-cache@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-5.0.1.tgz#ca0f6efa6dd3d561333fb14515065c2fafdf439c" - integrity sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g== - dependencies: - flat-cache "^2.0.1" - -fill-range@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" - integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc= - dependencies: - extend-shallow "^2.0.1" - is-number "^3.0.0" - repeat-string "^1.6.1" - to-regex-range "^2.1.0" - -fill-range@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" - integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== - dependencies: - to-regex-range "^5.0.1" - -find-up@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" - integrity sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8= - dependencies: - path-exists "^2.0.0" - pinkie-promise "^2.0.0" - -flat-cache@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-2.0.1.tgz#5d296d6f04bda44a4630a301413bdbc2ec085ec0" - integrity sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA== - dependencies: - flatted "^2.0.0" - rimraf "2.6.3" - write "1.0.3" - -flatted@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.2.tgz#4575b21e2bcee7434aa9be662f4b7b5f9c2b5138" - integrity sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA== - -for-in@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" - integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= - -fragment-cache@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" - integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk= - dependencies: - map-cache "^0.2.2" - -fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= - -fsevents@~2.1.2: - version "2.1.3" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.3.tgz#fb738703ae8d2f9fe900c33836ddebee8b97f23e" - integrity sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ== - -functional-red-black-tree@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" - integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= - -get-stdin@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe" - integrity sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4= - -get-value@^2.0.3, get-value@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" - integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= - -glob-parent@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" - integrity sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4= - dependencies: - is-glob "^3.1.0" - path-dirname "^1.0.0" - -glob-parent@^5.0.0, glob-parent@~5.1.0: - version "5.1.1" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.1.tgz#b6c1ef417c4e5663ea498f1c45afac6916bbc229" - integrity sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ== - dependencies: - is-glob "^4.0.1" - -glob-to-regexp@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz#8c5a1494d2066c570cc3bfe4496175acc4d502ab" - integrity sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs= - -glob@^7.1.3, glob@^7.1.6: - version "7.1.6" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" - integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.4" - once "^1.3.0" - path-is-absolute "^1.0.0" - -globals@^12.1.0: - version "12.4.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-12.4.0.tgz#a18813576a41b00a24a97e7f815918c2e19925f8" - integrity sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg== - dependencies: - type-fest "^0.8.1" - -graceful-fs@^4.1.2: - version "4.2.4" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" - integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== - -has-flag@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" - integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= - -has-flag@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" - integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== - -has-value@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" - integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8= - dependencies: - get-value "^2.0.3" - has-values "^0.1.4" - isobject "^2.0.0" - -has-value@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" - integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc= - dependencies: - get-value "^2.0.6" - has-values "^1.0.0" - isobject "^3.0.0" - -has-values@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" - integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E= - -has-values@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" - integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8= - dependencies: - is-number "^3.0.0" - kind-of "^4.0.0" - -hosted-git-info@^2.1.4: - version "2.8.8" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.8.tgz#7539bd4bc1e0e0a895815a2e0262420b12858488" - integrity sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg== - -iconv-lite@^0.4.24: - version "0.4.24" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" - integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== - dependencies: - safer-buffer ">= 2.1.2 < 3" - -ignore@^4.0.6: - version "4.0.6" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" - integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== - -import-fresh@^3.0.0: - version "3.2.1" - resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.2.1.tgz#633ff618506e793af5ac91bf48b72677e15cbe66" - integrity sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ== - dependencies: - parent-module "^1.0.0" - resolve-from "^4.0.0" - -imports-loader@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/imports-loader/-/imports-loader-1.1.0.tgz#1c3a388d0c5cd7f9eb08f3646d4aae3b70e57933" - integrity sha512-HcPM6rULdQ6EBLVq+5O+CF9xb7qiUjsRm6V28bTG/c3IU5sQkVZzUDwYY0r4jHvSAmVFdO9WA/vLAURR5WQSeQ== - dependencies: - loader-utils "^2.0.0" - schema-utils "^2.7.0" - source-map "^0.6.1" - strip-comments "^2.0.1" - -imurmurhash@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" - integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= - -indent-string@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80" - integrity sha1-ji1INIdCEhtKghi3oTfppSBJ3IA= - dependencies: - repeating "^2.0.0" - -inflight@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" - integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= - dependencies: - once "^1.3.0" - wrappy "1" - -inherits@2: - version "2.0.4" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" - integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== - -inherits@2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" - integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= - -inquirer@^7.0.0: - version "7.3.3" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-7.3.3.tgz#04d176b2af04afc157a83fd7c100e98ee0aad003" - integrity sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA== - dependencies: - ansi-escapes "^4.2.1" - chalk "^4.1.0" - cli-cursor "^3.1.0" - cli-width "^3.0.0" - external-editor "^3.0.3" - figures "^3.0.0" - lodash "^4.17.19" - mute-stream "0.0.8" - run-async "^2.4.0" - rxjs "^6.6.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - through "^2.3.6" - -is-accessor-descriptor@^0.1.6: - version "0.1.6" - resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" - integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY= - dependencies: - kind-of "^3.0.2" - -is-accessor-descriptor@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" - integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ== - dependencies: - kind-of "^6.0.0" - -is-arrayish@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" - integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= - -is-binary-path@~2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" - integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== - dependencies: - binary-extensions "^2.0.0" - -is-buffer@^1.1.5: - version "1.1.6" - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" - integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== - -is-data-descriptor@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" - integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y= - dependencies: - kind-of "^3.0.2" - -is-data-descriptor@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" - integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ== - dependencies: - kind-of "^6.0.0" - -is-descriptor@^0.1.0: - version "0.1.6" - resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" - integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg== - dependencies: - is-accessor-descriptor "^0.1.6" - is-data-descriptor "^0.1.4" - kind-of "^5.0.0" - -is-descriptor@^1.0.0, is-descriptor@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" - integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg== - dependencies: - is-accessor-descriptor "^1.0.0" - is-data-descriptor "^1.0.0" - kind-of "^6.0.2" - -is-extendable@^0.1.0, is-extendable@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" - integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= - -is-extendable@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" - integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA== - dependencies: - is-plain-object "^2.0.4" - -is-extglob@^2.1.0, is-extglob@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" - integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= - -is-finite@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.1.0.tgz#904135c77fb42c0641d6aa1bcdbc4daa8da082f3" - integrity sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w== - -is-fullwidth-code-point@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" - integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= - -is-fullwidth-code-point@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" - integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== - -is-glob@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" - integrity sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo= - dependencies: - is-extglob "^2.1.0" - -is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" - integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== - dependencies: - is-extglob "^2.1.1" - -is-number@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" - integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU= - dependencies: - kind-of "^3.0.2" - -is-number@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" - integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== - -is-plain-object@^2.0.3, is-plain-object@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" - integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== - dependencies: - isobject "^3.0.1" - -is-utf8@^0.2.0: - version "0.2.1" - resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" - integrity sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI= - -is-windows@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" - integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== - -isarray@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" - integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= - -isexe@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" - integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= - -isobject@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" - integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk= - dependencies: - isarray "1.0.0" - -isobject@^3.0.0, isobject@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" - integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= - -jasmine-core@~3.6.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/jasmine-core/-/jasmine-core-3.6.0.tgz#491f3bb23941799c353ceb7a45b38a950ebc5a20" - integrity sha512-8uQYa7zJN8hq9z+g8z1bqCfdC8eoDAeVnM5sfqs7KHv9/ifoJ500m018fpFc7RDaO6SWCLCXwo/wPSNcdYTgcw== - -jasmine@^3.5.0: - version "3.6.1" - resolved "https://registry.yarnpkg.com/jasmine/-/jasmine-3.6.1.tgz#a20456b309a669b547a3c24bb2120f16f70cfc65" - integrity sha512-Jqp8P6ZWkTVFGmJwBK46p+kJNrZCdqkQ4GL+PGuBXZwK1fM4ST9BizkYgIwCFqYYqnTizAy6+XG2Ej5dFrej9Q== - dependencies: - fast-glob "^2.2.6" - jasmine-core "~3.6.0" - -js-tokens@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" - integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== - -js-yaml@^3.13.1: - version "3.14.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.0.tgz#a7a34170f26a21bb162424d8adacb4113a69e482" - integrity sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A== - dependencies: - argparse "^1.0.7" - esprima "^4.0.0" - -json-schema-traverse@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" - integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== - -json-stable-stringify-without-jsonify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" - integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= - -json5@^2.1.2: - version "2.1.3" - resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.3.tgz#c9b0f7fa9233bfe5807fe66fcf3a5617ed597d43" - integrity sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA== - dependencies: - minimist "^1.2.5" - -kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: - version "3.2.2" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" - integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= - dependencies: - is-buffer "^1.1.5" - -kind-of@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" - integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc= - dependencies: - is-buffer "^1.1.5" - -kind-of@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" - integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== - -kind-of@^6.0.0, kind-of@^6.0.2: - version "6.0.3" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" - integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== - -levn@^0.3.0, levn@~0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" - integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= - dependencies: - prelude-ls "~1.1.2" - type-check "~0.3.2" - -load-json-file@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" - integrity sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA= - dependencies: - graceful-fs "^4.1.2" - parse-json "^2.2.0" - pify "^2.0.0" - pinkie-promise "^2.0.0" - strip-bom "^2.0.0" - -loader-utils@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-2.0.0.tgz#e4cace5b816d425a166b5f097e10cd12b36064b0" - integrity sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ== - dependencies: - big.js "^5.2.2" - emojis-list "^3.0.0" - json5 "^2.1.2" - -lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19: - version "4.17.20" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52" - integrity sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA== - -loud-rejection@^1.0.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f" - integrity sha1-W0b4AUft7leIcPCG0Eghz5mOVR8= - dependencies: - currently-unhandled "^0.4.1" - signal-exit "^3.0.0" - -make-error@^1.1.1: - version "1.3.6" - resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" - integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== - -map-cache@^0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" - integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= - -map-obj@^1.0.0, map-obj@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" - integrity sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0= - -map-visit@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" - integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48= - dependencies: - object-visit "^1.0.0" - -meow@^3.3.0: - version "3.7.0" - resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb" - integrity sha1-cstmi0JSKCkKu/qFaJJYcwioAfs= - dependencies: - camelcase-keys "^2.0.0" - decamelize "^1.1.2" - loud-rejection "^1.0.0" - map-obj "^1.0.1" - minimist "^1.1.3" - normalize-package-data "^2.3.4" - object-assign "^4.0.1" - read-pkg-up "^1.0.1" - redent "^1.0.0" - trim-newlines "^1.0.0" - -merge2@^1.2.3: - version "1.4.1" - resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" - integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== - -micromatch@^3.1.10: - version "3.1.10" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" - integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== - dependencies: - arr-diff "^4.0.0" - array-unique "^0.3.2" - braces "^2.3.1" - define-property "^2.0.2" - extend-shallow "^3.0.2" - extglob "^2.0.4" - fragment-cache "^0.2.1" - kind-of "^6.0.2" - nanomatch "^1.2.9" - object.pick "^1.3.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.2" - -mimic-fn@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" - integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== - -minimatch@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" - integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== - dependencies: - brace-expansion "^1.1.7" - -minimist@^1.1.3, minimist@^1.2.5: - version "1.2.5" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" - integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== - -mixin-deep@^1.2.0: - version "1.3.2" - resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566" - integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA== - dependencies: - for-in "^1.0.2" - is-extendable "^1.0.1" - -mkdirp@^0.5.1: - version "0.5.5" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" - integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== - dependencies: - minimist "^1.2.5" - -mkdirp@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" - integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== - -ms@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" - integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= - -ms@2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" - integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== - -mute-stream@0.0.8: - version "0.0.8" - resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" - integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== - -nanomatch@^1.2.9: - version "1.2.13" - resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" - integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA== - dependencies: - arr-diff "^4.0.0" - array-unique "^0.3.2" - define-property "^2.0.2" - extend-shallow "^3.0.2" - fragment-cache "^0.2.1" - is-windows "^1.0.2" - kind-of "^6.0.2" - object.pick "^1.3.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -natural-compare@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" - integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= - -nice-try@^1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" - integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== - -normalize-package-data@^2.3.2, normalize-package-data@^2.3.4: - version "2.5.0" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" - integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== - dependencies: - hosted-git-info "^2.1.4" - resolve "^1.10.0" - semver "2 || 3 || 4 || 5" - validate-npm-package-license "^3.0.1" - -normalize-path@^3.0.0, normalize-path@~3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" - integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== - -object-assign@^4.0.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" - integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= - -object-copy@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" - integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw= - dependencies: - copy-descriptor "^0.1.0" - define-property "^0.2.5" - kind-of "^3.0.3" - -object-visit@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" - integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs= - dependencies: - isobject "^3.0.0" - -object.pick@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" - integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c= - dependencies: - isobject "^3.0.1" - -once@^1.3.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= - dependencies: - wrappy "1" - -onetime@^5.1.0: - version "5.1.2" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" - integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== - dependencies: - mimic-fn "^2.1.0" - -optionator@^0.8.3: - version "0.8.3" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" - integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== - dependencies: - deep-is "~0.1.3" - fast-levenshtein "~2.0.6" - levn "~0.3.0" - prelude-ls "~1.1.2" - type-check "~0.3.2" - word-wrap "~1.2.3" - -os-tmpdir@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" - integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= - -parent-module@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" - integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== - dependencies: - callsites "^3.0.0" - -parse-json@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" - integrity sha1-9ID0BDTvgHQfhGkJn43qGPVaTck= - dependencies: - error-ex "^1.2.0" - -pascalcase@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" - integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= - -path-dirname@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" - integrity sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA= - -path-exists@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" - integrity sha1-D+tsZPD8UY2adU3V77YscCJ2H0s= - dependencies: - pinkie-promise "^2.0.0" - -path-is-absolute@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" - integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= - -path-key@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" - integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= - -path-parse@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" - integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== - -path-type@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" - integrity sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE= - dependencies: - graceful-fs "^4.1.2" - pify "^2.0.0" - pinkie-promise "^2.0.0" - -path@^0.12.7: - version "0.12.7" - resolved "https://registry.yarnpkg.com/path/-/path-0.12.7.tgz#d4dc2a506c4ce2197eb481ebfcd5b36c0140b10f" - integrity sha1-1NwqUGxM4hl+tIHr/NWzbAFAsQ8= - dependencies: - process "^0.11.1" - util "^0.10.3" - -phaser@^3.24.1: - version "3.24.1" - resolved "https://registry.yarnpkg.com/phaser/-/phaser-3.24.1.tgz#376e0c965d2a35af37c06ee78627dafbde5be017" - integrity sha512-WbrRMkbpEzarkfrq83akeauc6b8xNxsOTpDygyW7wrU2G2ne6kOYu3hji4UAaGnZaOLrVuj8ycYPjX9P1LxcDw== - dependencies: - eventemitter3 "^4.0.4" - exports-loader "^1.1.0" - imports-loader "^1.1.0" - path "^0.12.7" - -picomatch@^2.0.4, picomatch@^2.2.1: - version "2.2.2" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" - integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== - -pify@^2.0.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" - integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= - -pinkie-promise@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" - integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o= - dependencies: - pinkie "^2.0.0" - -pinkie@^2.0.0: - version "2.0.4" - resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" - integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA= - -posix-character-classes@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" - integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= - -prelude-ls@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" - integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= - -process@^0.11.1: - version "0.11.10" - resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" - integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI= - -progress@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" - integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== - -punycode@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" - integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== - -read-pkg-up@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" - integrity sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI= - dependencies: - find-up "^1.0.0" - read-pkg "^1.0.0" - -read-pkg@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" - integrity sha1-9f+qXs0pyzHAR0vKfXVra7KePyg= - dependencies: - load-json-file "^1.0.0" - normalize-package-data "^2.3.2" - path-type "^1.0.0" - -readdirp@~3.4.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.4.0.tgz#9fdccdf9e9155805449221ac645e8303ab5b9ada" - integrity sha512-0xe001vZBnJEK+uKcj8qOhyAKPzIT+gStxWr3LCB0DwcXR5NZJ3IaC+yGnHCYzB/S7ov3m3EEbZI2zeNvX+hGQ== - dependencies: - picomatch "^2.2.1" - -redent@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde" - integrity sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94= - dependencies: - indent-string "^2.1.0" - strip-indent "^1.0.1" - -regex-not@^1.0.0, regex-not@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" - integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A== - dependencies: - extend-shallow "^3.0.2" - safe-regex "^1.1.0" - -regexpp@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-2.0.1.tgz#8d19d31cf632482b589049f8281f93dbcba4d07f" - integrity sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw== - -regexpp@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.1.0.tgz#206d0ad0a5648cffbdb8ae46438f3dc51c9f78e2" - integrity sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q== - -repeat-element@^1.1.2: - version "1.1.3" - resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce" - integrity sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g== - -repeat-string@^1.6.1: - version "1.6.1" - resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" - integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= - -repeating@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" - integrity sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo= - dependencies: - is-finite "^1.0.0" - -resolve-from@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" - integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== - -resolve-url@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" - integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= - -resolve@^1.0.0, resolve@^1.10.0: - version "1.17.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.17.0.tgz#b25941b54968231cc2d1bb76a79cb7f2c0bf8444" - integrity sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w== - dependencies: - path-parse "^1.0.6" - -restore-cursor@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" - integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== - dependencies: - onetime "^5.1.0" - signal-exit "^3.0.2" - -ret@~0.1.10: - version "0.1.15" - resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" - integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== - -rimraf@2.6.3: - version "2.6.3" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" - integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== - dependencies: - glob "^7.1.3" - -rimraf@^2.6.1: - version "2.7.1" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" - integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== - dependencies: - glob "^7.1.3" - -run-async@^2.4.0: - version "2.4.1" - resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" - integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== - -rxjs@^6.6.0: - version "6.6.3" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.3.tgz#8ca84635c4daa900c0d3967a6ee7ac60271ee552" - integrity sha512-trsQc+xYYXZ3urjOiJOuCOa5N3jAZ3eiSpQB5hIT8zGlL2QfnHLJ2r7GMkBGuIausdJN1OneaI6gQlsqNHHmZQ== - dependencies: - tslib "^1.9.0" - -safe-regex@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" - integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4= - dependencies: - ret "~0.1.10" - -"safer-buffer@>= 2.1.2 < 3": - version "2.1.2" - resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" - integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== - -schema-utils@^2.7.0: - version "2.7.1" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.7.1.tgz#1ca4f32d1b24c590c203b8e7a50bf0ea4cd394d7" - integrity sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg== - dependencies: - "@types/json-schema" "^7.0.5" - ajv "^6.12.4" - ajv-keywords "^3.5.2" - -"semver@2 || 3 || 4 || 5", semver@^5.5.0: - version "5.7.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" - integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== - -semver@^6.1.2: - version "6.3.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" - integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== - -semver@^7.3.2: - version "7.3.2" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938" - integrity sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ== - -set-value@^2.0.0, set-value@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b" - integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw== - dependencies: - extend-shallow "^2.0.1" - is-extendable "^0.1.1" - is-plain-object "^2.0.3" - split-string "^3.0.1" - -shebang-command@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" - integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= - dependencies: - shebang-regex "^1.0.0" - -shebang-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" - integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= - -signal-exit@^3.0.0, signal-exit@^3.0.2: - version "3.0.3" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" - integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== - -slice-ansi@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636" - integrity sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ== - dependencies: - ansi-styles "^3.2.0" - astral-regex "^1.0.0" - is-fullwidth-code-point "^2.0.0" - -snapdragon-node@^2.0.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" - integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw== - dependencies: - define-property "^1.0.0" - isobject "^3.0.0" - snapdragon-util "^3.0.1" - -snapdragon-util@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" - integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ== - dependencies: - kind-of "^3.2.0" - -snapdragon@^0.8.1: - version "0.8.2" - resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" - integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg== - dependencies: - base "^0.11.1" - debug "^2.2.0" - define-property "^0.2.5" - extend-shallow "^2.0.1" - map-cache "^0.2.2" - source-map "^0.5.6" - source-map-resolve "^0.5.0" - use "^3.1.0" - -source-map-resolve@^0.5.0: - version "0.5.3" - resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a" - integrity sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw== - dependencies: - atob "^2.1.2" - decode-uri-component "^0.2.0" - resolve-url "^0.2.1" - source-map-url "^0.4.0" - urix "^0.1.0" - -source-map-support@^0.5.12, source-map-support@^0.5.17: - version "0.5.19" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61" - integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw== - dependencies: - buffer-from "^1.0.0" - source-map "^0.6.0" - -source-map-url@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" - integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM= - -source-map@^0.5.6: - version "0.5.7" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" - integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= - -source-map@^0.6.0, source-map@^0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" - integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== - -spdx-correct@^3.0.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9" - integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w== - dependencies: - spdx-expression-parse "^3.0.0" - spdx-license-ids "^3.0.0" - -spdx-exceptions@^2.1.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" - integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== - -spdx-expression-parse@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" - integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== - dependencies: - spdx-exceptions "^2.1.0" - spdx-license-ids "^3.0.0" - -spdx-license-ids@^3.0.0: - version "3.0.6" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.6.tgz#c80757383c28abf7296744998cbc106ae8b854ce" - integrity sha512-+orQK83kyMva3WyPf59k1+Y525csj5JejicWut55zeTWANuN17qSiSLUXWtzHeNWORSvT7GLDJ/E/XiIWoXBTw== - -split-string@^3.0.1, split-string@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" - integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw== - dependencies: - extend-shallow "^3.0.0" - -sprintf-js@~1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" - integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= - -static-extend@^0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" - integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY= - dependencies: - define-property "^0.2.5" - object-copy "^0.1.0" - -string-width@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" - integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== - dependencies: - emoji-regex "^7.0.1" - is-fullwidth-code-point "^2.0.0" - strip-ansi "^5.1.0" - -string-width@^4.1.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.0.tgz#952182c46cc7b2c313d1596e623992bd163b72b5" - integrity sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.0" - -strip-ansi@^5.1.0, strip-ansi@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" - integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== - dependencies: - ansi-regex "^4.1.0" - -strip-ansi@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" - integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== - dependencies: - ansi-regex "^5.0.0" - -strip-bom@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" - integrity sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4= - dependencies: - is-utf8 "^0.2.0" - -strip-bom@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" - integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= - -strip-comments@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/strip-comments/-/strip-comments-2.0.1.tgz#4ad11c3fbcac177a67a40ac224ca339ca1c1ba9b" - integrity sha512-ZprKx+bBLXv067WTCALv8SSz5l2+XhpYCsVtSqlMnkAXMWDq+/ekVbl1ghqP9rUHTzv6sm/DwCOiYutU/yp1fw== - -strip-indent@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2" - integrity sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI= - dependencies: - get-stdin "^4.0.1" - -strip-json-comments@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" - integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= - -strip-json-comments@^3.0.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" - integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== - -supports-color@^5.3.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" - integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== - dependencies: - has-flag "^3.0.0" - -supports-color@^7.1.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" - integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== - dependencies: - has-flag "^4.0.0" - -table@^5.2.3: - version "5.4.6" - resolved "https://registry.yarnpkg.com/table/-/table-5.4.6.tgz#1292d19500ce3f86053b05f0e8e7e4a3bb21079e" - integrity sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug== - dependencies: - ajv "^6.10.2" - lodash "^4.17.14" - slice-ansi "^2.1.0" - string-width "^3.0.0" - -text-table@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" - integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= - -through@^2.3.6: - version "2.3.8" - resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" - integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= - -tmp@^0.0.33: - version "0.0.33" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" - integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== - dependencies: - os-tmpdir "~1.0.2" - -to-object-path@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" - integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68= - dependencies: - kind-of "^3.0.2" - -to-regex-range@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" - integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg= - dependencies: - is-number "^3.0.0" - repeat-string "^1.6.1" - -to-regex-range@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" - integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== - dependencies: - is-number "^7.0.0" - -to-regex@^3.0.1, to-regex@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" - integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw== - dependencies: - define-property "^2.0.2" - extend-shallow "^3.0.2" - regex-not "^1.0.2" - safe-regex "^1.1.0" - -tree-kill@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/tree-kill/-/tree-kill-1.2.2.tgz#4ca09a9092c88b73a7cdc5e8a01b507b0790a0cc" - integrity sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A== - -trim-newlines@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613" - integrity sha1-WIeWa7WCpFA6QetST301ARgVphM= - -ts-node-dev@^1.0.0-pre.44: - version "1.0.0-pre.62" - resolved "https://registry.yarnpkg.com/ts-node-dev/-/ts-node-dev-1.0.0-pre.62.tgz#835644c43669b659a880379b9d06df86cef665ad" - integrity sha512-hfsEuCqUZOVnZ86l7A3icxD1nFt1HEmLVbx4YOHCkrbSHPBNWcw+IczAPZo3zz7YiOm9vs0xG6OENNrkgm89tQ== - dependencies: - chokidar "^3.4.0" - dateformat "~1.0.4-1.2.3" - dynamic-dedupe "^0.3.0" - minimist "^1.2.5" - mkdirp "^1.0.4" - resolve "^1.0.0" - rimraf "^2.6.1" - source-map-support "^0.5.12" - tree-kill "^1.2.2" - ts-node "^8.10.2" - tsconfig "^7.0.0" - -ts-node@^8.10.2: - version "8.10.2" - resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-8.10.2.tgz#eee03764633b1234ddd37f8db9ec10b75ec7fb8d" - integrity sha512-ISJJGgkIpDdBhWVu3jufsWpK3Rzo7bdiIXJjQc0ynKxVOVcg2oIrf2H2cejminGrptVc6q6/uynAHNCuWGbpVA== - dependencies: - arg "^4.1.0" - diff "^4.0.1" - make-error "^1.1.1" - source-map-support "^0.5.17" - yn "3.1.1" - -tsconfig@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/tsconfig/-/tsconfig-7.0.0.tgz#84538875a4dc216e5c4a5432b3a4dec3d54e91b7" - integrity sha512-vZXmzPrL+EmC4T/4rVlT2jNVMWCi/O4DIiSj3UHg1OE5kCKbk4mfrXc6dZksLgRM/TZlKnousKH9bbTazUWRRw== - dependencies: - "@types/strip-bom" "^3.0.0" - "@types/strip-json-comments" "0.0.30" - strip-bom "^3.0.0" - strip-json-comments "^2.0.0" - -tslib@^1.8.1, tslib@^1.9.0: - version "1.13.0" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.13.0.tgz#c881e13cc7015894ed914862d276436fa9a47043" - integrity sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q== - -tsutils@^3.17.1: - version "3.17.1" - resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.17.1.tgz#ed719917f11ca0dee586272b2ac49e015a2dd759" - integrity sha512-kzeQ5B8H3w60nFY2g8cJIuH7JDpsALXySGtwGJ0p2LSjLgay3NdIpqq5SoOBe46bKDW2iq25irHCr8wjomUS2g== - dependencies: - tslib "^1.8.1" - -type-check@~0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" - integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I= - dependencies: - prelude-ls "~1.1.2" - -type-fest@^0.11.0: - version "0.11.0" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.11.0.tgz#97abf0872310fed88a5c466b25681576145e33f1" - integrity sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ== - -type-fest@^0.8.1: - version "0.8.1" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" - integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== - -typescript@^3.8.3: - version "3.9.7" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.9.7.tgz#98d600a5ebdc38f40cb277522f12dc800e9e25fa" - integrity sha512-BLbiRkiBzAwsjut4x/dsibSTB6yWpwT5qWmC2OfuCg3GgVQCSgMs4vEctYPhsaGtd0AeuuHMkjZ2h2WG8MSzRw== - -union-value@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" - integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg== - dependencies: - arr-union "^3.1.0" - get-value "^2.0.6" - is-extendable "^0.1.1" - set-value "^2.0.1" - -unset-value@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" - integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk= - dependencies: - has-value "^0.3.1" - isobject "^3.0.0" - -uri-js@^4.2.2: - version "4.4.0" - resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.0.tgz#aa714261de793e8a82347a7bcc9ce74e86f28602" - integrity sha512-B0yRTzYdUCCn9n+F4+Gh4yIDtMQcaJsmYBDsTSG8g/OejKBodLQ2IHfN3bM7jUsRXndopT7OIXWdYqc1fjmV6g== - dependencies: - punycode "^2.1.0" - -urix@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" - integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= - -use@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" - integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== - -util@^0.10.3: - version "0.10.4" - resolved "https://registry.yarnpkg.com/util/-/util-0.10.4.tgz#3aa0125bfe668a4672de58857d3ace27ecb76901" - integrity sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A== - dependencies: - inherits "2.0.3" - -v8-compile-cache@^2.0.3: - version "2.1.1" - resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.1.1.tgz#54bc3cdd43317bca91e35dcaf305b1a7237de745" - integrity sha512-8OQ9CL+VWyt3JStj7HX7/ciTL2V3Rl1Wf5OL+SNTm0yK1KvtReVulksyeRnCANHHuUxHlQig+JJDlUhBt1NQDQ== - -validate-npm-package-license@^3.0.1: - version "3.0.4" - resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" - integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== - dependencies: - spdx-correct "^3.0.0" - spdx-expression-parse "^3.0.0" - -which@^1.2.9: - version "1.3.1" - resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" - integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== - dependencies: - isexe "^2.0.0" - -word-wrap@~1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" - integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== - -wrappy@1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= - -write@1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/write/-/write-1.0.3.tgz#0800e14523b923a387e415123c865616aae0f5c3" - integrity sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig== - dependencies: - mkdirp "^0.5.1" - -xtend@^4.0.0: - version "4.0.2" - resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" - integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== - -yn@3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" - integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== From 3cb079c80c3f88bf0c503a5b2e41779698930235 Mon Sep 17 00:00:00 2001 From: Gregoire Parant Date: Wed, 23 Sep 2020 18:37:54 +0200 Subject: [PATCH 174/313] Fix CI --- front/package.json | 1 + .../ConsoleGlobalMessageManager.ts | 2 +- front/yarn.lock | 46 +++++++++++++++++++ 3 files changed, 48 insertions(+), 1 deletion(-) diff --git a/front/package.json b/front/package.json index a9c7b3f8..dd620e40 100644 --- a/front/package.json +++ b/front/package.json @@ -25,6 +25,7 @@ "generic-type-guard": "^3.2.0", "phaser": "^3.22.0", "queue-typescript": "^1.0.1", + "quill": "1.3.6", "simple-peer": "^9.6.2", "socket.io-client": "^2.3.0", "webpack-require-http": "^0.4.3" diff --git a/front/src/Administration/ConsoleGlobalMessageManager.ts b/front/src/Administration/ConsoleGlobalMessageManager.ts index 582427af..69f4a3ad 100644 --- a/front/src/Administration/ConsoleGlobalMessageManager.ts +++ b/front/src/Administration/ConsoleGlobalMessageManager.ts @@ -145,7 +145,7 @@ export class ConsoleGlobalMessageManager { // remove formatting button ]; - let quill = new Quill(`#${INPUT_CONSOLE_MESSAGE}`, { + new Quill(`#${INPUT_CONSOLE_MESSAGE}`, { theme: 'snow', modules: { toolbar: toolbarOptions diff --git a/front/yarn.lock b/front/yarn.lock index 2e7007e1..8b5510c5 100644 --- a/front/yarn.lock +++ b/front/yarn.lock @@ -1009,6 +1009,11 @@ cliui@^5.0.0: strip-ansi "^5.2.0" wrap-ansi "^5.1.0" +clone@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f" + integrity sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18= + collection-visit@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" @@ -1760,6 +1765,11 @@ etag@~1.8.1: resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= +eventemitter3@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-2.0.3.tgz#b5e1079b59fb5e1ba2771c0a993be060a58c99ba" + integrity sha1-teEHm1n7XhuidxwKmTvgYKWMmbo= + eventemitter3@^4.0.0, eventemitter3@^4.0.4: version "4.0.4" resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.4.tgz#b5463ace635a083d018bdc7c917b4c5f10a85384" @@ -1878,6 +1888,11 @@ extend-shallow@^3.0.0, extend-shallow@^3.0.2: assign-symbols "^1.0.0" is-extendable "^1.0.1" +extend@^3.0.1, extend@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" + integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== + external-editor@^3.0.3: version "3.1.0" resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" @@ -1906,6 +1921,11 @@ fast-deep-equal@^3.1.1: resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== +fast-diff@1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.1.2.tgz#4b62c42b8e03de3f848460b639079920695d0154" + integrity sha512-KaJUt+M9t1qaIteSvjc6P3RbMdXsNhK61GRftR6SNxqmhthcd9MGIi4T+o0jD8LUSpSnSKXE20nLtJ3fOHxQig== + fast-glob@^2.2.6: version "2.2.7" resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-2.2.7.tgz#6953857c3afa475fff92ee6015d52da70a4cd39d" @@ -3529,6 +3549,11 @@ param-case@^3.0.3: dot-case "^3.0.3" tslib "^1.10.0" +parchment@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/parchment/-/parchment-1.1.4.tgz#aeded7ab938fe921d4c34bc339ce1168bc2ffde5" + integrity sha512-J5FBQt/pM2inLzg4hEWmzQx/8h8D0CiDxaG3vyp9rKrQRSDgBlhjdP5jQGgosEajXPSQouXGHOmVdgo7QmJuOg== + parent-module@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" @@ -3827,6 +3852,27 @@ queue-typescript@^1.0.1: dependencies: linked-list-typescript "^1.0.11" +quill-delta@^3.6.2: + version "3.6.3" + resolved "https://registry.yarnpkg.com/quill-delta/-/quill-delta-3.6.3.tgz#b19fd2b89412301c60e1ff213d8d860eac0f1032" + integrity sha512-wdIGBlcX13tCHOXGMVnnTVFtGRLoP0imqxM696fIPwIf5ODIYUHIvHbZcyvGlZFiFhK5XzDC2lpjbxRhnM05Tg== + dependencies: + deep-equal "^1.0.1" + extend "^3.0.2" + fast-diff "1.1.2" + +quill@1.3.6: + version "1.3.6" + resolved "https://registry.yarnpkg.com/quill/-/quill-1.3.6.tgz#99f4de1fee85925a0d7d4163b6d8328f23317a4d" + integrity sha512-K0mvhimWZN6s+9OQ249CH2IEPZ9JmkFuCQeHAOQax3EZ2nDJ3wfGh59mnlQaZV2i7u8eFarx6wAtvQKgShojug== + dependencies: + clone "^2.1.1" + deep-equal "^1.0.1" + eventemitter3 "^2.0.3" + extend "^3.0.1" + parchment "^1.1.4" + quill-delta "^3.6.2" + randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.3, randombytes@^2.0.5, randombytes@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" From 7584c3a04df4a828360b9545e3133307f3484e84 Mon Sep 17 00:00:00 2001 From: Gregoire Parant Date: Wed, 23 Sep 2020 18:44:24 +0200 Subject: [PATCH 175/313] Fix CI --- .../ConsoleGlobalMessageManager.ts | 26 ++++++++++++------- .../Administration/GlobalMessageManager.ts | 2 +- front/src/Connection.ts | 2 +- 3 files changed, 18 insertions(+), 12 deletions(-) diff --git a/front/src/Administration/ConsoleGlobalMessageManager.ts b/front/src/Administration/ConsoleGlobalMessageManager.ts index 69f4a3ad..7de1af40 100644 --- a/front/src/Administration/ConsoleGlobalMessageManager.ts +++ b/front/src/Administration/ConsoleGlobalMessageManager.ts @@ -35,7 +35,9 @@ export class ConsoleGlobalMessageManager { initialise() { try { HtmlUtils.removeElementByIdOrFail(CLASS_CONSOLE_MESSAGE); - }catch (err){} + }catch (err){ + console.error(err); + } const typeConsole = document.createElement('input'); typeConsole.id = INPUT_TYPE_CONSOLE; @@ -169,11 +171,11 @@ export class ConsoleGlobalMessageManager { const input = document.createElement('input'); input.type = 'file'; input.id = UPLOAD_CONSOLE_MESSAGE - input.addEventListener('input', (e: any) => { + input.addEventListener('input', (e: Event) => { if(!e.target || !e.target.files || e.target.files.length === 0){ return; } - let file : File = e.target.files[0]; + const file : File = e.target.files[0]; if(!file){ return; @@ -181,7 +183,9 @@ export class ConsoleGlobalMessageManager { try { HtmlUtils.removeElementByIdOrFail('audi-message-filename'); - }catch (e) {} + }catch (err) { + console.error(err) + } const p = document.createElement('p'); p.id = 'audi-message-filename'; @@ -223,12 +227,12 @@ export class ConsoleGlobalMessageManager { } private sendTextMessage(){ - let elements = document.getElementsByClassName('ql-editor'); - let quillEditor = elements.item(0); + const elements = document.getElementsByClassName('ql-editor'); + const quillEditor = elements.item(0); if(!quillEditor){ throw "Error get quill node"; } - let GlobalMessage : GlobalMessageInterface = { + const GlobalMessage : GlobalMessageInterface = { id: 1, message: quillEditor.innerHTML, type: MESSAGE_TYPE @@ -246,9 +250,9 @@ export class ConsoleGlobalMessageManager { const fd = new FormData(); fd.append('file', selectedFile); - let res = await this.Connection.uploadAudio(fd); + const res = await this.Connection.uploadAudio(fd); - let GlobalMessage : GlobalMessageInterface = { + const GlobalMessage : GlobalMessageInterface = { id: res.id, message: res.path, type: AUDIO_TYPE @@ -256,7 +260,9 @@ export class ConsoleGlobalMessageManager { inputAudio.value = ''; try { HtmlUtils.removeElementByIdOrFail('audi-message-filename'); - }catch (e) {} + }catch (err) { + console.error(err); + } this.Connection.emitGlobalMessage(GlobalMessage); } diff --git a/front/src/Administration/GlobalMessageManager.ts b/front/src/Administration/GlobalMessageManager.ts index e2850bff..0b75d4be 100644 --- a/front/src/Administration/GlobalMessageManager.ts +++ b/front/src/Administration/GlobalMessageManager.ts @@ -25,7 +25,7 @@ export class GlobalMessageManager { } private playMessage(message : GlobalMessageInterface){ - let previousMessage = document.getElementById(this.getHtmlMessageId(message.id)); + const previousMessage = document.getElementById(this.getHtmlMessageId(message.id)); if(previousMessage){ previousMessage.remove(); } diff --git a/front/src/Connection.ts b/front/src/Connection.ts index 66a133f3..dd8540bf 100644 --- a/front/src/Connection.ts +++ b/front/src/Connection.ts @@ -200,7 +200,7 @@ export class Connection implements Connection { } public uploadAudio(file : FormData){ - return Axios.post(`${API_URL}/upload-audio-message`, file).then((res: any) => { + return Axios.post(`${API_URL}/upload-audio-message`, file).then((res: {data:{}}) => { return res.data; }).catch((err) => { console.error(err); From 7f4014cccfb99603612eaa4a967d5558436226e3 Mon Sep 17 00:00:00 2001 From: Gregoire Parant Date: Wed, 23 Sep 2020 19:07:45 +0200 Subject: [PATCH 176/313] Fix CI --- .../ConsoleGlobalMessageManager.ts | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/front/src/Administration/ConsoleGlobalMessageManager.ts b/front/src/Administration/ConsoleGlobalMessageManager.ts index 7de1af40..84a73a71 100644 --- a/front/src/Administration/ConsoleGlobalMessageManager.ts +++ b/front/src/Administration/ConsoleGlobalMessageManager.ts @@ -15,6 +15,10 @@ export const INPUT_TYPE_CONSOLE = 'input-type'; export const AUDIO_TYPE = 'audio'; export const MESSAGE_TYPE = 'message'; +interface EventTargetFiles extends EventTarget { + files: Array; +} + export class ConsoleGlobalMessageManager { private Connection: Connection; @@ -172,10 +176,14 @@ export class ConsoleGlobalMessageManager { input.type = 'file'; input.id = UPLOAD_CONSOLE_MESSAGE input.addEventListener('input', (e: Event) => { - if(!e.target || !e.target.files || e.target.files.length === 0){ + if(!e.target){ return; } - const file : File = e.target.files[0]; + const eventTarget : EventTargetFiles = (e.target as EventTargetFiles); + if(!eventTarget || !eventTarget.files || eventTarget.files.length === 0){ + return; + } + const file : File = eventTarget.files[0]; if(!file){ return; @@ -253,8 +261,8 @@ export class ConsoleGlobalMessageManager { const res = await this.Connection.uploadAudio(fd); const GlobalMessage : GlobalMessageInterface = { - id: res.id, - message: res.path, + id: (res as {id: number}).id, + message: (res as {path: string}).path, type: AUDIO_TYPE }; inputAudio.value = ''; From b4f971c50115c180edbecf86742b73ab5e9be0bc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20N=C3=A9grier?= Date: Thu, 24 Sep 2020 10:05:16 +0200 Subject: [PATCH 177/313] Switched group position to protobuf --- back/src/Controller/IoSocketController.ts | 27 +++++++++++++++++------ back/src/Model/World.ts | 2 +- front/src/Connection.ts | 27 ++++++++++++----------- messages/messages.proto | 2 ++ messages/package.json | 2 +- 5 files changed, 38 insertions(+), 22 deletions(-) diff --git a/back/src/Controller/IoSocketController.ts b/back/src/Controller/IoSocketController.ts index 4a1c9240..bf1452ac 100644 --- a/back/src/Controller/IoSocketController.ts +++ b/back/src/Controller/IoSocketController.ts @@ -27,7 +27,7 @@ import { SetPlayerDetailsMessage, SubMessage, UserMovedMessage, - BatchMessage, GroupUpdateMessage, PointMessage + BatchMessage, GroupUpdateMessage, PointMessage, GroupDeleteMessage } from "../../../messages/generated/messages_pb"; import {UserMovesMessage} from "../../../messages/generated/messages_pb"; import Direction = PositionMessage.Direction; @@ -573,7 +573,7 @@ export class IoSocketController { clientListener.emit(SocketIoEvent.USER_LEFT, clientUser.userId); //console.log("Sending USER_LEFT event"); } else if (thing instanceof Group) { - clientListener.emit(SocketIoEvent.GROUP_DELETE, thing.getId()); + this.emitDeleteGroupEvent(clientListener, thing.getId()); } else { console.error('Unexpected type for Movable.'); } @@ -584,10 +584,7 @@ export class IoSocketController { // Dispatch groups position to newly connected user world.getGroups().forEach((group: Group) => { - Client.emit(SocketIoEvent.GROUP_CREATE_UPDATE, { - position: group.getPosition(), - groupId: group.getId() - } as GroupUpdateInterface); + this.emitCreateUpdateGroupEvent(Client, group); }); //join world world.join(Client, Client.position); @@ -603,7 +600,23 @@ export class IoSocketController { groupUpdateMessage.setGroupid(group.getId()); groupUpdateMessage.setPosition(pointMessage); - socket.emit(SocketIoEvent.GROUP_CREATE_UPDATE, groupUpdateMessage.serializeBinary().buffer); + const subMessage = new SubMessage(); + subMessage.setGroupupdatemessage(groupUpdateMessage); + + const client : ExSocketInterface = socket as ExSocketInterface; + emitInBatch(client, SocketIoEvent.GROUP_CREATE_UPDATE, subMessage); + //socket.emit(SocketIoEvent.GROUP_CREATE_UPDATE, groupUpdateMessage.serializeBinary().buffer); + } + + private emitDeleteGroupEvent(socket: Socket, groupId: number): void { + const groupDeleteMessage = new GroupDeleteMessage(); + groupDeleteMessage.setGroupid(groupId); + + const subMessage = new SubMessage(); + subMessage.setGroupdeletemessage(groupDeleteMessage); + + const client : ExSocketInterface = socket as ExSocketInterface; + emitInBatch(client, SocketIoEvent.GROUP_DELETE, subMessage); } /** diff --git a/back/src/Model/World.ts b/back/src/Model/World.ts index 452c6c17..321b3e1b 100644 --- a/back/src/Model/World.ts +++ b/back/src/Model/World.ts @@ -90,9 +90,9 @@ export class World { this.positionNotifier.updatePosition(user, userPosition, user.position); const oldGroupPosition = user.group?.getPosition(); - user.group?.updatePosition(); user.position = userPosition; + user.group?.updatePosition(); if (user.silent) { return; diff --git a/front/src/Connection.ts b/front/src/Connection.ts index 02752c10..459e58c1 100644 --- a/front/src/Connection.ts +++ b/front/src/Connection.ts @@ -2,7 +2,7 @@ import Axios from "axios"; import {API_URL} from "./Enum/EnvironmentVariable"; import {MessageUI} from "./Logger/MessageUI"; import { - BatchMessage, GroupUpdateMessage, + BatchMessage, GroupDeleteMessage, GroupUpdateMessage, PositionMessage, SetPlayerDetailsMessage, UserMovedMessage, UserMovesMessage, @@ -160,6 +160,12 @@ export class Connection implements Connection { if (message.hasUsermovedmessage()) { event = EventMessage.USER_MOVED; payload = message.getUsermovedmessage(); + } else if (message.hasGroupupdatemessage()) { + event = EventMessage.GROUP_CREATE_UPDATE; + payload = message.getGroupupdatemessage(); + } else if (message.hasGroupdeletemessage()) { + event = EventMessage.GROUP_DELETE; + payload = message.getGroupdeletemessage(); } else { throw new Error('Unexpected batch message type'); } @@ -230,7 +236,6 @@ export class Connection implements Connection { if(!this.socket){ return; } - const point = new Point(x, y, direction, moving); const positionMessage = new PositionMessage(); positionMessage.setX(Math.floor(x)); positionMessage.setY(Math.floor(y)); @@ -264,6 +269,8 @@ export class Connection implements Connection { userMovesMessage.setPosition(positionMessage); userMovesMessage.setViewport(viewportMessage); + //console.log('Sending position ', positionMessage.getX(), positionMessage.getY()); + this.socket.emit(EventMessage.USER_POSITION, userMovesMessage.serializeBinary().buffer); } @@ -301,16 +308,7 @@ export class Connection implements Connection { } public onGroupUpdatedOrCreated(callback: (groupCreateUpdateMessage: GroupCreatedUpdatedMessageInterface) => void): void { - // TODO: READ THIS FROM BINARY FORMAT - // TODO: READ THIS FROM BINARY FORMAT - // TODO: READ THIS FROM BINARY FORMAT - // TODO: CHANGE THIS EVENT TO BE PART OF THE BATCHES - // TODO: CHANGE THIS EVENT TO BE PART OF THE BATCHES - // TODO: CHANGE THIS EVENT TO BE PART OF THE BATCHES - // TODO: CHANGE THIS EVENT TO BE PART OF THE BATCHES - // TODO: CHANGE THIS EVENT TO BE PART OF THE BATCHES - this.socket.on(EventMessage.GROUP_CREATE_UPDATE, (buffer: ArrayBuffer) => { - const message = GroupUpdateMessage.deserializeBinary(new Uint8Array(buffer)); + this.onBatchMessage(EventMessage.GROUP_CREATE_UPDATE, (message: GroupUpdateMessage) => { const position = message.getPosition(); if (position === undefined) { throw new Error('Missing position in GROUP_CREATE_UPDATE'); @@ -321,12 +319,15 @@ export class Connection implements Connection { position: position.toObject() } + //console.log('Group position: ', position.toObject()); callback(groupCreateUpdateMessage); }); } public onGroupDeleted(callback: (groupId: number) => void): void { - this.socket.on(EventMessage.GROUP_DELETE, callback) + this.onBatchMessage(EventMessage.GROUP_DELETE, (message: GroupDeleteMessage) => { + callback(message.getGroupid()); + }); } public onConnectError(callback: (error: object) => void): void { diff --git a/messages/messages.proto b/messages/messages.proto index 9cf6de8a..8b081fe6 100644 --- a/messages/messages.proto +++ b/messages/messages.proto @@ -50,6 +50,8 @@ message UserMovedMessage { message SubMessage { oneof message { UserMovedMessage userMovedMessage = 1; + GroupUpdateMessage groupUpdateMessage = 2; + GroupDeleteMessage groupDeleteMessage = 3; } } diff --git a/messages/package.json b/messages/package.json index b70d4900..6f2bc3f1 100644 --- a/messages/package.json +++ b/messages/package.json @@ -5,7 +5,7 @@ "main": "generated/src/proto/messages_pb.js", "scripts": { "proto": "protoc --plugin=\"protoc-gen-ts=./node_modules/.bin/protoc-gen-ts\" --js_out=\"import_style=commonjs,binary:generated\" --ts_out=\"generated\" messages.proto", - "proto:watch": "inotifywait -q -m -e close_write messages.proto | while read -r filename event; do yarn run proto; done" + "proto:watch": "yarn run proto || inotifywait -q -m -e close_write messages.proto | while read -r filename event; do yarn run proto; done" }, "repository": { "type": "git", From d7209d886430c1794d95c7126a7a8c949c6ed972 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20N=C3=A9grier?= Date: Thu, 24 Sep 2020 11:16:08 +0200 Subject: [PATCH 178/313] Migrating messages locally into back and front --- back/Dockerfile | 2 +- back/package.json | 2 ++ back/src/Controller/IoSocketController.ts | 4 ++-- back/src/Messages/.gitignore | 1 + back/src/Model/Websocket/ExSocketInterface.ts | 2 +- back/src/Model/Websocket/ProtobufUtils.ts | 2 +- back/tsconfig.json | 2 +- back/yarn.lock | 10 ++++++++++ docker-compose.yaml | 4 ++-- front/Dockerfile | 2 +- front/package.json | 2 ++ front/src/Connection.ts | 2 +- front/src/Messages/.gitignore | 1 + front/src/Network/ProtobufClientUtils.ts | 2 +- front/src/Phaser/Game/GameScene.ts | 4 +++- front/src/Phaser/Game/PlayerMovement.ts | 3 ++- front/yarn.lock | 10 ++++++++++ messages/package.json | 5 ++++- 18 files changed, 46 insertions(+), 14 deletions(-) create mode 100644 back/src/Messages/.gitignore create mode 100644 front/src/Messages/.gitignore diff --git a/back/Dockerfile b/back/Dockerfile index f0c565f9..bd98d66a 100644 --- a/back/Dockerfile +++ b/back/Dockerfile @@ -6,7 +6,7 @@ RUN yarn install && yarn proto FROM thecodingmachine/nodejs:12 COPY --chown=docker:docker back . -COPY --from=builder --chown=docker:docker /var/www/messages /var/www/messages +COPY --from=builder --chown=docker:docker /var/www/messages/generated /var/www/html/src/Messages/generated RUN yarn install ENV NODE_ENV=production diff --git a/back/package.json b/back/package.json index 3306578a..17763861 100644 --- a/back/package.json +++ b/back/package.json @@ -39,6 +39,7 @@ "body-parser": "^1.19.0", "express": "^4.17.1", "generic-type-guard": "^3.2.0", + "google-protobuf": "^3.13.0", "http-status-codes": "^1.4.0", "jsonwebtoken": "^8.5.1", "prom-client": "^12.0.0", @@ -50,6 +51,7 @@ }, "devDependencies": { "@types/express": "^4.17.4", + "@types/google-protobuf": "^3.7.3", "@types/http-status-codes": "^1.2.0", "@types/jasmine": "^3.5.10", "@types/jsonwebtoken": "^8.3.8", diff --git a/back/src/Controller/IoSocketController.ts b/back/src/Controller/IoSocketController.ts index bf1452ac..7e13b9d0 100644 --- a/back/src/Controller/IoSocketController.ts +++ b/back/src/Controller/IoSocketController.ts @@ -28,8 +28,8 @@ import { SubMessage, UserMovedMessage, BatchMessage, GroupUpdateMessage, PointMessage, GroupDeleteMessage -} from "../../../messages/generated/messages_pb"; -import {UserMovesMessage} from "../../../messages/generated/messages_pb"; +} from "../Messages/generated/messages_pb"; +import {UserMovesMessage} from "../Messages/generated/messages_pb"; import Direction = PositionMessage.Direction; import {ProtobufUtils} from "../Model/Websocket/ProtobufUtils"; diff --git a/back/src/Messages/.gitignore b/back/src/Messages/.gitignore new file mode 100644 index 00000000..9e0adcc1 --- /dev/null +++ b/back/src/Messages/.gitignore @@ -0,0 +1 @@ +/generated/ diff --git a/back/src/Model/Websocket/ExSocketInterface.ts b/back/src/Model/Websocket/ExSocketInterface.ts index cd1f73ed..ace374f4 100644 --- a/back/src/Model/Websocket/ExSocketInterface.ts +++ b/back/src/Model/Websocket/ExSocketInterface.ts @@ -3,7 +3,7 @@ import {PointInterface} from "./PointInterface"; import {Identificable} from "./Identificable"; import {TokenInterface} from "../../Controller/AuthenticateController"; import {ViewportInterface} from "_Model/Websocket/ViewportMessage"; -import {BatchMessage, SubMessage} from "../../../../messages/generated/messages_pb"; +import {BatchMessage, SubMessage} from "../../Messages/generated/messages_pb"; export interface ExSocketInterface extends Socket, Identificable { token: string; diff --git a/back/src/Model/Websocket/ProtobufUtils.ts b/back/src/Model/Websocket/ProtobufUtils.ts index 516a744e..4e5aec02 100644 --- a/back/src/Model/Websocket/ProtobufUtils.ts +++ b/back/src/Model/Websocket/ProtobufUtils.ts @@ -1,5 +1,5 @@ import {PointInterface} from "./PointInterface"; -import {PositionMessage} from "../../../../messages/generated/messages_pb"; +import {PositionMessage} from "../../Messages/generated/messages_pb"; import {ExSocketInterface} from "_Model/Websocket/ExSocketInterface"; import Direction = PositionMessage.Direction; diff --git a/back/tsconfig.json b/back/tsconfig.json index de6314a3..34ad9a5a 100644 --- a/back/tsconfig.json +++ b/back/tsconfig.json @@ -7,7 +7,7 @@ "downlevelIteration": true, "module": "commonjs", /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', 'es2020', or 'ESNext'. */ // "lib": [], /* Specify library files to be included in the compilation. */ - // "allowJs": true, /* Allow javascript files to be compiled. */ + "allowJs": true, /* Allow javascript files to be compiled. */ // "checkJs": true, /* Report errors in .js files. */ // "jsx": "preserve", /* Specify JSX code generation: 'preserve', 'react-native', or 'react'. */ // "declaration": true, /* Generates corresponding '.d.ts' file. */ diff --git a/back/yarn.lock b/back/yarn.lock index f660a5c8..feef36ea 100644 --- a/back/yarn.lock +++ b/back/yarn.lock @@ -57,6 +57,11 @@ "@types/qs" "*" "@types/serve-static" "*" +"@types/google-protobuf@^3.7.3": + version "3.7.3" + resolved "https://registry.yarnpkg.com/@types/google-protobuf/-/google-protobuf-3.7.3.tgz#429512e541bbd777f2c867692e6335ee08d1f6d4" + integrity sha512-FRwj40euE2bYkG+0X5w2nEA8yAzgJRcEa7RBd0Gsdkb9/tPM2pctVVAvnOUTbcXo2VmIHPo0Ae94Gl9vRHfKzg== + "@types/http-status-codes@^1.2.0": version "1.2.0" resolved "https://registry.yarnpkg.com/@types/http-status-codes/-/http-status-codes-1.2.0.tgz#6e5244835aaf7164dd306f1d4d2dfdbb2159d909" @@ -822,6 +827,11 @@ globals@^12.1.0: dependencies: type-fest "^0.8.1" +google-protobuf@^3.13.0: + version "3.13.0" + resolved "https://registry.yarnpkg.com/google-protobuf/-/google-protobuf-3.13.0.tgz#909c5983d75dd6101ed57c79e0528d000cdc3251" + integrity sha512-ZIf3qfLFayVrPvAjeKKxO5FRF1/NwRxt6Dko+fWEMuHwHbZx8/fcaAao9b0wCM6kr8qeg2te8XTpyuvKuD9aKw== + graceful-fs@^4.1.2: version "4.2.3" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.3.tgz#4a12ff1b60376ef09862c2093edd908328be8423" diff --git a/docker-compose.yaml b/docker-compose.yaml index fce76204..a37fe28f 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -33,7 +33,6 @@ services: command: yarn run start volumes: - ./front:/usr/src/app - - ./messages:/usr/src/messages/ labels: - "traefik.http.routers.front.rule=Host(`play.workadventure.localhost`)" - "traefik.http.routers.front.entryPoints=web,traefik" @@ -76,7 +75,6 @@ services: ALLOW_ARTILLERY: "true" volumes: - ./back:/usr/src/app - - ./messages:/usr/src/messages/ labels: - "traefik.http.routers.back.rule=Host(`api.workadventure.localhost`)" - "traefik.http.routers.back.entryPoints=web" @@ -111,3 +109,5 @@ services: STARTUP_COMMAND_2: yarn run proto:watch volumes: - ./messages:/usr/src/app + - ./back:/usr/src/back + - ./front:/usr/src/front diff --git a/front/Dockerfile b/front/Dockerfile index 98e29a52..6c79ad6e 100644 --- a/front/Dockerfile +++ b/front/Dockerfile @@ -7,7 +7,7 @@ RUN yarn install && yarn proto FROM thecodingmachine/nodejs:14-apache COPY --chown=docker:docker front . -COPY --from=builder --chown=docker:docker /var/www/messages /var/www/messages +COPY --from=builder --chown=docker:docker /var/www/messages/generated /var/www/html/src/Messages/generated RUN yarn install ENV NODE_ENV=production diff --git a/front/package.json b/front/package.json index a9c7b3f8..048c7099 100644 --- a/front/package.json +++ b/front/package.json @@ -4,6 +4,7 @@ "main": "index.js", "license": "SEE LICENSE IN LICENSE.txt", "devDependencies": { + "@types/google-protobuf": "^3.7.3", "@types/jasmine": "^3.5.10", "@typescript-eslint/eslint-plugin": "^2.26.0", "@typescript-eslint/parser": "^2.26.0", @@ -23,6 +24,7 @@ "@types/simple-peer": "^9.6.0", "@types/socket.io-client": "^1.4.32", "generic-type-guard": "^3.2.0", + "google-protobuf": "^3.13.0", "phaser": "^3.22.0", "queue-typescript": "^1.0.1", "simple-peer": "^9.6.2", diff --git a/front/src/Connection.ts b/front/src/Connection.ts index 459e58c1..0a05673a 100644 --- a/front/src/Connection.ts +++ b/front/src/Connection.ts @@ -7,7 +7,7 @@ import { SetPlayerDetailsMessage, UserMovedMessage, UserMovesMessage, ViewportMessage -} from "../../messages/generated/messages_pb" +} from "./Messages/generated/messages_pb" const SocketIo = require('socket.io-client'); import Socket = SocketIOClient.Socket; diff --git a/front/src/Messages/.gitignore b/front/src/Messages/.gitignore new file mode 100644 index 00000000..9e0adcc1 --- /dev/null +++ b/front/src/Messages/.gitignore @@ -0,0 +1 @@ +/generated/ diff --git a/front/src/Network/ProtobufClientUtils.ts b/front/src/Network/ProtobufClientUtils.ts index 6755025c..1eb5b923 100644 --- a/front/src/Network/ProtobufClientUtils.ts +++ b/front/src/Network/ProtobufClientUtils.ts @@ -1,4 +1,4 @@ -import {PositionMessage} from "../../../messages/generated/messages_pb"; +import {PositionMessage} from "../Messages/generated/messages_pb"; import {PointInterface} from "../Connection"; import Direction = PositionMessage.Direction; diff --git a/front/src/Phaser/Game/GameScene.ts b/front/src/Phaser/Game/GameScene.ts index 8abddfd3..f971a1e3 100644 --- a/front/src/Phaser/Game/GameScene.ts +++ b/front/src/Phaser/Game/GameScene.ts @@ -40,7 +40,7 @@ import {FourOFourSceneName} from "../Reconnecting/FourOFourScene"; import {ItemFactoryInterface} from "../Items/ItemFactoryInterface"; import {ActionableItem} from "../Items/ActionableItem"; import {UserInputManager} from "../UserInput/UserInputManager"; -import {UserMovedMessage} from "../../../../messages/generated/messages_pb"; +import {UserMovedMessage} from "../../Messages/generated/messages_pb"; import {ProtobufClientUtils} from "../../Network/ProtobufClientUtils"; @@ -220,6 +220,7 @@ export class GameScene extends Phaser.Scene implements CenterListener { if (position === undefined) { throw new Error('Position missing from UserMovedMessage'); } + //console.log('Received position ', position.getX(), position.getY(), "from user", message.getUserid()); const messageUserMoved: MessageUserMovedInterface = { userId: message.getUserid(), @@ -1079,6 +1080,7 @@ export class GameScene extends Phaser.Scene implements CenterListener { // We do not update the player position directly (because it is sent only every 200ms). // Instead we use the PlayersPositionInterpolator that will do a smooth animation over the next 200ms. const playerMovement = new PlayerMovement({ x: player.x, y: player.y }, this.currentTick, message.position, this.currentTick + POSITION_DELAY); + //console.log('Target position: ', player.x, player.y); this.playersPositionInterpolator.updatePlayerPosition(player.userId, playerMovement); } diff --git a/front/src/Phaser/Game/PlayerMovement.ts b/front/src/Phaser/Game/PlayerMovement.ts index 1458335d..56c4f113 100644 --- a/front/src/Phaser/Game/PlayerMovement.ts +++ b/front/src/Phaser/Game/PlayerMovement.ts @@ -20,12 +20,13 @@ export class PlayerMovement { public getPosition(tick: number): HasMovedEvent { // Special case: end position reached and end position is not moving if (tick >= this.endTick && this.endPosition.moving === false) { + //console.log('Movement finished ', this.endPosition) return this.endPosition; } const x = (this.endPosition.x - this.startPosition.x) * ((tick - this.startTick) / (this.endTick - this.startTick)) + this.startPosition.x; const y = (this.endPosition.y - this.startPosition.y) * ((tick - this.startTick) / (this.endTick - this.startTick)) + this.startPosition.y; - + //console.log('Computed position ', x, y) return { x, y, diff --git a/front/yarn.lock b/front/yarn.lock index 2e7007e1..2da1afa2 100644 --- a/front/yarn.lock +++ b/front/yarn.lock @@ -66,6 +66,11 @@ "@types/minimatch" "*" "@types/node" "*" +"@types/google-protobuf@^3.7.3": + version "3.7.3" + resolved "https://registry.yarnpkg.com/@types/google-protobuf/-/google-protobuf-3.7.3.tgz#429512e541bbd777f2c867692e6335ee08d1f6d4" + integrity sha512-FRwj40euE2bYkG+0X5w2nEA8yAzgJRcEa7RBd0Gsdkb9/tPM2pctVVAvnOUTbcXo2VmIHPo0Ae94Gl9vRHfKzg== + "@types/html-minifier-terser@^5.0.0": version "5.1.0" resolved "https://registry.yarnpkg.com/@types/html-minifier-terser/-/html-minifier-terser-5.1.0.tgz#551a4589b6ee2cc9c1dff08056128aec29b94880" @@ -2237,6 +2242,11 @@ globby@^6.1.0: pify "^2.0.0" pinkie-promise "^2.0.0" +google-protobuf@^3.13.0: + version "3.13.0" + resolved "https://registry.yarnpkg.com/google-protobuf/-/google-protobuf-3.13.0.tgz#909c5983d75dd6101ed57c79e0528d000cdc3251" + integrity sha512-ZIf3qfLFayVrPvAjeKKxO5FRF1/NwRxt6Dko+fWEMuHwHbZx8/fcaAao9b0wCM6kr8qeg2te8XTpyuvKuD9aKw== + graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2: version "4.2.4" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" diff --git a/messages/package.json b/messages/package.json index 6f2bc3f1..f7c73863 100644 --- a/messages/package.json +++ b/messages/package.json @@ -5,7 +5,10 @@ "main": "generated/src/proto/messages_pb.js", "scripts": { "proto": "protoc --plugin=\"protoc-gen-ts=./node_modules/.bin/protoc-gen-ts\" --js_out=\"import_style=commonjs,binary:generated\" --ts_out=\"generated\" messages.proto", - "proto:watch": "yarn run proto || inotifywait -q -m -e close_write messages.proto | while read -r filename event; do yarn run proto; done" + "copy-to-back": "rm -rf ../back/src/Messages/generated && cp -rf generated/ ../back/src/Messages/generated", + "copy-to-front": "rm -rf ../front/src/Messages/generated && cp -rf generated/ ../front/src/Messages/generated", + "proto-all": "yarn run proto && yarn run copy-to-back && yarn run copy-to-front", + "proto:watch": "yarn run proto-all; inotifywait -q -m -e close_write messages.proto | while read -r filename event; do yarn run proto-all; done" }, "repository": { "type": "git", From 64803296d660893c6e896211f114acd2cfbc7fb1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20N=C3=A9grier?= Date: Thu, 24 Sep 2020 11:20:10 +0200 Subject: [PATCH 179/313] Fixing CI --- .github/workflows/continuous_integration.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/continuous_integration.yml b/.github/workflows/continuous_integration.yml index 95aed5a2..47b28d72 100644 --- a/.github/workflows/continuous_integration.yml +++ b/.github/workflows/continuous_integration.yml @@ -36,7 +36,7 @@ jobs: working-directory: "messages" - name: "Build proto messages" - run: yarn run proto + run: yarn run proto && yarn run copy-to-front working-directory: "messages" - name: "Build" @@ -81,7 +81,7 @@ jobs: working-directory: "messages" - name: "Build proto messages" - run: yarn run proto + run: yarn run proto && yarn run copy-to-back working-directory: "messages" - name: "Build" From 72806b3ca09c6d9885de9ef9949309fcea0da287 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20N=C3=A9grier?= Date: Thu, 24 Sep 2020 11:54:00 +0200 Subject: [PATCH 180/313] Fixing messages copy --- back/Dockerfile | 2 +- back/src/Controller/IoSocketController.ts | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/back/Dockerfile b/back/Dockerfile index bd98d66a..02369b9f 100644 --- a/back/Dockerfile +++ b/back/Dockerfile @@ -6,7 +6,7 @@ RUN yarn install && yarn proto FROM thecodingmachine/nodejs:12 COPY --chown=docker:docker back . -COPY --from=builder --chown=docker:docker /var/www/messages/generated /var/www/html/src/Messages/generated +COPY --from=builder --chown=docker:docker /var/www/messages/generated /usr/src/app/src/Messages/generated RUN yarn install ENV NODE_ENV=production diff --git a/back/src/Controller/IoSocketController.ts b/back/src/Controller/IoSocketController.ts index 7e13b9d0..4e165446 100644 --- a/back/src/Controller/IoSocketController.ts +++ b/back/src/Controller/IoSocketController.ts @@ -315,6 +315,8 @@ export class IoSocketController { case Direction.RIGHT: direction = 'right'; break; + default: + throw new Error("Unexpected direction"); } const Client = (socket as ExSocketInterface); From 2dad601311a77b42ced2eb4655e5585dec773c99 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20N=C3=A9grier?= Date: Thu, 24 Sep 2020 14:50:28 +0200 Subject: [PATCH 181/313] Adding JOIN_ROOM message in protobuf --- back/src/Controller/IoSocketController.ts | 14 +++++++++++--- front/src/Connection.ts | 20 ++++++++++++++++++-- messages/messages.proto | 8 ++++++++ 3 files changed, 37 insertions(+), 5 deletions(-) diff --git a/back/src/Controller/IoSocketController.ts b/back/src/Controller/IoSocketController.ts index 4e165446..3e0eeb2e 100644 --- a/back/src/Controller/IoSocketController.ts +++ b/back/src/Controller/IoSocketController.ts @@ -27,7 +27,7 @@ import { SetPlayerDetailsMessage, SubMessage, UserMovedMessage, - BatchMessage, GroupUpdateMessage, PointMessage, GroupDeleteMessage + BatchMessage, GroupUpdateMessage, PointMessage, GroupDeleteMessage, UserJoinedMessage } from "../Messages/generated/messages_pb"; import {UserMovesMessage} from "../Messages/generated/messages_pb"; import Direction = PositionMessage.Direction; @@ -541,9 +541,17 @@ export class IoSocketController { const clientListener = this.searchClientByIdOrFail(listener.id); if (thing instanceof User) { const clientUser = this.searchClientByIdOrFail(thing.id); - const messageUserJoined = new MessageUserJoined(clientUser.userId, clientUser.name, clientUser.characterLayers, clientUser.position); - clientListener.emit(SocketIoEvent.JOIN_ROOM, messageUserJoined); + const userJoinedMessage = new UserJoinedMessage(); + userJoinedMessage.setUserid(clientUser.userId); + userJoinedMessage.setName(clientUser.name); + userJoinedMessage.setCharacterlayersList(clientUser.characterLayers); + userJoinedMessage.setPosition(ProtobufUtils.toPositionMessage(clientUser.position)); + + const subMessage = new SubMessage(); + subMessage.setUserjoinedmessage(userJoinedMessage); + + emitInBatch(clientListener, SocketIoEvent.JOIN_ROOM, subMessage); } else if (thing instanceof Group) { this.emitCreateUpdateGroupEvent(clientListener, thing); } else { diff --git a/front/src/Connection.ts b/front/src/Connection.ts index 0a05673a..d64f4643 100644 --- a/front/src/Connection.ts +++ b/front/src/Connection.ts @@ -4,7 +4,7 @@ import {MessageUI} from "./Logger/MessageUI"; import { BatchMessage, GroupDeleteMessage, GroupUpdateMessage, PositionMessage, - SetPlayerDetailsMessage, UserMovedMessage, + SetPlayerDetailsMessage, UserJoinedMessage, UserMovedMessage, UserMovesMessage, ViewportMessage } from "./Messages/generated/messages_pb" @@ -15,6 +15,7 @@ import {PlayerAnimationNames} from "./Phaser/Player/Animation"; import {UserSimplePeerInterface} from "./WebRtc/SimplePeer"; import {SignalData} from "simple-peer"; import Direction = PositionMessage.Direction; +import {ProtobufClientUtils} from "./Network/ProtobufClientUtils"; enum EventMessage{ WEBRTC_SIGNAL = "webrtc-signal", @@ -166,6 +167,9 @@ export class Connection implements Connection { } else if (message.hasGroupdeletemessage()) { event = EventMessage.GROUP_DELETE; payload = message.getGroupdeletemessage(); + } else if (message.hasUserjoinedmessage()) { + event = EventMessage.JOIN_ROOM; + payload = message.getUserjoinedmessage(); } else { throw new Error('Unexpected batch message type'); } @@ -283,7 +287,19 @@ export class Connection implements Connection { } public onUserJoins(callback: (message: MessageUserJoined) => void): void { - this.socket.on(EventMessage.JOIN_ROOM, callback); + this.onBatchMessage(EventMessage.JOIN_ROOM, (message: UserJoinedMessage) => { + const position = message.getPosition(); + if (position === undefined) { + throw new Error('Invalid JOIN_ROOM message'); + } + const messageUserJoined: MessageUserJoined = { + userId: message.getUserid(), + name: message.getName(), + characterLayers: message.getCharacterlayersList(), + position: ProtobufClientUtils.toPointInterface(position) + } + callback(messageUserJoined); + }); } public onUserMoved(callback: (message: UserMovedMessage) => void): void { diff --git a/messages/messages.proto b/messages/messages.proto index 8b081fe6..50a0aa5d 100644 --- a/messages/messages.proto +++ b/messages/messages.proto @@ -52,6 +52,7 @@ message SubMessage { UserMovedMessage userMovedMessage = 1; GroupUpdateMessage groupUpdateMessage = 2; GroupDeleteMessage groupDeleteMessage = 3; + UserJoinedMessage userJoinedMessage = 4; } } @@ -68,3 +69,10 @@ message GroupUpdateMessage { message GroupDeleteMessage { int32 groupId = 1; } + +message UserJoinedMessage { + int32 userId = 1; + string name = 2; + repeated string characterLayers = 3; + PositionMessage position = 4; +} From 0c4c43f88c55e4bbd22fdbc96bc5ef73d5d0ffa6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20N=C3=A9grier?= Date: Thu, 24 Sep 2020 16:11:47 +0200 Subject: [PATCH 182/313] Adding USER_LEFT message to protobuf --- back/src/Controller/IoSocketController.ts | 16 +++++++++++++--- front/src/Connection.ts | 9 +++++++-- messages/messages.proto | 5 +++++ 3 files changed, 25 insertions(+), 5 deletions(-) diff --git a/back/src/Controller/IoSocketController.ts b/back/src/Controller/IoSocketController.ts index 3e0eeb2e..9110702e 100644 --- a/back/src/Controller/IoSocketController.ts +++ b/back/src/Controller/IoSocketController.ts @@ -27,7 +27,7 @@ import { SetPlayerDetailsMessage, SubMessage, UserMovedMessage, - BatchMessage, GroupUpdateMessage, PointMessage, GroupDeleteMessage, UserJoinedMessage + BatchMessage, GroupUpdateMessage, PointMessage, GroupDeleteMessage, UserJoinedMessage, UserLeftMessage } from "../Messages/generated/messages_pb"; import {UserMovesMessage} from "../Messages/generated/messages_pb"; import Direction = PositionMessage.Direction; @@ -580,8 +580,7 @@ export class IoSocketController { const clientListener = this.searchClientByIdOrFail(listener.id); if (thing instanceof User) { const clientUser = this.searchClientByIdOrFail(thing.id); - clientListener.emit(SocketIoEvent.USER_LEFT, clientUser.userId); - //console.log("Sending USER_LEFT event"); + this.emitUserLeftEvent(clientListener, clientUser.userId); } else if (thing instanceof Group) { this.emitDeleteGroupEvent(clientListener, thing.getId()); } else { @@ -629,6 +628,17 @@ export class IoSocketController { emitInBatch(client, SocketIoEvent.GROUP_DELETE, subMessage); } + private emitUserLeftEvent(socket: Socket, userId: number): void { + const userLeftMessage = new UserLeftMessage(); + userLeftMessage.setUserid(userId); + + const subMessage = new SubMessage(); + subMessage.setUserleftmessage(userLeftMessage); + + const client : ExSocketInterface = socket as ExSocketInterface; + emitInBatch(client, SocketIoEvent.USER_LEFT, subMessage); + } + /** * * @param socket diff --git a/front/src/Connection.ts b/front/src/Connection.ts index d64f4643..faf080f0 100644 --- a/front/src/Connection.ts +++ b/front/src/Connection.ts @@ -4,7 +4,7 @@ import {MessageUI} from "./Logger/MessageUI"; import { BatchMessage, GroupDeleteMessage, GroupUpdateMessage, PositionMessage, - SetPlayerDetailsMessage, UserJoinedMessage, UserMovedMessage, + SetPlayerDetailsMessage, UserJoinedMessage, UserLeftMessage, UserMovedMessage, UserMovesMessage, ViewportMessage } from "./Messages/generated/messages_pb" @@ -170,6 +170,9 @@ export class Connection implements Connection { } else if (message.hasUserjoinedmessage()) { event = EventMessage.JOIN_ROOM; payload = message.getUserjoinedmessage(); + } else if (message.hasUserleftmessage()) { + event = EventMessage.USER_LEFT; + payload = message.getUserleftmessage(); } else { throw new Error('Unexpected batch message type'); } @@ -320,7 +323,9 @@ export class Connection implements Connection { } public onUserLeft(callback: (userId: number) => void): void { - this.socket.on(EventMessage.USER_LEFT, callback); + this.onBatchMessage(EventMessage.USER_LEFT, (message: UserLeftMessage) => { + callback(message.getUserid()); + }); } public onGroupUpdatedOrCreated(callback: (groupCreateUpdateMessage: GroupCreatedUpdatedMessageInterface) => void): void { diff --git a/messages/messages.proto b/messages/messages.proto index 50a0aa5d..01782e57 100644 --- a/messages/messages.proto +++ b/messages/messages.proto @@ -53,6 +53,7 @@ message SubMessage { GroupUpdateMessage groupUpdateMessage = 2; GroupDeleteMessage groupDeleteMessage = 3; UserJoinedMessage userJoinedMessage = 4; + UserLeftMessage userLeftMessage = 5; } } @@ -76,3 +77,7 @@ message UserJoinedMessage { repeated string characterLayers = 3; PositionMessage position = 4; } + +message UserLeftMessage { + int32 userId = 1; +} From 24a6cd7f8e86b0dbee33b97adf74213f739a3130 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20N=C3=A9grier?= Date: Thu, 24 Sep 2020 17:24:37 +0200 Subject: [PATCH 183/313] Switched ITEM_EVENT to protobuf --- back/src/Controller/IoSocketController.ts | 36 +++++++++++++++++++---- back/src/Model/Websocket/ProtobufUtils.ts | 22 +++++++++++++- front/src/Connection.ts | 29 ++++++++++++------ messages/messages.proto | 9 ++++++ 4 files changed, 81 insertions(+), 15 deletions(-) diff --git a/back/src/Controller/IoSocketController.ts b/back/src/Controller/IoSocketController.ts index 9110702e..57e204f4 100644 --- a/back/src/Controller/IoSocketController.ts +++ b/back/src/Controller/IoSocketController.ts @@ -27,7 +27,13 @@ import { SetPlayerDetailsMessage, SubMessage, UserMovedMessage, - BatchMessage, GroupUpdateMessage, PointMessage, GroupDeleteMessage, UserJoinedMessage, UserLeftMessage + BatchMessage, + GroupUpdateMessage, + PointMessage, + GroupDeleteMessage, + UserJoinedMessage, + UserLeftMessage, + ItemEventMessage } from "../Messages/generated/messages_pb"; import {UserMovesMessage} from "../Messages/generated/messages_pb"; import Direction = PositionMessage.Direction; @@ -433,22 +439,42 @@ export class IoSocketController { } }); - socket.on(SocketIoEvent.ITEM_EVENT, (itemEvent: unknown) => { - if (!isItemEventMessageInterface(itemEvent)) { + socket.on(SocketIoEvent.ITEM_EVENT, (message: unknown) => { + if (!(message instanceof Buffer)) { + socket.emit(SocketIoEvent.MESSAGE_ERROR, {message: 'Invalid ITEM_EVENT message. Expecting binary buffer.'}); + console.warn('Invalid ITEM_EVENT message received (expecting binary buffer): ', message); + return; + } + const itemEventMessage = ItemEventMessage.deserializeBinary(new Uint8Array(message)); + + const itemEvent = ProtobufUtils.toItemEvent(itemEventMessage); + + /*if (!isItemEventMessageInterface(itemEvent)) { socket.emit(SocketIoEvent.MESSAGE_ERROR, {message: 'Invalid ITEM_EVENT message.'}); console.warn('Invalid ITEM_EVENT message received: ', itemEvent); return; - } + }*/ try { const Client = (socket as ExSocketInterface); - socket.to(Client.roomId).emit(SocketIoEvent.ITEM_EVENT, itemEvent); + //socket.to(Client.roomId).emit(SocketIoEvent.ITEM_EVENT, itemEvent); const world = this.Worlds.get(Client.roomId); if (!world) { console.error("Could not find world with id '", Client.roomId, "'"); return; } + + const subMessage = new SubMessage(); + subMessage.setItemeventmessage(itemEventMessage); + + // Let's send the event without using the SocketIO room. + for (let user of world.getUsers().values()) { + const client = this.searchClientByIdOrFail(user.id); + //client.emit(SocketIoEvent.ITEM_EVENT, itemEvent); + emitInBatch(client, SocketIoEvent.ITEM_EVENT, subMessage); + } + world.setItemState(itemEvent.itemId, itemEvent.state); } catch (e) { console.error('An error occurred on "item_event"'); diff --git a/back/src/Model/Websocket/ProtobufUtils.ts b/back/src/Model/Websocket/ProtobufUtils.ts index 4e5aec02..aa6810a4 100644 --- a/back/src/Model/Websocket/ProtobufUtils.ts +++ b/back/src/Model/Websocket/ProtobufUtils.ts @@ -1,7 +1,8 @@ import {PointInterface} from "./PointInterface"; -import {PositionMessage} from "../../Messages/generated/messages_pb"; +import {ItemEventMessage, PositionMessage} from "../../Messages/generated/messages_pb"; import {ExSocketInterface} from "_Model/Websocket/ExSocketInterface"; import Direction = PositionMessage.Direction; +import {ItemEventMessageInterface} from "_Model/Websocket/ItemEventMessage"; export class ProtobufUtils { @@ -32,4 +33,23 @@ export class ProtobufUtils { return position; } + + public static toItemEvent(itemEventMessage: ItemEventMessage): ItemEventMessageInterface { + return { + itemId: itemEventMessage.getItemid(), + event: itemEventMessage.getEvent(), + parameters: JSON.parse(itemEventMessage.getParametersjson()), + state: JSON.parse(itemEventMessage.getStatejson()), + } + } + + public static toItemEventProtobuf(itemEvent: ItemEventMessageInterface): ItemEventMessage { + const itemEventMessage = new ItemEventMessage(); + itemEventMessage.setItemid(itemEvent.itemId); + itemEventMessage.setEvent(itemEvent.event); + itemEventMessage.setParametersjson(JSON.stringify(itemEvent.parameters)); + itemEventMessage.setStatejson(JSON.stringify(itemEvent.state)); + + return itemEventMessage; + } } diff --git a/front/src/Connection.ts b/front/src/Connection.ts index faf080f0..8201b5af 100644 --- a/front/src/Connection.ts +++ b/front/src/Connection.ts @@ -2,7 +2,7 @@ import Axios from "axios"; import {API_URL} from "./Enum/EnvironmentVariable"; import {MessageUI} from "./Logger/MessageUI"; import { - BatchMessage, GroupDeleteMessage, GroupUpdateMessage, + BatchMessage, GroupDeleteMessage, GroupUpdateMessage, ItemEventMessage, PositionMessage, SetPlayerDetailsMessage, UserJoinedMessage, UserLeftMessage, UserMovedMessage, UserMovesMessage, @@ -173,6 +173,9 @@ export class Connection implements Connection { } else if (message.hasUserleftmessage()) { event = EventMessage.USER_LEFT; payload = message.getUserleftmessage(); + } else if (message.hasItemeventmessage()) { + event = EventMessage.ITEM_EVENT; + payload = message.getItemeventmessage(); } else { throw new Error('Unexpected batch message type'); } @@ -400,16 +403,24 @@ export class Connection implements Connection { this.socket.on(EventMessage.WEBRTC_DISCONNECT, callback); } - emitActionableEvent(itemId: number, event: string, state: unknown, parameters: unknown) { - return this.socket.emit(EventMessage.ITEM_EVENT, { - itemId, - event, - state, - parameters - }); + emitActionableEvent(itemId: number, event: string, state: unknown, parameters: unknown): void { + const itemEventMessage = new ItemEventMessage(); + itemEventMessage.setItemid(itemId); + itemEventMessage.setEvent(event); + itemEventMessage.setStatejson(JSON.stringify(state)); + itemEventMessage.setParametersjson(JSON.stringify(parameters)); + + this.socket.emit(EventMessage.ITEM_EVENT, itemEventMessage.serializeBinary().buffer); } onActionableEvent(callback: (message: ItemEventMessageInterface) => void): void { - this.socket.on(EventMessage.ITEM_EVENT, callback); + this.onBatchMessage(EventMessage.ITEM_EVENT, (message: ItemEventMessage) => { + callback({ + itemId: message.getItemid(), + event: message.getEvent(), + parameters: JSON.parse(message.getParametersjson()), + state: JSON.parse(message.getStatejson()) + }); + }); } } diff --git a/messages/messages.proto b/messages/messages.proto index 01782e57..57b1f2ea 100644 --- a/messages/messages.proto +++ b/messages/messages.proto @@ -39,6 +39,14 @@ message UserMovesMessage { ViewportMessage viewport = 2; } +/************ BI-DIRECTIONAL MESSAGES **************/ + +message ItemEventMessage { + int32 itemId = 1; + string event = 2; + string stateJson = 3; + string parametersJson = 4; +} /*********** SERVER TO CLIENT MESSAGES *************/ @@ -54,6 +62,7 @@ message SubMessage { GroupDeleteMessage groupDeleteMessage = 3; UserJoinedMessage userJoinedMessage = 4; UserLeftMessage userLeftMessage = 5; + ItemEventMessage itemEventMessage = 6; } } From ac80850335be06bd3fa0b391320a410fb46740db Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20N=C3=A9grier?= Date: Thu, 24 Sep 2020 17:36:10 +0200 Subject: [PATCH 184/313] Switching SetViewport to protobuf --- back/src/Controller/IoSocketController.ts | 15 ++++++++------- front/src/Connection.ts | 8 +++++++- 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/back/src/Controller/IoSocketController.ts b/back/src/Controller/IoSocketController.ts index 57e204f4..e7305d15 100644 --- a/back/src/Controller/IoSocketController.ts +++ b/back/src/Controller/IoSocketController.ts @@ -19,7 +19,6 @@ import {isWebRtcSignalMessageInterface} from "../Model/Websocket/WebRtcSignalMes import {UserInGroupInterface} from "../Model/Websocket/UserInGroupInterface"; import {isItemEventMessageInterface} from "../Model/Websocket/ItemEventMessage"; import {uuid} from 'uuidv4'; -import {isViewport} from "../Model/Websocket/ViewportMessage"; import {GroupUpdateInterface} from "_Model/Websocket/GroupUpdateInterface"; import {Movable} from "../Model/Movable"; import { @@ -33,7 +32,7 @@ import { GroupDeleteMessage, UserJoinedMessage, UserLeftMessage, - ItemEventMessage + ItemEventMessage, ViewportMessage } from "../Messages/generated/messages_pb"; import {UserMovesMessage} from "../Messages/generated/messages_pb"; import Direction = PositionMessage.Direction; @@ -264,15 +263,17 @@ export class IoSocketController { socket.on(SocketIoEvent.SET_VIEWPORT, (message: unknown): void => { try { - //console.log('SET_VIEWPORT') - if (!isViewport(message)) { - socket.emit(SocketIoEvent.MESSAGE_ERROR, {message: 'Invalid SET_VIEWPORT message.'}); - console.warn('Invalid SET_VIEWPORT message received: ', message); + if (!(message instanceof Buffer)) { + socket.emit(SocketIoEvent.MESSAGE_ERROR, {message: 'Invalid SET_VIEWPORT message. Expecting binary buffer.'}); + console.warn('Invalid SET_VIEWPORT message received (expecting binary buffer): ', message); return; } + const viewportMessage = ViewportMessage.deserializeBinary(new Uint8Array(message as ArrayBuffer)); + const viewport = viewportMessage.toObject(); + const Client = (socket as ExSocketInterface); - Client.viewport = message; + Client.viewport = viewport; const world = this.Worlds.get(Client.roomId); if (!world) { diff --git a/front/src/Connection.ts b/front/src/Connection.ts index 8201b5af..61b0c4e7 100644 --- a/front/src/Connection.ts +++ b/front/src/Connection.ts @@ -289,7 +289,13 @@ export class Connection implements Connection { } public setViewport(viewport: ViewportInterface): void { - this.socket.emit(EventMessage.SET_VIEWPORT, viewport); + const viewportMessage = new ViewportMessage(); + viewportMessage.setTop(Math.round(viewport.top)); + viewportMessage.setBottom(Math.round(viewport.bottom)); + viewportMessage.setLeft(Math.round(viewport.left)); + viewportMessage.setRight(Math.round(viewport.right)); + + this.socket.emit(EventMessage.SET_VIEWPORT, viewportMessage.serializeBinary().buffer); } public onUserJoins(callback: (message: MessageUserJoined) => void): void { From 953912b8924769abb8b06a8e1b7c9e40cc378569 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20N=C3=A9grier?= Date: Thu, 24 Sep 2020 17:52:12 +0200 Subject: [PATCH 185/313] Fix style --- back/src/Controller/IoSocketController.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/back/src/Controller/IoSocketController.ts b/back/src/Controller/IoSocketController.ts index e7305d15..ca83a79e 100644 --- a/back/src/Controller/IoSocketController.ts +++ b/back/src/Controller/IoSocketController.ts @@ -470,7 +470,7 @@ export class IoSocketController { subMessage.setItemeventmessage(itemEventMessage); // Let's send the event without using the SocketIO room. - for (let user of world.getUsers().values()) { + for (const user of world.getUsers().values()) { const client = this.searchClientByIdOrFail(user.id); //client.emit(SocketIoEvent.ITEM_EVENT, itemEvent); emitInBatch(client, SocketIoEvent.ITEM_EVENT, subMessage); From 892d1555b8c191cf8c064a255bf1e08e3e8db9d5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20N=C3=A9grier?= Date: Fri, 25 Sep 2020 13:48:02 +0200 Subject: [PATCH 186/313] Adding "dump" controller and fixing issue with groups in PositionNotifier by delegating the PositionNotifier.updatePosition call to groups themselves --- .env.template | 4 +- back/package.json | 2 + back/src/App.ts | 2 + back/src/Controller/DebugController.ts | 58 +++++++++++++++++++++++ back/src/Controller/IoSocketController.ts | 4 ++ back/src/Model/Group.ts | 21 ++++++-- back/src/Model/PositionNotifier.ts | 2 +- back/src/Model/World.ts | 14 ++++-- back/src/Model/Zone.ts | 27 ++++++++--- back/yarn.lock | 10 ++++ docker-compose.yaml | 1 + 11 files changed, 127 insertions(+), 18 deletions(-) create mode 100644 back/src/Controller/DebugController.ts diff --git a/.env.template b/.env.template index 81044e99..d355ab67 100644 --- a/.env.template +++ b/.env.template @@ -1 +1,3 @@ -DEBUG_MODE=false \ No newline at end of file +DEBUG_MODE=false +JITSI_URL=meet.jit.si +ADMIN_API_TOKEN=123 diff --git a/back/package.json b/back/package.json index 6ad2842f..b1159144 100644 --- a/back/package.json +++ b/back/package.json @@ -38,6 +38,7 @@ "dependencies": { "axios": "^0.20.0", "body-parser": "^1.19.0", + "circular-json": "^0.5.9", "express": "^4.17.1", "generic-type-guard": "^3.2.0", "google-protobuf": "^3.13.0", @@ -51,6 +52,7 @@ "uuidv4": "^6.0.7" }, "devDependencies": { + "@types/circular-json": "^0.4.0", "@types/express": "^4.17.4", "@types/google-protobuf": "^3.7.3", "@types/http-status-codes": "^1.2.0", diff --git a/back/src/App.ts b/back/src/App.ts index d1f7392f..ac681ba3 100644 --- a/back/src/App.ts +++ b/back/src/App.ts @@ -8,6 +8,7 @@ import * as http from "http"; import {MapController} from "./Controller/MapController"; import {PrometheusController} from "./Controller/PrometheusController"; import {AdminController} from "./Controller/AdminController"; +import {DebugController} from "./Controller/DebugController"; class App { public app: Application; @@ -35,6 +36,7 @@ class App { this.mapController = new MapController(this.app); this.prometheusController = new PrometheusController(this.app, this.ioSocketController); this.adminController = new AdminController(this.app); + this.debugController = new DebugController(this.app, this.ioSocketController); } // TODO add session user diff --git a/back/src/Controller/DebugController.ts b/back/src/Controller/DebugController.ts new file mode 100644 index 00000000..ebc4894b --- /dev/null +++ b/back/src/Controller/DebugController.ts @@ -0,0 +1,58 @@ +import {Application, Request, Response} from "express"; +import {OK} from "http-status-codes"; +import {ADMIN_API_TOKEN, ADMIN_API_URL} from "../Enum/EnvironmentVariable"; +import Axios from "axios"; +import {DEBUG_MODE} from "../../../front/src/Enum/EnvironmentVariable"; +import {IoSocketController} from "_Controller/IoSocketController"; +import Flatted from "flatted"; +import {stringify} from "circular-json"; + +export class DebugController { + constructor(private App : Application, private ioSocketController: IoSocketController) { + this.getDump(); + } + + + getDump(){ + this.App.get("/dump", async (req: Request, res: Response) => { + if (req.query.token !== ADMIN_API_TOKEN) { + return res.status(401).send('Invalid token sent!'); + } + +/* const obj: any = {}; + + for (const [worldName, world] of this.ioSocketController.getWorlds().entries()) { + let users = new Array(); + for (const [worldName, world] of this.ioSocketController.getWorlds().entries()) { + + } + + + obj[worldName] = { + users: world.getUsers() + }; + }*/ + + return res.status(OK).contentType('application/json').send(stringify( + this.ioSocketController.getWorlds(), + (key: any, value: any) => { + if(value instanceof Map) { + const obj: any = {}; + for (const [mapKey, mapValue] of value.entries()) { + obj[mapKey] = mapValue; + } + return obj; + } else if(value instanceof Set) { + const obj: Array = []; + for (const [setKey, setValue] of value.entries()) { + obj.push(setValue); + } + return obj; + } else { + return value; + } + } + )); + }); + } +} diff --git a/back/src/Controller/IoSocketController.ts b/back/src/Controller/IoSocketController.ts index ca83a79e..7111e7d2 100644 --- a/back/src/Controller/IoSocketController.ts +++ b/back/src/Controller/IoSocketController.ts @@ -757,4 +757,8 @@ export class IoSocketController { Client.leave(Client.webRtcRoomId); delete Client.webRtcRoomId; } + + public getWorlds(): Map { + return this.Worlds; + } } diff --git a/back/src/Model/Group.ts b/back/src/Model/Group.ts index 4364455d..d08e6d90 100644 --- a/back/src/Model/Group.ts +++ b/back/src/Model/Group.ts @@ -3,6 +3,7 @@ import { User } from "./User"; import {PositionInterface} from "_Model/PositionInterface"; import {uuid} from "uuidv4"; import {Movable} from "_Model/Movable"; +import {PositionNotifier} from "_Model/PositionNotifier"; export class Group implements Movable { static readonly MAX_PER_GROUP = 4; @@ -11,16 +12,12 @@ export class Group implements Movable { private id: number; private users: Set; - private connectCallback: ConnectCallback; - private disconnectCallback: DisconnectCallback; private x!: number; private y!: number; - constructor(users: User[], connectCallback: ConnectCallback, disconnectCallback: DisconnectCallback) { + constructor(users: User[], private connectCallback: ConnectCallback, private disconnectCallback: DisconnectCallback, private positionNotifier: PositionNotifier) { this.users = new Set(); - this.connectCallback = connectCallback; - this.disconnectCallback = disconnectCallback; this.id = Group.nextId; Group.nextId++; @@ -53,6 +50,9 @@ export class Group implements Movable { * Computes the barycenter of all users (i.e. the center of the group) */ updatePosition(): void { + const oldX = this.x; + const oldY = this.y; + let x = 0; let y = 0; // Let's compute the barycenter of all users. @@ -67,6 +67,13 @@ export class Group implements Movable { } this.x = x; this.y = y; + + if (oldX === undefined) { + // TODO: do we need a "create" + this.positionNotifier.updatePosition(this, {x, y}, {x, y}); + } else { + this.positionNotifier.updatePosition(this, {x, y}, {x: oldX, y: oldY}); + } } isFull(): boolean { @@ -93,6 +100,10 @@ export class Group implements Movable { } user.group = undefined; + if (this.users.size !== 0) { + this.updatePosition(); + } + // Broadcast on the right event this.disconnectCallback(user.id, this); } diff --git a/back/src/Model/PositionNotifier.ts b/back/src/Model/PositionNotifier.ts index 0e5b4b2f..0c30fe30 100644 --- a/back/src/Model/PositionNotifier.ts +++ b/back/src/Model/PositionNotifier.ts @@ -117,7 +117,7 @@ export class PositionNotifier { let zone = this.zones[j][i]; if (zone === undefined) { - zone = new Zone(this.onUserEnters, this.onUserMoves, this.onUserLeaves); + zone = new Zone(this.onUserEnters, this.onUserMoves, this.onUserLeaves, i, j); this.zones[j][i] = zone; } return zone; diff --git a/back/src/Model/World.ts b/back/src/Model/World.ts index 321b3e1b..bbc472a0 100644 --- a/back/src/Model/World.ts +++ b/back/src/Model/World.ts @@ -93,6 +93,10 @@ export class World { user.position = userPosition; user.group?.updatePosition(); + /*if (user.group !== undefined) { + // TODO: positionNotifier should be notified by the group itself when it moves!!! + this.positionNotifier.updatePosition(user.group, user.group.getPosition(), oldGroupPosition ? oldGroupPosition : user.group.getPosition()); + }*/ if (user.silent) { return; @@ -112,7 +116,7 @@ export class World { const group: Group = new Group([ user, closestUser - ], this.connectCallback, this.disconnectCallback); + ], this.connectCallback, this.disconnectCallback, this.positionNotifier); this.groups.add(group); } } @@ -127,9 +131,9 @@ export class World { } // At the very end, if the user is part of a group, let's call the callback to update group position - if (user.group !== undefined) { + /*if (user.group !== undefined) { this.positionNotifier.updatePosition(user.group, user.group.getPosition(), oldGroupPosition ? oldGroupPosition : user.group.getPosition()); - } + }*/ } setSilent(socket: Identificable, silent: boolean) { @@ -162,6 +166,7 @@ export class World { if (group === undefined) { throw new Error("The user is part of no group"); } + const oldPosition = group.getPosition(); group.leave(user); if (group.isEmpty()) { this.positionNotifier.leave(group); @@ -171,7 +176,8 @@ export class World { } this.groups.delete(group); } else { - this.positionNotifier.updatePosition(group, group.getPosition(), group.getPosition()); + group.updatePosition(); + //this.positionNotifier.updatePosition(group, group.getPosition(), oldPosition); } } diff --git a/back/src/Model/Zone.ts b/back/src/Model/Zone.ts index 9933637c..36551b39 100644 --- a/back/src/Model/Zone.ts +++ b/back/src/Model/Zone.ts @@ -1,6 +1,7 @@ import {User} from "./User"; import {PositionInterface} from "_Model/PositionInterface"; -import {Movable} from "_Model/Movable"; +import {Movable} from "./Movable"; +import {Group} from "./Group"; export type EntersCallback = (thing: Movable, listener: User) => void; export type MovesCallback = (thing: Movable, position: PositionInterface, listener: User) => void; @@ -10,14 +11,27 @@ export class Zone { private things: Set = new Set(); private listeners: Set = new Set(); - constructor(private onEnters: EntersCallback, private onMoves: MovesCallback, private onLeaves: LeavesCallback) { + /** + * @param x For debugging purpose only + * @param y For debugging purpose only + */ + constructor(private onEnters: EntersCallback, private onMoves: MovesCallback, private onLeaves: LeavesCallback, private x: number, private y: number) { } /** * A user/thing leaves the zone */ public leave(thing: Movable, newZone: Zone|null) { - this.things.delete(thing); + const result = this.things.delete(thing); + if (!result) { + if (thing instanceof User) { + console.error('Could not find user in zone '+thing.id); + } + if (thing instanceof Group) { + console.error('Could not find group '+thing.getId()+' in zone ('+this.x+','+this.y+'). Position of group: ('+thing.getPosition().x+','+thing.getPosition().y+')'); + } + + } this.notifyLeft(thing, newZone); } @@ -34,13 +48,13 @@ export class Zone { public enter(thing: Movable, oldZone: Zone|null, position: PositionInterface) { this.things.add(thing); - this.notifyUserEnter(thing, oldZone, position); + this.notifyEnter(thing, oldZone, position); } /** * Notify listeners of this zone that this user entered */ - private notifyUserEnter(thing: Movable, oldZone: Zone|null, position: PositionInterface) { + private notifyEnter(thing: Movable, oldZone: Zone|null, position: PositionInterface) { for (const listener of this.listeners) { if (listener === thing) { continue; @@ -56,8 +70,7 @@ export class Zone { public move(thing: Movable, position: PositionInterface) { if (!this.things.has(thing)) { this.things.add(thing); - const foo = this.things; - this.notifyUserEnter(thing, null, position); + this.notifyEnter(thing, null, position); return; } diff --git a/back/yarn.lock b/back/yarn.lock index cb25dc86..3731547d 100644 --- a/back/yarn.lock +++ b/back/yarn.lock @@ -27,6 +27,11 @@ "@types/connect" "*" "@types/node" "*" +"@types/circular-json@^0.4.0": + version "0.4.0" + resolved "https://registry.yarnpkg.com/@types/circular-json/-/circular-json-0.4.0.tgz#7401f7e218cfe87ad4c43690da5658b9acaf51be" + integrity sha512-7+kYB7x5a7nFWW1YPBh3KxhwKfiaI4PbZ1RvzBU91LZy7lWJO822CI+pqzSre/DZ7KsCuMKdHnLHHFu8AyXbQg== + "@types/color-name@^1.1.1": version "1.1.1" resolved "https://registry.yarnpkg.com/@types/color-name/-/color-name-1.1.1.tgz#1c1261bbeaa10a8055bbc5d8ab84b7b2afc846a0" @@ -359,6 +364,11 @@ chardet@^0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" +circular-json@^0.5.9: + version "0.5.9" + resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.5.9.tgz#932763ae88f4f7dead7a0d09c8a51a4743a53b1d" + integrity sha512-4ivwqHpIFJZBuhN3g/pEcdbnGUywkBblloGbkglyloVjjR3uT6tieI89MVOfbP2tHX5sgb01FuLgAOzebNlJNQ== + cli-cursor@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" diff --git a/docker-compose.yaml b/docker-compose.yaml index a37fe28f..ffc846e4 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -73,6 +73,7 @@ services: STARTUP_COMMAND_1: yarn install SECRET_KEY: yourSecretKey ALLOW_ARTILLERY: "true" + ADMIN_API_TOKEN: "$ADMIN_API_TOKEN" volumes: - ./back:/usr/src/app labels: From 23cea1c8357aaef5b1222dd637db92727b70a00e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20N=C3=A9grier?= Date: Fri, 25 Sep 2020 15:25:06 +0200 Subject: [PATCH 187/313] Migrating position notification into the User class --- back/src/App.ts | 1 + back/src/Model/Group.ts | 8 +++--- back/src/Model/PositionNotifier.ts | 7 +++++ back/src/Model/User.ts | 15 ++++++++-- back/src/Model/World.ts | 32 ++++++++++------------ back/src/Model/Zone.ts | 4 +-- back/tests/PositionNotifierTest.ts | 44 +++++++++++++----------------- 7 files changed, 59 insertions(+), 52 deletions(-) diff --git a/back/src/App.ts b/back/src/App.ts index ac681ba3..a2aa91a5 100644 --- a/back/src/App.ts +++ b/back/src/App.ts @@ -18,6 +18,7 @@ class App { public mapController: MapController; public prometheusController: PrometheusController; private adminController: AdminController; + private debugController: DebugController; constructor() { this.app = express(); diff --git a/back/src/Model/Group.ts b/back/src/Model/Group.ts index d08e6d90..f2e5feb1 100644 --- a/back/src/Model/Group.ts +++ b/back/src/Model/Group.ts @@ -57,8 +57,9 @@ export class Group implements Movable { let y = 0; // Let's compute the barycenter of all users. this.users.forEach((user: User) => { - x += user.position.x; - y += user.position.y; + const position = user.getPosition(); + x += position.x; + y += position.y; }); x /= this.users.size; y /= this.users.size; @@ -69,8 +70,7 @@ export class Group implements Movable { this.y = y; if (oldX === undefined) { - // TODO: do we need a "create" - this.positionNotifier.updatePosition(this, {x, y}, {x, y}); + this.positionNotifier.enter(this); } else { this.positionNotifier.updatePosition(this, {x, y}, {x: oldX, y: oldY}); } diff --git a/back/src/Model/PositionNotifier.ts b/back/src/Model/PositionNotifier.ts index 0c30fe30..215d6ee6 100644 --- a/back/src/Model/PositionNotifier.ts +++ b/back/src/Model/PositionNotifier.ts @@ -74,6 +74,13 @@ export class PositionNotifier { return things; } + public enter(thing: Movable): void { + const position = thing.getPosition(); + const zoneDesc = this.getZoneDescriptorFromCoordinates(position.x, position.y); + const zone = this.getZone(zoneDesc.i, zoneDesc.j); + zone.enter(thing, null, position); + } + public updatePosition(thing: Movable, newPosition: PositionInterface, oldPosition: PositionInterface): void { // Did we change zone? const oldZoneDesc = this.getZoneDescriptorFromCoordinates(oldPosition.x, oldPosition.y); diff --git a/back/src/Model/User.ts b/back/src/Model/User.ts index b147e4be..2396c4d8 100644 --- a/back/src/Model/User.ts +++ b/back/src/Model/User.ts @@ -3,6 +3,7 @@ import { PointInterface } from "./Websocket/PointInterface"; import {Zone} from "_Model/Zone"; import {Movable} from "_Model/Movable"; import {PositionInterface} from "_Model/PositionInterface"; +import {PositionNotifier} from "_Model/PositionNotifier"; export class User implements Movable { public listenedZones: Set; @@ -10,14 +11,22 @@ export class User implements Movable { public constructor( public id: number, - public position: PointInterface, + private position: PointInterface, public silent: boolean, - + private positionNotifier: PositionNotifier ) { this.listenedZones = new Set(); + + this.positionNotifier.enter(this); } - public getPosition(): PositionInterface { + public getPosition(): PointInterface { return this.position; } + + public setPosition(position: PointInterface): void { + const oldPosition = this.position; + this.position = position; + this.positionNotifier.updatePosition(this, position, oldPosition); + } } diff --git a/back/src/Model/World.ts b/back/src/Model/World.ts index bbc472a0..75ac1bdc 100644 --- a/back/src/Model/World.ts +++ b/back/src/Model/World.ts @@ -56,9 +56,11 @@ export class World { } public join(socket : Identificable, userPosition: PointInterface): void { - this.users.set(socket.userId, new User(socket.userId, userPosition, false)); + const user = new User(socket.userId, userPosition, false, this.positionNotifier); + this.users.set(socket.userId, user); // Let's call update position to trigger the join / leave room - this.updatePosition(socket, userPosition); + //this.updatePosition(socket, userPosition); + this.updateUserGroup(user); } public leave(user : Identificable){ @@ -87,16 +89,13 @@ export class World { return; } - this.positionNotifier.updatePosition(user, userPosition, user.position); + user.setPosition(userPosition); - const oldGroupPosition = user.group?.getPosition(); + this.updateUserGroup(user); + } - user.position = userPosition; + private updateUserGroup(user: User): void { user.group?.updatePosition(); - /*if (user.group !== undefined) { - // TODO: positionNotifier should be notified by the group itself when it moves!!! - this.positionNotifier.updatePosition(user.group, user.group.getPosition(), oldGroupPosition ? oldGroupPosition : user.group.getPosition()); - }*/ if (user.silent) { return; @@ -124,16 +123,11 @@ export class World { } else { // If the user is part of a group: // should he leave the group? - const distance = World.computeDistanceBetweenPositions(user.position, user.group.getPosition()); + const distance = World.computeDistanceBetweenPositions(user.getPosition(), user.group.getPosition()); if (distance > this.groupRadius) { this.leaveGroup(user); } } - - // At the very end, if the user is part of a group, let's call the callback to update group position - /*if (user.group !== undefined) { - this.positionNotifier.updatePosition(user.group, user.group.getPosition(), oldGroupPosition ? oldGroupPosition : user.group.getPosition()); - }*/ } setSilent(socket: Identificable, silent: boolean) { @@ -152,7 +146,7 @@ export class World { } if (!silent) { // If we are back to life, let's trigger a position update to see if we can join some group. - this.updatePosition(socket, user.position); + this.updatePosition(socket, user.getPosition()); } } @@ -251,7 +245,7 @@ export class World { if (group.isFull()) { return; } - const distance = World.computeDistanceBetweenPositions(user.position, group.getPosition()); + const distance = World.computeDistanceBetweenPositions(user.getPosition(), group.getPosition()); if(distance <= minimumDistanceFound && distance <= this.groupRadius) { minimumDistanceFound = distance; matchingItem = group; @@ -263,7 +257,9 @@ export class World { public static computeDistance(user1: User, user2: User): number { - return Math.sqrt(Math.pow(user2.position.x - user1.position.x, 2) + Math.pow(user2.position.y - user1.position.y, 2)); + const user1Position = user1.getPosition(); + const user2Position = user2.getPosition(); + return Math.sqrt(Math.pow(user2Position.x - user1Position.x, 2) + Math.pow(user2Position.y - user1Position.y, 2)); } public static computeDistanceBetweenPositions(position1: PositionInterface, position2: PositionInterface): number diff --git a/back/src/Model/Zone.ts b/back/src/Model/Zone.ts index 36551b39..4266c892 100644 --- a/back/src/Model/Zone.ts +++ b/back/src/Model/Zone.ts @@ -25,10 +25,10 @@ export class Zone { const result = this.things.delete(thing); if (!result) { if (thing instanceof User) { - console.error('Could not find user in zone '+thing.id); + throw new Error('Could not find user in zone '+thing.id); } if (thing instanceof Group) { - console.error('Could not find group '+thing.getId()+' in zone ('+this.x+','+this.y+'). Position of group: ('+thing.getPosition().x+','+thing.getPosition().y+')'); + throw new Error('Could not find group '+thing.getId()+' in zone ('+this.x+','+this.y+'). Position of group: ('+thing.getPosition().x+','+thing.getPosition().y+')'); } } diff --git a/back/tests/PositionNotifierTest.ts b/back/tests/PositionNotifierTest.ts index 643dd938..e65d025d 100644 --- a/back/tests/PositionNotifierTest.ts +++ b/back/tests/PositionNotifierTest.ts @@ -9,14 +9,6 @@ import {Zone} from "_Model/Zone"; import {Movable} from "_Model/Movable"; import {PositionInterface} from "_Model/PositionInterface"; -function move(user: User, x: number, y: number, positionNotifier: PositionNotifier): void { - positionNotifier.updatePosition(user, { - x, - y - }, user.position); - user.position.x = x; - user.position.y = y; -} describe("PositionNotifier", () => { it("should receive notifications when player moves", () => { @@ -37,14 +29,14 @@ describe("PositionNotifier", () => { y: 500, moving: false, direction: 'down' - }, false); + }, false, positionNotifier); const user2 = new User(2, { x: -9999, y: -9999, moving: false, direction: 'down' - }, false); + }, false, positionNotifier); positionNotifier.setViewport(user1, { left: 200, @@ -53,21 +45,21 @@ describe("PositionNotifier", () => { bottom: 500 }); - move(user2, 500, 500, positionNotifier); + user2.setPosition({x: 500, y: 500, direction: 'down', moving: false}); expect(enterTriggered).toBe(true); expect(moveTriggered).toBe(false); enterTriggered = false; // Move inside the zone - move(user2, 501, 500, positionNotifier); + user2.setPosition({x:501, y:500, direction: 'down', moving: false}); expect(enterTriggered).toBe(false); expect(moveTriggered).toBe(true); moveTriggered = false; // Move out of the zone in a zone that we don't track - move(user2, 901, 500, positionNotifier); + user2.setPosition({x: 901, y: 500, direction: 'down', moving: false}); expect(enterTriggered).toBe(false); expect(moveTriggered).toBe(false); @@ -75,14 +67,14 @@ describe("PositionNotifier", () => { leaveTriggered = false; // Move back in - move(user2, 500, 500, positionNotifier); + user2.setPosition({x: 500, y: 500, direction: 'down', moving: false}); expect(enterTriggered).toBe(true); expect(moveTriggered).toBe(false); expect(leaveTriggered).toBe(false); enterTriggered = false; // Move out of the zone in a zone that we do track - move(user2, 200, 500, positionNotifier); + user2.setPosition({x: 200, y: 500, direction: 'down', moving: false}); expect(enterTriggered).toBe(false); expect(moveTriggered).toBe(true); expect(leaveTriggered).toBe(false); @@ -115,14 +107,14 @@ describe("PositionNotifier", () => { y: 500, moving: false, direction: 'down' - }, false); + }, false, positionNotifier); const user2 = new User(2, { - x: -9999, - y: -9999, + x: 0, + y: 0, moving: false, direction: 'down' - }, false); + }, false, positionNotifier); let newUsers = positionNotifier.setViewport(user1, { left: 200, @@ -131,14 +123,16 @@ describe("PositionNotifier", () => { bottom: 500 }); - expect(newUsers.length).toBe(0); - - move(user2, 500, 500, positionNotifier); - + expect(newUsers.length).toBe(2); expect(enterTriggered).toBe(true); - expect(moveTriggered).toBe(false); enterTriggered = false; + user2.setPosition({x: 500, y: 500, direction: 'down', moving: false}); + + expect(enterTriggered).toBe(false); + expect(moveTriggered).toBe(true); + moveTriggered = false; + // Move the viewport but the user stays inside. positionNotifier.setViewport(user1, { left: 201, @@ -176,6 +170,6 @@ describe("PositionNotifier", () => { expect(moveTriggered).toBe(false); expect(leaveTriggered).toBe(false); enterTriggered = false; - expect(newUsers.length).toBe(1); + expect(newUsers.length).toBe(2); }); }) From 48469e3de3102e6bbbda421061a66e3ab050e7e4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20N=C3=A9grier?= Date: Fri, 25 Sep 2020 15:42:05 +0200 Subject: [PATCH 188/313] Fixing linting --- back/src/Controller/DebugController.ts | 22 ++++------------------ 1 file changed, 4 insertions(+), 18 deletions(-) diff --git a/back/src/Controller/DebugController.ts b/back/src/Controller/DebugController.ts index ebc4894b..1ef3e9c8 100644 --- a/back/src/Controller/DebugController.ts +++ b/back/src/Controller/DebugController.ts @@ -14,36 +14,22 @@ export class DebugController { getDump(){ - this.App.get("/dump", async (req: Request, res: Response) => { + this.App.get("/dump", (req: Request, res: Response) => { if (req.query.token !== ADMIN_API_TOKEN) { return res.status(401).send('Invalid token sent!'); } -/* const obj: any = {}; - - for (const [worldName, world] of this.ioSocketController.getWorlds().entries()) { - let users = new Array(); - for (const [worldName, world] of this.ioSocketController.getWorlds().entries()) { - - } - - - obj[worldName] = { - users: world.getUsers() - }; - }*/ - return res.status(OK).contentType('application/json').send(stringify( this.ioSocketController.getWorlds(), - (key: any, value: any) => { + (key: unknown, value: unknown) => { if(value instanceof Map) { - const obj: any = {}; + const obj: any = {}; // eslint-disable-line @typescript-eslint/no-explicit-any for (const [mapKey, mapValue] of value.entries()) { obj[mapKey] = mapValue; } return obj; } else if(value instanceof Set) { - const obj: Array = []; + const obj: Array = []; for (const [setKey, setValue] of value.entries()) { obj.push(setValue); } From dd4d5db54fb2506c286d82e2a648e08b8978967c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20N=C3=A9grier?= Date: Fri, 25 Sep 2020 15:42:55 +0200 Subject: [PATCH 189/313] Fixing build --- back/src/Controller/DebugController.ts | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/back/src/Controller/DebugController.ts b/back/src/Controller/DebugController.ts index 1ef3e9c8..54544f6c 100644 --- a/back/src/Controller/DebugController.ts +++ b/back/src/Controller/DebugController.ts @@ -1,10 +1,7 @@ import {Application, Request, Response} from "express"; import {OK} from "http-status-codes"; -import {ADMIN_API_TOKEN, ADMIN_API_URL} from "../Enum/EnvironmentVariable"; -import Axios from "axios"; -import {DEBUG_MODE} from "../../../front/src/Enum/EnvironmentVariable"; +import {ADMIN_API_TOKEN} from "../Enum/EnvironmentVariable"; import {IoSocketController} from "_Controller/IoSocketController"; -import Flatted from "flatted"; import {stringify} from "circular-json"; export class DebugController { From af4611ed292093e01e9a118226eefd175ff36c78 Mon Sep 17 00:00:00 2001 From: arp Date: Fri, 25 Sep 2020 18:29:22 +0200 Subject: [PATCH 190/313] rewrote the login workflow --- back/src/Controller/AdminController.ts | 36 ---- back/src/Controller/AuthenticateController.ts | 65 +++++-- benchmark/index.ts | 4 +- front/src/Connexion/ConnectionManager.ts | 53 ++++++ front/src/Connexion/ConnexionModels.ts | 117 ++++++++++++ .../RoomConnection.ts} | 178 +++--------------- front/src/Network/ProtobufClientUtils.ts | 2 +- front/src/Phaser/Entity/RemotePlayer.ts | 2 +- front/src/Phaser/Game/AddPlayerInterface.ts | 2 +- front/src/Phaser/Game/GameManager.ts | 27 ++- front/src/Phaser/Game/GameScene.ts | 15 +- front/src/Phaser/Game/PlayerMovement.ts | 2 +- front/src/Phaser/Login/EnableCameraScene.ts | 7 +- .../src/Phaser/Login/SelectCharacterScene.ts | 2 - front/src/Phaser/Player/Player.ts | 6 +- front/src/WebRtc/ScreenSharingPeer.ts | 4 +- front/src/WebRtc/SimplePeer.ts | 8 +- front/src/WebRtc/VideoPeer.ts | 4 +- front/src/index.ts | 5 +- front/src/register.ts | 29 --- 20 files changed, 290 insertions(+), 278 deletions(-) delete mode 100644 back/src/Controller/AdminController.ts create mode 100644 front/src/Connexion/ConnectionManager.ts create mode 100644 front/src/Connexion/ConnexionModels.ts rename front/src/{Connection.ts => Connexion/RoomConnection.ts} (69%) delete mode 100644 front/src/register.ts diff --git a/back/src/Controller/AdminController.ts b/back/src/Controller/AdminController.ts deleted file mode 100644 index c4905a8a..00000000 --- a/back/src/Controller/AdminController.ts +++ /dev/null @@ -1,36 +0,0 @@ -import {Application, Request, Response} from "express"; -import {OK} from "http-status-codes"; -import {ADMIN_API_TOKEN, ADMIN_API_URL} from "../Enum/EnvironmentVariable"; -import Axios from "axios"; - -export class AdminController { - App : Application; - - constructor(App : Application) { - this.App = App; - this.getLoginUrlByToken(); - } - - - getLoginUrlByToken(){ - this.App.get("/register/:token", async (req: Request, res: Response) => { - if (!ADMIN_API_URL) { - return res.status(500).send('No admin backoffice set!'); - } - const token:string = req.params.token; - - let response = null - try { - response = await Axios.get(ADMIN_API_URL+'/api/login-url/'+token, { headers: {"Authorization" : `${ADMIN_API_TOKEN}`} }) - } catch (e) { - console.log(e.message) - return res.status(e.status || 500).send('An error happened'); - } - - const organizationSlug = response.data.organizationSlug; - const worldSlug = response.data.worldSlug; - const roomSlug = response.data.roomSlug; - return res.status(OK).send({organizationSlug, worldSlug, roomSlug}); - }); - } -} diff --git a/back/src/Controller/AuthenticateController.ts b/back/src/Controller/AuthenticateController.ts index 83880f45..26cc6ae5 100644 --- a/back/src/Controller/AuthenticateController.ts +++ b/back/src/Controller/AuthenticateController.ts @@ -1,8 +1,9 @@ import {Application, Request, Response} from "express"; import Jwt from "jsonwebtoken"; -import {BAD_REQUEST, OK} from "http-status-codes"; -import {SECRET_KEY, URL_ROOM_STARTED} from "../Enum/EnvironmentVariable"; //TODO fix import by "_Enum/..." +import {OK} from "http-status-codes"; +import {ADMIN_API_TOKEN, ADMIN_API_URL, SECRET_KEY, URL_ROOM_STARTED} from "../Enum/EnvironmentVariable"; //TODO fix import by "_Enum/..." import { uuid } from 'uuidv4'; +import Axios from "axios"; export interface TokenInterface { name: string, @@ -20,21 +21,53 @@ export class AuthenticateController { //permit to login on application. Return token to connect on Websocket IO. login(){ // For now, let's completely forget the /login route. - this.App.post("/login", (req: Request, res: Response) => { - const param = req.body; - /*if(!param.name){ - return res.status(BAD_REQUEST).send({ - message: "email parameter is empty" + this.App.post("/login", async (req: Request, res: Response) => { + //todo: what to do if the organizationMemberToken is already used? + const organizationMemberToken:string|null = req.body.organizationMemberToken; + + try { + let userUuid; + let mapUrlStart; + let newUrl = null; + + if (organizationMemberToken) { + if (!ADMIN_API_URL) { + return res.status(401).send('No admin backoffice set!'); + } + //todo: this call can fail if the corresponding world is not activated or if the token is invalid. Handle that case. + const response = await Axios.get(ADMIN_API_URL+'/api/login-url/'+organizationMemberToken, + { headers: {"Authorization" : `${ADMIN_API_TOKEN}`} } + ); + + userUuid = response.data.userUuid; + mapUrlStart = response.data.mapUrlStart; + newUrl = this.getNewUrlOnAdminAuth(response.data) + } else { + userUuid = uuid(); + mapUrlStart= URL_ROOM_STARTED; + newUrl = null; + } + + const authToken = Jwt.sign({userUuid: userUuid} as TokenInterface, SECRET_KEY, {expiresIn: '24h'}); + return res.status(OK).send({ + authToken, + userUuid, + mapUrlStart, + newUrl, }); - }*/ - //TODO check user email for The Coding Machine game - const userUuid = uuid(); - const token = Jwt.sign({name: param.name, userUuid: userUuid} as TokenInterface, SECRET_KEY, {expiresIn: '24h'}); - return res.status(OK).send({ - token: token, - mapUrlStart: URL_ROOM_STARTED, - userId: userUuid, - }); + + } catch (e) { + console.log(e.message) + return res.status(e.status || 500).send('An error happened'); + } + }); } + + getNewUrlOnAdminAuth(data:any): string { + const organizationSlug = data.organizationSlug; + const worldSlug = data.worldSlug; + const roomSlug = data.roomSlug; + return '/@/'+organizationSlug+'/'+worldSlug+'/'+roomSlug; + } } diff --git a/benchmark/index.ts b/benchmark/index.ts index 736a7bdc..921f4cbb 100644 --- a/benchmark/index.ts +++ b/benchmark/index.ts @@ -1,11 +1,11 @@ -import {Connection} from "../front/src/Connection"; +import {RoomConnection} from "../front/src/Connexion/Connection"; function sleep(ms) { return new Promise(resolve => setTimeout(resolve, ms)); } async function startOneUser(): Promise { - const connection = await Connection.createConnection('foo', ['male3']); + const connection = await RoomConnection.createConnection('foo', ['male3']); await connection.joinARoom('global__maps.workadventure.localhost/Floor0/floor0', 783, 170, 'down', false, { top: 0, diff --git a/front/src/Connexion/ConnectionManager.ts b/front/src/Connexion/ConnectionManager.ts new file mode 100644 index 00000000..cb70eef3 --- /dev/null +++ b/front/src/Connexion/ConnectionManager.ts @@ -0,0 +1,53 @@ +import Axios from "axios"; +import {API_URL} from "../Enum/EnvironmentVariable"; +import {RoomConnection} from "./RoomConnection"; + +class ConnectionManager { + private mapUrlStart: string|null = null; + + private authToken:string|null = null; + private userUuid: string|null = null; + private userName:string|null = null; + + public async init(): Promise { + const match = /\/register\/(.+)/.exec(window.location.toString()); + const organizationMemberToken = match ? match[1] : null; + const res = await Axios.post(`${API_URL}/login`, {organizationMemberToken}); + this.authToken = res.data.authToken; + this.userUuid = res.data.userUuid; + this.mapUrlStart = res.data.mapUrlStart; + const newUrl = res.data.newUrl; + + if (newUrl) { + history.pushState({}, '', newUrl); + } + } + + public async setUserName(name:string): Promise { + //todo + } + + public connectToRoomSocket(): Promise { + return Axios.post(`${API_URL}/connectToSocket`, {authToken: this.authToken}).then((res) => { + return new Promise((resolve, reject) => { + const connection = new RoomConnection(res.data.roomToken); + connection.onConnectError((error: object) => { + console.log('An error occurred while connecting to socket server. Retrying'); + reject(error); + }); + resolve(connection); + }); + }) + .catch((err) => { + // Let's retry in 4-6 seconds + return new Promise((resolve, reject) => { + setTimeout(() => { + //todo: allow a way to break recurrsion? + this.connectToRoomSocket().then((connection) => resolve(connection)); + }, 4000 + Math.floor(Math.random() * 2000) ); + }); + }); + } +} + +export const connectionManager = new ConnectionManager(); \ No newline at end of file diff --git a/front/src/Connexion/ConnexionModels.ts b/front/src/Connexion/ConnexionModels.ts new file mode 100644 index 00000000..794b9169 --- /dev/null +++ b/front/src/Connexion/ConnexionModels.ts @@ -0,0 +1,117 @@ +import {PlayerAnimationNames} from "../Phaser/Player/Animation"; +import {UserSimplePeerInterface} from "../WebRtc/SimplePeer"; +import {SignalData} from "simple-peer"; + +export enum EventMessage{ + WEBRTC_SIGNAL = "webrtc-signal", + WEBRTC_SCREEN_SHARING_SIGNAL = "webrtc-screen-sharing-signal", + WEBRTC_START = "webrtc-start", + JOIN_ROOM = "join-room", // bi-directional + USER_POSITION = "user-position", // From client to server + USER_MOVED = "user-moved", // From server to client + USER_LEFT = "user-left", // From server to client + MESSAGE_ERROR = "message-error", + WEBRTC_DISCONNECT = "webrtc-disconect", + GROUP_CREATE_UPDATE = "group-create-update", + GROUP_DELETE = "group-delete", + SET_PLAYER_DETAILS = "set-player-details", // Send the name and character to the server (on connect), receive back the id. + ITEM_EVENT = 'item-event', + + CONNECT_ERROR = "connect_error", + SET_SILENT = "set_silent", // Set or unset the silent mode for this user. + SET_VIEWPORT = "set-viewport", + BATCH = "batch", +} + +export interface PointInterface { + x: number; + y: number; + direction : string; + moving: boolean; +} + +export class Point implements PointInterface{ + constructor(public x : number, public y : number, public direction : string = PlayerAnimationNames.WalkDown, public moving : boolean = false) { + if(x === null || y === null){ + throw Error("position x and y cannot be null"); + } + } +} + +export interface MessageUserPositionInterface { + userId: number; + name: string; + characterLayers: string[]; + position: PointInterface; +} + +export interface MessageUserMovedInterface { + userId: number; + position: PointInterface; +} + +export interface MessageUserJoined { + userId: number; + name: string; + characterLayers: string[]; + position: PointInterface +} + +export interface PositionInterface { + x: number, + y: number +} + +export interface GroupCreatedUpdatedMessageInterface { + position: PositionInterface, + groupId: number +} + +export interface WebRtcStartMessageInterface { + roomId: string, + clients: UserSimplePeerInterface[] +} + +export interface WebRtcDisconnectMessageInterface { + userId: number +} + +export interface WebRtcSignalSentMessageInterface { + receiverId: number, + signal: SignalData +} + +export interface WebRtcSignalReceivedMessageInterface { + userId: number, + signal: SignalData +} + +export interface StartMapInterface { + mapUrlStart: string, + startInstance: string +} + +export interface ViewportInterface { + left: number, + top: number, + right: number, + bottom: number, +} + +export interface BatchedMessageInterface { + event: string, + payload: unknown +} + +export interface ItemEventMessageInterface { + itemId: number, + event: string, + state: unknown, + parameters: unknown +} + +export interface RoomJoinedMessageInterface { + users: MessageUserPositionInterface[], + groups: GroupCreatedUpdatedMessageInterface[], + items: { [itemId: number] : unknown } +} \ No newline at end of file diff --git a/front/src/Connection.ts b/front/src/Connexion/RoomConnection.ts similarity index 69% rename from front/src/Connection.ts rename to front/src/Connexion/RoomConnection.ts index 61b0c4e7..99ef7b4e 100644 --- a/front/src/Connection.ts +++ b/front/src/Connexion/RoomConnection.ts @@ -1,142 +1,34 @@ -import Axios from "axios"; -import {API_URL} from "./Enum/EnvironmentVariable"; -import {MessageUI} from "./Logger/MessageUI"; +import {API_URL} from "../Enum/EnvironmentVariable"; import { BatchMessage, GroupDeleteMessage, GroupUpdateMessage, ItemEventMessage, PositionMessage, SetPlayerDetailsMessage, UserJoinedMessage, UserLeftMessage, UserMovedMessage, UserMovesMessage, ViewportMessage -} from "./Messages/generated/messages_pb" +} from "../Messages/generated/messages_pb" const SocketIo = require('socket.io-client'); import Socket = SocketIOClient.Socket; -import {PlayerAnimationNames} from "./Phaser/Player/Animation"; -import {UserSimplePeerInterface} from "./WebRtc/SimplePeer"; -import {SignalData} from "simple-peer"; import Direction = PositionMessage.Direction; -import {ProtobufClientUtils} from "./Network/ProtobufClientUtils"; +import {ProtobufClientUtils} from "../Network/ProtobufClientUtils"; +import { + EventMessage, + GroupCreatedUpdatedMessageInterface, ItemEventMessageInterface, + MessageUserJoined, + RoomJoinedMessageInterface, + ViewportInterface, WebRtcDisconnectMessageInterface, + WebRtcSignalReceivedMessageInterface, + WebRtcSignalSentMessageInterface, + WebRtcStartMessageInterface +} from "./ConnexionModels"; -enum EventMessage{ - WEBRTC_SIGNAL = "webrtc-signal", - WEBRTC_SCREEN_SHARING_SIGNAL = "webrtc-screen-sharing-signal", - WEBRTC_START = "webrtc-start", - JOIN_ROOM = "join-room", // bi-directional - USER_POSITION = "user-position", // From client to server - USER_MOVED = "user-moved", // From server to client - USER_LEFT = "user-left", // From server to client - MESSAGE_ERROR = "message-error", - WEBRTC_DISCONNECT = "webrtc-disconect", - GROUP_CREATE_UPDATE = "group-create-update", - GROUP_DELETE = "group-delete", - SET_PLAYER_DETAILS = "set-player-details", // Send the name and character to the server (on connect), receive back the id. - ITEM_EVENT = 'item-event', - CONNECT_ERROR = "connect_error", - SET_SILENT = "set_silent", // Set or unset the silent mode for this user. - SET_VIEWPORT = "set-viewport", - BATCH = "batch", -} - -export interface PointInterface { - x: number; - y: number; - direction : string; - moving: boolean; -} - -export class Point implements PointInterface{ - constructor(public x : number, public y : number, public direction : string = PlayerAnimationNames.WalkDown, public moving : boolean = false) { - if(x === null || y === null){ - throw Error("position x and y cannot be null"); - } - } -} - -export interface MessageUserPositionInterface { - userId: number; - name: string; - characterLayers: string[]; - position: PointInterface; -} - -export interface MessageUserMovedInterface { - userId: number; - position: PointInterface; -} - -export interface MessageUserJoined { - userId: number; - name: string; - characterLayers: string[]; - position: PointInterface -} - -export interface PositionInterface { - x: number, - y: number -} - -export interface GroupCreatedUpdatedMessageInterface { - position: PositionInterface, - groupId: number -} - -export interface WebRtcStartMessageInterface { - roomId: string, - clients: UserSimplePeerInterface[] -} - -export interface WebRtcDisconnectMessageInterface { - userId: number -} - -export interface WebRtcSignalSentMessageInterface { - receiverId: number, - signal: SignalData -} - -export interface WebRtcSignalReceivedMessageInterface { - userId: number, - signal: SignalData -} - -export interface StartMapInterface { - mapUrlStart: string, - startInstance: string -} - -export interface ViewportInterface { - left: number, - top: number, - right: number, - bottom: number, -} - -export interface BatchedMessageInterface { - event: string, - payload: unknown -} - -export interface ItemEventMessageInterface { - itemId: number, - event: string, - state: unknown, - parameters: unknown -} - -export interface RoomJoinedMessageInterface { - users: MessageUserPositionInterface[], - groups: GroupCreatedUpdatedMessageInterface[], - items: { [itemId: number] : unknown } -} - -export class Connection implements Connection { +export class RoomConnection implements RoomConnection { private readonly socket: Socket; private userId: number|null = null; private batchCallbacks: Map = new Map(); - private constructor(token: string) { + public constructor(token: string) { this.socket = SocketIo(`${API_URL}`, { query: { @@ -190,38 +82,14 @@ export class Connection implements Connection { } }) } - - public static createConnection(name: string, characterLayersSelected: string[]): Promise { - return Axios.post(`${API_URL}/login`, {name: name}) - .then((res) => { - - return new Promise((resolve, reject) => { - const connection = new Connection(res.data.token); - - connection.onConnectError((error: object) => { - console.log('An error occurred while connecting to socket server. Retrying'); - reject(error); - }); - - const message = new SetPlayerDetailsMessage(); - message.setName(name); - message.setCharacterlayersList(characterLayersSelected); - connection.socket.emit(EventMessage.SET_PLAYER_DETAILS, message.serializeBinary().buffer, (id: number) => { - connection.userId = id; - }); - - resolve(connection); - }); - }) - .catch((err) => { - // Let's retry in 4-6 seconds - return new Promise((resolve, reject) => { - setTimeout(() => { - Connection.createConnection(name, characterLayersSelected).then((connection) => resolve(connection)) - .catch((error) => reject(error)); - }, 4000 + Math.floor(Math.random() * 2000) ); - }); - }); + + public emitPlayerDetailsMessage(characterLayersSelected: string[]) { + const message = new SetPlayerDetailsMessage(); + message.setName(name); + message.setCharacterlayersList(characterLayersSelected); + this.socket.emit(EventMessage.SET_PLAYER_DETAILS, message.serializeBinary().buffer, (id: number) => { + this.userId = id; + }); } public closeConnection(): void { diff --git a/front/src/Network/ProtobufClientUtils.ts b/front/src/Network/ProtobufClientUtils.ts index 1eb5b923..6a402e97 100644 --- a/front/src/Network/ProtobufClientUtils.ts +++ b/front/src/Network/ProtobufClientUtils.ts @@ -1,6 +1,6 @@ import {PositionMessage} from "../Messages/generated/messages_pb"; -import {PointInterface} from "../Connection"; import Direction = PositionMessage.Direction; +import {PointInterface} from "../Connexion/ConnexionModels"; export class ProtobufClientUtils { diff --git a/front/src/Phaser/Entity/RemotePlayer.ts b/front/src/Phaser/Entity/RemotePlayer.ts index 00a3e4c4..ba0a74d2 100644 --- a/front/src/Phaser/Entity/RemotePlayer.ts +++ b/front/src/Phaser/Entity/RemotePlayer.ts @@ -1,5 +1,5 @@ import {GameScene} from "../Game/GameScene"; -import {PointInterface} from "../../Connection"; +import {PointInterface} from "../../Connexion/ConnexionModels"; import {Character} from "../Entity/Character"; /** diff --git a/front/src/Phaser/Game/AddPlayerInterface.ts b/front/src/Phaser/Game/AddPlayerInterface.ts index d0ed2dad..519116ac 100644 --- a/front/src/Phaser/Game/AddPlayerInterface.ts +++ b/front/src/Phaser/Game/AddPlayerInterface.ts @@ -1,4 +1,4 @@ -import {PointInterface} from "../../Connection"; +import {PointInterface} from "../../Connexion/Connection"; export interface AddPlayerInterface { userId: number; diff --git a/front/src/Phaser/Game/GameManager.ts b/front/src/Phaser/Game/GameManager.ts index db119a13..34a0bdf6 100644 --- a/front/src/Phaser/Game/GameManager.ts +++ b/front/src/Phaser/Game/GameManager.ts @@ -1,9 +1,10 @@ import {GameScene} from "./GameScene"; import { StartMapInterface -} from "../../Connection"; +} from "../../Connexion/ConnexionModels"; import Axios from "axios"; import {API_URL} from "../../Enum/EnvironmentVariable"; +import {adminDataFetchPromise} from "../../register"; export interface HasMovedEvent { direction: string; @@ -29,13 +30,23 @@ export class GameManager { } loadStartMap() : Promise { - return Axios.get(`${API_URL}/start-map`) - .then((res) => { - return res.data; - }).catch((err) => { - console.error(err); - throw err; - }); + if (adminDataFetchPromise) { + return adminDataFetchPromise.then(data => { + return { + mapUrlStart: data.mapUrlStart, + startInstance: data.startInstance, + } + }) + } else { + //todo: remove this call, merge with the admin workflow? + return Axios.get(`${API_URL}/start-map`) + .then((res) => { + return res.data; + }).catch((err) => { + console.error(err); + throw err; + }); + } } getPlayerName(): string { diff --git a/front/src/Phaser/Game/GameScene.ts b/front/src/Phaser/Game/GameScene.ts index f971a1e3..163eb3dc 100644 --- a/front/src/Phaser/Game/GameScene.ts +++ b/front/src/Phaser/Game/GameScene.ts @@ -1,6 +1,5 @@ import {GameManager, gameManager, HasMovedEvent} from "./GameManager"; import { - Connection, GroupCreatedUpdatedMessageInterface, MessageUserJoined, MessageUserMovedInterface, @@ -8,7 +7,7 @@ import { PointInterface, PositionInterface, RoomJoinedMessageInterface -} from "../../Connection"; +} from "../../Connexion/ConnexionModels"; import {CurrentGamerInterface, hasMovedEventName, Player} from "../Player/Player"; import {DEBUG_MODE, JITSI_URL, POSITION_DELAY, RESOLUTION, ZOOM_LEVEL} from "../../Enum/EnvironmentVariable"; import { @@ -42,6 +41,8 @@ import {ActionableItem} from "../Items/ActionableItem"; import {UserInputManager} from "../UserInput/UserInputManager"; import {UserMovedMessage} from "../../Messages/generated/messages_pb"; import {ProtobufClientUtils} from "../../Network/ProtobufClientUtils"; +import {connectionManager} from "../../Connexion/ConnectionManager"; +import {RoomConnection} from "../../Connexion/RoomConnection"; export enum Textures { @@ -100,9 +101,9 @@ export class GameScene extends Phaser.Scene implements CenterListener { pendingEvents: Queue = new Queue(); private initPosition: PositionInterface|null = null; private playersPositionInterpolator = new PlayersPositionInterpolator(); - private connection!: Connection; + private connection!: RoomConnection; private simplePeer!: SimplePeer; - private connectionPromise!: Promise + private connectionPromise!: Promise private connectionAnswerPromise: Promise; private connectionAnswerPromiseResolve!: (value?: RoomJoinedMessageInterface | PromiseLike) => void; // A promise that will resolve when the "create" method is called (signaling loading is ended) @@ -202,8 +203,10 @@ export class GameScene extends Phaser.Scene implements CenterListener { this.load.bitmapFont('main_font', 'resources/fonts/arcade.png', 'resources/fonts/arcade.xml'); - this.connectionPromise = Connection.createConnection(gameManager.getPlayerName(), gameManager.getCharacterSelected()).then((connection : Connection) => { + this.connectionPromise = connectionManager.connectToRoomSocket().then((connection : RoomConnection) => { this.connection = connection; + + this.connection.emitPlayerDetailsMessage(gameManager.getCharacterSelected()) connection.onUserJoins((message: MessageUserJoined) => { const userMessage: AddPlayerInterface = { @@ -778,7 +781,7 @@ export class GameScene extends Phaser.Scene implements CenterListener { this.createCollisionObject(); //join room - this.connectionPromise.then((connection: Connection) => { + this.connectionPromise.then((connection: RoomConnection) => { const camera = this.cameras.main; connection.joinARoom(this.RoomId, this.startX, diff --git a/front/src/Phaser/Game/PlayerMovement.ts b/front/src/Phaser/Game/PlayerMovement.ts index 56c4f113..eb1a5d1b 100644 --- a/front/src/Phaser/Game/PlayerMovement.ts +++ b/front/src/Phaser/Game/PlayerMovement.ts @@ -1,6 +1,6 @@ import {HasMovedEvent} from "./GameManager"; import {MAX_EXTRAPOLATION_TIME} from "../../Enum/EnvironmentVariable"; -import {PositionInterface} from "../../Connection"; +import {PositionInterface} from "../../Connexion/ConnexionModels"; export class PlayerMovement { public constructor(private startPosition: PositionInterface, private startTick: number, private endPosition: HasMovedEvent, private endTick: number) { diff --git a/front/src/Phaser/Login/EnableCameraScene.ts b/front/src/Phaser/Login/EnableCameraScene.ts index 6fc1cd54..6ac1ad47 100644 --- a/front/src/Phaser/Login/EnableCameraScene.ts +++ b/front/src/Phaser/Login/EnableCameraScene.ts @@ -1,12 +1,9 @@ import {gameManager} from "../Game/GameManager"; import {TextField} from "../Components/TextField"; -import {ClickButton} from "../Components/ClickButton"; import Image = Phaser.GameObjects.Image; -import Rectangle = Phaser.GameObjects.Rectangle; -import {PLAYER_RESOURCES, PlayerResourceDescriptionInterface} from "../Entity/Character"; import {GameSceneInitInterface} from "../Game/GameScene"; -import {StartMapInterface} from "../../Connection"; -import {mediaManager, MediaManager} from "../../WebRtc/MediaManager"; +import {StartMapInterface} from "../../Connexion/ConnexionModels"; +import {mediaManager} from "../../WebRtc/MediaManager"; import {RESOLUTION} from "../../Enum/EnvironmentVariable"; import {SoundMeter} from "../Components/SoundMeter"; import {SoundMeterSprite} from "../Components/SoundMeterSprite"; diff --git a/front/src/Phaser/Login/SelectCharacterScene.ts b/front/src/Phaser/Login/SelectCharacterScene.ts index 64285766..8d3c7ab1 100644 --- a/front/src/Phaser/Login/SelectCharacterScene.ts +++ b/front/src/Phaser/Login/SelectCharacterScene.ts @@ -3,8 +3,6 @@ import {TextField} from "../Components/TextField"; import Image = Phaser.GameObjects.Image; import Rectangle = Phaser.GameObjects.Rectangle; import {PLAYER_RESOURCES, PlayerResourceDescriptionInterface} from "../Entity/Character"; -import {GameSceneInitInterface} from "../Game/GameScene"; -import {StartMapInterface} from "../../Connection"; import {EnableCameraSceneName} from "./EnableCameraScene"; import {CustomizeSceneName} from "./CustomizeScene"; diff --git a/front/src/Phaser/Player/Player.ts b/front/src/Phaser/Player/Player.ts index 0fde84ae..b9c1c91a 100644 --- a/front/src/Phaser/Player/Player.ts +++ b/front/src/Phaser/Player/Player.ts @@ -1,9 +1,7 @@ import {PlayerAnimationNames} from "./Animation"; -import {GameScene, Textures} from "../Game/GameScene"; -import {MessageUserPositionInterface, PointInterface} from "../../Connection"; -import {ActiveEventList, UserInputEvent, UserInputManager} from "../UserInput/UserInputManager"; +import {GameScene} from "../Game/GameScene"; +import {UserInputEvent, UserInputManager} from "../UserInput/UserInputManager"; import {Character} from "../Entity/Character"; -import {OutlinePipeline} from "../Shaders/OutlinePipeline"; export const hasMovedEventName = "hasMoved"; diff --git a/front/src/WebRtc/ScreenSharingPeer.ts b/front/src/WebRtc/ScreenSharingPeer.ts index 9c2022a6..3cbc4154 100644 --- a/front/src/WebRtc/ScreenSharingPeer.ts +++ b/front/src/WebRtc/ScreenSharingPeer.ts @@ -1,7 +1,7 @@ import * as SimplePeerNamespace from "simple-peer"; import {mediaManager} from "./MediaManager"; -import {Connection} from "../Connection"; import {TURN_SERVER, TURN_USER, TURN_PASSWORD} from "../Enum/EnvironmentVariable"; +import {RoomConnection} from "../Connexion/RoomConnection"; const Peer: SimplePeerNamespace.SimplePeer = require('simple-peer'); @@ -14,7 +14,7 @@ export class ScreenSharingPeer extends Peer { */ private isReceivingStream:boolean = false; - constructor(private userId: number, initiator: boolean, private connection: Connection) { + constructor(private userId: number, initiator: boolean, private connection: RoomConnection) { super({ initiator: initiator ? initiator : false, reconnectTimer: 10000, diff --git a/front/src/WebRtc/SimplePeer.ts b/front/src/WebRtc/SimplePeer.ts index ac603756..bafbc02f 100644 --- a/front/src/WebRtc/SimplePeer.ts +++ b/front/src/WebRtc/SimplePeer.ts @@ -1,9 +1,8 @@ import { - Connection, WebRtcDisconnectMessageInterface, WebRtcSignalReceivedMessageInterface, WebRtcStartMessageInterface -} from "../Connection"; +} from "../Connexion/ConnexionModels"; import { mediaManager, StartScreenSharingCallback, @@ -13,6 +12,7 @@ import { import * as SimplePeerNamespace from "simple-peer"; import {ScreenSharingPeer} from "./ScreenSharingPeer"; import {VideoPeer} from "./VideoPeer"; +import {RoomConnection} from "../Connexion/RoomConnection"; const Peer: SimplePeerNamespace.SimplePeer = require('simple-peer'); export interface UserSimplePeerInterface{ @@ -31,7 +31,7 @@ export interface PeerConnectionListener { * This class manages connections to all the peers in the same group as me. */ export class SimplePeer { - private Connection: Connection; + private Connection: RoomConnection; private WebRtcRoomId: string; private Users: Array = new Array(); @@ -42,7 +42,7 @@ export class SimplePeer { private readonly stopLocalScreenSharingStreamCallback: StopScreenSharingCallback; private readonly peerConnectionListeners: Array = new Array(); - constructor(Connection: Connection, WebRtcRoomId: string = "test-webrtc") { + constructor(Connection: RoomConnection, WebRtcRoomId: string = "test-webrtc") { this.Connection = Connection; this.WebRtcRoomId = WebRtcRoomId; // We need to go through this weird bound function pointer in order to be able to "free" this reference later. diff --git a/front/src/WebRtc/VideoPeer.ts b/front/src/WebRtc/VideoPeer.ts index e046ffe2..9331bea7 100644 --- a/front/src/WebRtc/VideoPeer.ts +++ b/front/src/WebRtc/VideoPeer.ts @@ -1,7 +1,7 @@ import * as SimplePeerNamespace from "simple-peer"; import {mediaManager} from "./MediaManager"; -import {Connection} from "../Connection"; import {TURN_PASSWORD, TURN_SERVER, TURN_USER} from "../Enum/EnvironmentVariable"; +import {RoomConnection} from "../Connexion/RoomConnection"; const Peer: SimplePeerNamespace.SimplePeer = require('simple-peer'); @@ -9,7 +9,7 @@ const Peer: SimplePeerNamespace.SimplePeer = require('simple-peer'); * A peer connection used to transmit video / audio signals between 2 peers. */ export class VideoPeer extends Peer { - constructor(private userId: number, initiator: boolean, private connection: Connection) { + constructor(private userId: number, initiator: boolean, private connection: RoomConnection) { super({ initiator: initiator ? initiator : false, reconnectTimer: 10000, diff --git a/front/src/index.ts b/front/src/index.ts index 1f6b1d4a..8e235c7a 100644 --- a/front/src/index.ts +++ b/front/src/index.ts @@ -11,11 +11,10 @@ import WebGLRenderer = Phaser.Renderer.WebGL.WebGLRenderer; import {OutlinePipeline} from "./Phaser/Shaders/OutlinePipeline"; import {CustomizeScene} from "./Phaser/Login/CustomizeScene"; import {CoWebsiteManager} from "./WebRtc/CoWebsiteManager"; -import {redirectIfToken} from "./register"; +import {connectionManager} from "./Connexion/ConnectionManager"; //CoWebsiteManager.loadCoWebsite('https://thecodingmachine.com'); -let connectionData //todo: do something with this data -redirectIfToken().then(res => connectionData = res); +connectionManager.init(); // Load Jitsi if the environment variable is set. if (JITSI_URL) { diff --git a/front/src/register.ts b/front/src/register.ts deleted file mode 100644 index 98fe0d1e..00000000 --- a/front/src/register.ts +++ /dev/null @@ -1,29 +0,0 @@ -import Axios from "axios"; -import {API_URL} from "./Enum/EnvironmentVariable"; -declare let history:History; - -//todo: better naming -export interface ConnexionData { - organizationSlug: string, - worldSlug: string, - roomSlug: string, -} - -export async function redirectIfToken(): Promise { - const match = /\/register\/(.+)/.exec(window.location.toString()); - if (!match) { - return null - } - let res = null; - try { - res = await Axios.get(`${API_URL}/register/`+match[1]) - } catch (e) { - return null; - } - const organizationSlug = res.data.organizationSlug; - const worldSlug = res.data.worldSlug; - const roomSlug = res.data.roomSlug; - const connexionUrl = '/@/'+organizationSlug+'/'+worldSlug+'/'+roomSlug; - history.pushState({}, '', connexionUrl); - return {organizationSlug, worldSlug, roomSlug}; -} \ No newline at end of file From 3f9659ef3c75c643c356ef38e039b0a37bc53f8b Mon Sep 17 00:00:00 2001 From: arp Date: Mon, 28 Sep 2020 15:02:37 +0200 Subject: [PATCH 191/313] improvments --- back/src/App.ts | 3 - back/src/Controller/AuthenticateController.ts | 25 ++++--- back/src/Controller/IoSocketController.ts | 12 ++-- back/src/Controller/MapController.ts | 1 + back/src/Model/Websocket/ExSocketInterface.ts | 1 - front/src/Connexion/ConnectionManager.ts | 66 +++++++++++-------- front/src/Connexion/RoomConnection.ts | 4 +- front/src/Phaser/Game/AddPlayerInterface.ts | 2 +- front/src/Phaser/Game/GameManager.ts | 25 ++----- front/src/Phaser/Game/GameScene.ts | 4 +- 10 files changed, 72 insertions(+), 71 deletions(-) diff --git a/back/src/App.ts b/back/src/App.ts index a2aa91a5..545bdd91 100644 --- a/back/src/App.ts +++ b/back/src/App.ts @@ -7,7 +7,6 @@ import bodyParser = require('body-parser'); import * as http from "http"; import {MapController} from "./Controller/MapController"; import {PrometheusController} from "./Controller/PrometheusController"; -import {AdminController} from "./Controller/AdminController"; import {DebugController} from "./Controller/DebugController"; class App { @@ -17,7 +16,6 @@ class App { public authenticateController: AuthenticateController; public mapController: MapController; public prometheusController: PrometheusController; - private adminController: AdminController; private debugController: DebugController; constructor() { @@ -36,7 +34,6 @@ class App { this.authenticateController = new AuthenticateController(this.app); this.mapController = new MapController(this.app); this.prometheusController = new PrometheusController(this.app, this.ioSocketController); - this.adminController = new AdminController(this.app); this.debugController = new DebugController(this.app, this.ioSocketController); } diff --git a/back/src/Controller/AuthenticateController.ts b/back/src/Controller/AuthenticateController.ts index 26cc6ae5..d6ebe124 100644 --- a/back/src/Controller/AuthenticateController.ts +++ b/back/src/Controller/AuthenticateController.ts @@ -6,7 +6,14 @@ import { uuid } from 'uuidv4'; import Axios from "axios"; export interface TokenInterface { - name: string, + userUuid: string +} + +interface AdminApiData { + organizationSlug: string + worldSlug: string + roomSlug: string + mapUrlStart: string userUuid: string } @@ -35,20 +42,20 @@ export class AuthenticateController { return res.status(401).send('No admin backoffice set!'); } //todo: this call can fail if the corresponding world is not activated or if the token is invalid. Handle that case. - const response = await Axios.get(ADMIN_API_URL+'/api/login-url/'+organizationMemberToken, + const data = await Axios.get(ADMIN_API_URL+'/api/login-url/'+organizationMemberToken, { headers: {"Authorization" : `${ADMIN_API_TOKEN}`} } - ); + ).then((res): AdminApiData => res.data); - userUuid = response.data.userUuid; - mapUrlStart = response.data.mapUrlStart; - newUrl = this.getNewUrlOnAdminAuth(response.data) + userUuid = data.userUuid; + mapUrlStart = data.mapUrlStart; + newUrl = this.getNewUrlOnAdminAuth(data) } else { userUuid = uuid(); - mapUrlStart= URL_ROOM_STARTED; + mapUrlStart = req.headers.host?.replace('api.', 'maps.') + URL_ROOM_STARTED; newUrl = null; } - const authToken = Jwt.sign({userUuid: userUuid} as TokenInterface, SECRET_KEY, {expiresIn: '24h'}); + const authToken = Jwt.sign({userUuid: userUuid}, SECRET_KEY, {expiresIn: '24h'}); return res.status(OK).send({ authToken, userUuid, @@ -64,7 +71,7 @@ export class AuthenticateController { }); } - getNewUrlOnAdminAuth(data:any): string { + private getNewUrlOnAdminAuth(data:AdminApiData): string { const organizationSlug = data.organizationSlug; const worldSlug = data.worldSlug; const roomSlug = data.roomSlug; diff --git a/back/src/Controller/IoSocketController.ts b/back/src/Controller/IoSocketController.ts index 7111e7d2..3e18149f 100644 --- a/back/src/Controller/IoSocketController.ts +++ b/back/src/Controller/IoSocketController.ts @@ -121,18 +121,19 @@ export class IoSocketController { return next(new Error('Authentication error')); } Jwt.verify(socket.handshake.query.token, SECRET_KEY, (err: JsonWebTokenError, tokenDecoded: object) => { + const tokenInterface = tokenDecoded as TokenInterface; if (err) { console.error('An authentication error happened, invalid JsonWebToken.', err); return next(new Error('Authentication error')); } - if (!this.isValidToken(tokenDecoded)) { + if (!this.isValidToken(tokenInterface)) { return next(new Error('Authentication error, invalid token structure')); } (socket as ExSocketInterface).token = socket.handshake.query.token; (socket as ExSocketInterface).userId = this.nextUserId; - (socket as ExSocketInterface).userUuid = tokenDecoded.userUuid; + (socket as ExSocketInterface).userUuid = tokenInterface.userUuid; this.nextUserId++; next(); }); @@ -141,11 +142,8 @@ export class IoSocketController { this.ioConnection(); } - private isValidToken(token: object): token is TokenInterface { - if (typeof((token as TokenInterface).userUuid) !== 'string') { - return false; - } - if (typeof((token as TokenInterface).name) !== 'string') { + private isValidToken(token: TokenInterface): boolean { + if (typeof(token.userUuid) !== 'string') { return false; } return true; diff --git a/back/src/Controller/MapController.ts b/back/src/Controller/MapController.ts index 58ce40a9..539eb9d7 100644 --- a/back/src/Controller/MapController.ts +++ b/back/src/Controller/MapController.ts @@ -3,6 +3,7 @@ import {Application, Request, Response} from "express"; import {OK} from "http-status-codes"; import {URL_ROOM_STARTED} from "../Enum/EnvironmentVariable"; +//todo: delete this export class MapController { App: Application; diff --git a/back/src/Model/Websocket/ExSocketInterface.ts b/back/src/Model/Websocket/ExSocketInterface.ts index ace374f4..3cacd7f5 100644 --- a/back/src/Model/Websocket/ExSocketInterface.ts +++ b/back/src/Model/Websocket/ExSocketInterface.ts @@ -1,7 +1,6 @@ import {Socket} from "socket.io"; import {PointInterface} from "./PointInterface"; import {Identificable} from "./Identificable"; -import {TokenInterface} from "../../Controller/AuthenticateController"; import {ViewportInterface} from "_Model/Websocket/ViewportMessage"; import {BatchMessage, SubMessage} from "../../Messages/generated/messages_pb"; diff --git a/front/src/Connexion/ConnectionManager.ts b/front/src/Connexion/ConnectionManager.ts index cb70eef3..6f8e67a5 100644 --- a/front/src/Connexion/ConnectionManager.ts +++ b/front/src/Connexion/ConnectionManager.ts @@ -2,51 +2,61 @@ import Axios from "axios"; import {API_URL} from "../Enum/EnvironmentVariable"; import {RoomConnection} from "./RoomConnection"; +interface LoginApiData { + authToken: string + userUuid: string + mapUrlStart: string + newUrl: string +} + class ConnectionManager { + private initPromise: Promise = Promise.reject(); private mapUrlStart: string|null = null; private authToken:string|null = null; private userUuid: string|null = null; - private userName:string|null = null; public async init(): Promise { const match = /\/register\/(.+)/.exec(window.location.toString()); const organizationMemberToken = match ? match[1] : null; - const res = await Axios.post(`${API_URL}/login`, {organizationMemberToken}); - this.authToken = res.data.authToken; - this.userUuid = res.data.userUuid; - this.mapUrlStart = res.data.mapUrlStart; - const newUrl = res.data.newUrl; + this.initPromise = Axios.post(`${API_URL}/login`, {organizationMemberToken}).then(res => res.data); + const data = await this.initPromise + this.authToken = data.authToken; + this.userUuid = data.userUuid; + this.mapUrlStart = data.mapUrlStart; + const newUrl = data.newUrl; if (newUrl) { history.pushState({}, '', newUrl); } } - public async setUserName(name:string): Promise { - //todo + public connectToRoomSocket(): Promise { + return new Promise((resolve, reject) => { + const connection = new RoomConnection(this.authToken as string); + connection.onConnectError((error: object) => { + console.log('An error occurred while connecting to socket server. Retrying'); + reject(error); + }); + resolve(connection); + }).catch((err) => { + // Let's retry in 4-6 seconds + return new Promise((resolve, reject) => { + setTimeout(() => { + //todo: allow a way to break recurrsion? + this.connectToRoomSocket().then((connection) => resolve(connection)); + }, 4000 + Math.floor(Math.random() * 2000) ); + }); + }); } - public connectToRoomSocket(): Promise { - return Axios.post(`${API_URL}/connectToSocket`, {authToken: this.authToken}).then((res) => { - return new Promise((resolve, reject) => { - const connection = new RoomConnection(res.data.roomToken); - connection.onConnectError((error: object) => { - console.log('An error occurred while connecting to socket server. Retrying'); - reject(error); - }); - resolve(connection); - }); - }) - .catch((err) => { - // Let's retry in 4-6 seconds - return new Promise((resolve, reject) => { - setTimeout(() => { - //todo: allow a way to break recurrsion? - this.connectToRoomSocket().then((connection) => resolve(connection)); - }, 4000 + Math.floor(Math.random() * 2000) ); - }); - }); + public getMapUrlStart(): Promise { + return this.initPromise.then(() => { + if (!this.mapUrlStart) { + throw new Error('No map url set!'); + } + return this.mapUrlStart; + }) } } diff --git a/front/src/Connexion/RoomConnection.ts b/front/src/Connexion/RoomConnection.ts index 99ef7b4e..54519f60 100644 --- a/front/src/Connexion/RoomConnection.ts +++ b/front/src/Connexion/RoomConnection.ts @@ -83,9 +83,9 @@ export class RoomConnection implements RoomConnection { }) } - public emitPlayerDetailsMessage(characterLayersSelected: string[]) { + public emitPlayerDetailsMessage(userName: string, characterLayersSelected: string[]) { const message = new SetPlayerDetailsMessage(); - message.setName(name); + message.setName(userName); message.setCharacterlayersList(characterLayersSelected); this.socket.emit(EventMessage.SET_PLAYER_DETAILS, message.serializeBinary().buffer, (id: number) => { this.userId = id; diff --git a/front/src/Phaser/Game/AddPlayerInterface.ts b/front/src/Phaser/Game/AddPlayerInterface.ts index 519116ac..91563dd0 100644 --- a/front/src/Phaser/Game/AddPlayerInterface.ts +++ b/front/src/Phaser/Game/AddPlayerInterface.ts @@ -1,4 +1,4 @@ -import {PointInterface} from "../../Connexion/Connection"; +import {PointInterface} from "../../Connexion/ConnexionModels"; export interface AddPlayerInterface { userId: number; diff --git a/front/src/Phaser/Game/GameManager.ts b/front/src/Phaser/Game/GameManager.ts index 34a0bdf6..960ce7e2 100644 --- a/front/src/Phaser/Game/GameManager.ts +++ b/front/src/Phaser/Game/GameManager.ts @@ -4,7 +4,7 @@ import { } from "../../Connexion/ConnexionModels"; import Axios from "axios"; import {API_URL} from "../../Enum/EnvironmentVariable"; -import {adminDataFetchPromise} from "../../register"; +import {connectionManager} from "../../Connexion/ConnectionManager"; export interface HasMovedEvent { direction: string; @@ -30,23 +30,12 @@ export class GameManager { } loadStartMap() : Promise { - if (adminDataFetchPromise) { - return adminDataFetchPromise.then(data => { - return { - mapUrlStart: data.mapUrlStart, - startInstance: data.startInstance, - } - }) - } else { - //todo: remove this call, merge with the admin workflow? - return Axios.get(`${API_URL}/start-map`) - .then((res) => { - return res.data; - }).catch((err) => { - console.error(err); - throw err; - }); - } + return connectionManager.getMapUrlStart().then(mapUrlStart => { + return { + mapUrlStart: mapUrlStart, + startInstance: "global", //todo: is this property still usefull? + } + }); } getPlayerName(): string { diff --git a/front/src/Phaser/Game/GameScene.ts b/front/src/Phaser/Game/GameScene.ts index 163eb3dc..425aaf36 100644 --- a/front/src/Phaser/Game/GameScene.ts +++ b/front/src/Phaser/Game/GameScene.ts @@ -205,8 +205,8 @@ export class GameScene extends Phaser.Scene implements CenterListener { this.connectionPromise = connectionManager.connectToRoomSocket().then((connection : RoomConnection) => { this.connection = connection; - - this.connection.emitPlayerDetailsMessage(gameManager.getCharacterSelected()) + + this.connection.emitPlayerDetailsMessage(gameManager.getPlayerName(), gameManager.getCharacterSelected()) connection.onUserJoins((message: MessageUserJoined) => { const userMessage: AddPlayerInterface = { From 6a4c0c86782c2624f39e336bf37ff06b02158f14 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20N=C3=A9grier?= Date: Mon, 28 Sep 2020 18:52:54 +0200 Subject: [PATCH 192/313] Migrating to uWS --- back/package.json | 8 +- back/server.ts | 2 +- back/src/App.ts | 31 +- back/src/Controller/AuthenticateController.ts | 50 +- back/src/Controller/BaseController.ts | 10 + back/src/Controller/IoSocketController.ts | 684 +++++++++--------- back/src/Controller/MapController.ts | 30 +- back/src/Model/Websocket/ExSocketInterface.ts | 7 +- back/src/Model/Websocket/ProtobufUtils.ts | 39 +- back/src/Model/World.ts | 2 +- back/src/Server/server/app.ts | 13 + back/src/Server/server/baseapp.ts | 220 ++++++ back/src/Server/server/cluster.ts | 48 ++ back/src/Server/server/formdata.ts | 99 +++ back/src/Server/server/graphiql.html | 133 ++++ back/src/Server/server/graphql.ts | 138 ++++ back/src/Server/server/livereload.ts | 35 + back/src/Server/server/livereloadjs.js | 47 ++ back/src/Server/server/loadroutes.ts | 42 ++ back/src/Server/server/mime.ts | 176 +++++ back/src/Server/server/sendfile.ts | 172 +++++ back/src/Server/server/sslapp.ts | 13 + back/src/Server/server/types.ts | 26 + back/src/Server/server/utils.ts | 52 ++ back/src/Server/sifrr.server.ts | 30 + back/yarn.lock | 505 ++----------- benchmark/index.ts | 5 + benchmark/package.json | 9 +- benchmark/yarn.lock | 187 +---- front/src/Connection.ts | 303 +++++--- messages/messages.proto | 63 ++ 31 files changed, 2056 insertions(+), 1123 deletions(-) create mode 100644 back/src/Controller/BaseController.ts create mode 100644 back/src/Server/server/app.ts create mode 100644 back/src/Server/server/baseapp.ts create mode 100644 back/src/Server/server/cluster.ts create mode 100644 back/src/Server/server/formdata.ts create mode 100644 back/src/Server/server/graphiql.html create mode 100644 back/src/Server/server/graphql.ts create mode 100644 back/src/Server/server/livereload.ts create mode 100644 back/src/Server/server/livereloadjs.js create mode 100644 back/src/Server/server/loadroutes.ts create mode 100644 back/src/Server/server/mime.ts create mode 100644 back/src/Server/server/sendfile.ts create mode 100644 back/src/Server/server/sslapp.ts create mode 100644 back/src/Server/server/types.ts create mode 100644 back/src/Server/server/utils.ts create mode 100644 back/src/Server/sifrr.server.ts diff --git a/back/package.json b/back/package.json index b1159144..50d4fe18 100644 --- a/back/package.json +++ b/back/package.json @@ -38,27 +38,27 @@ "dependencies": { "axios": "^0.20.0", "body-parser": "^1.19.0", + "busboy": "^0.3.1", "circular-json": "^0.5.9", - "express": "^4.17.1", "generic-type-guard": "^3.2.0", "google-protobuf": "^3.13.0", "http-status-codes": "^1.4.0", + "iterall": "^1.3.0", "jsonwebtoken": "^8.5.1", "prom-client": "^12.0.0", - "socket.io": "^2.3.0", + "query-string": "^6.13.3", "systeminformation": "^4.26.5", "ts-node-dev": "^1.0.0-pre.44", "typescript": "^3.8.3", + "uWebSockets.js": "uNetworking/uWebSockets.js#v18.5.0", "uuidv4": "^6.0.7" }, "devDependencies": { "@types/circular-json": "^0.4.0", - "@types/express": "^4.17.4", "@types/google-protobuf": "^3.7.3", "@types/http-status-codes": "^1.2.0", "@types/jasmine": "^3.5.10", "@types/jsonwebtoken": "^8.3.8", - "@types/socket.io": "^2.1.4", "@types/uuidv4": "^5.0.0", "@typescript-eslint/eslint-plugin": "^2.26.0", "@typescript-eslint/parser": "^2.26.0", diff --git a/back/server.ts b/back/server.ts index f98c9df2..cb4a7604 100644 --- a/back/server.ts +++ b/back/server.ts @@ -1,3 +1,3 @@ // lib/server.ts import App from "./src/App"; -App.listen(8080, () => console.log(`Example app listening on port 8080!`)) \ No newline at end of file +App.listen(8080, () => console.log(`WorkAdventure starting on port 8080!`)) diff --git a/back/src/App.ts b/back/src/App.ts index a2aa91a5..c13b6fdc 100644 --- a/back/src/App.ts +++ b/back/src/App.ts @@ -9,10 +9,10 @@ import {MapController} from "./Controller/MapController"; import {PrometheusController} from "./Controller/PrometheusController"; import {AdminController} from "./Controller/AdminController"; import {DebugController} from "./Controller/DebugController"; +import {App as uwsApp} from "./Server/sifrr.server"; class App { - public app: Application; - public server: http.Server; + public app: uwsApp; public ioSocketController: IoSocketController; public authenticateController: AuthenticateController; public mapController: MapController; @@ -21,18 +21,25 @@ class App { private debugController: DebugController; constructor() { - this.app = express(); - - //config server http - this.server = http.createServer(this.app); + this.app = new uwsApp(); this.config(); this.crossOrigin(); //TODO add middleware with access token to secure api + // STUPID CORS IMPLEMENTATION. + // TODO: SECURE THIS + this.app.any('/*', (res, req) => { + res.writeHeader('access-control-allow-headers', 'Origin, X-Requested-With, Content-Type, Accept'); + res.writeHeader('access-control-allow-methods', 'GET, POST, OPTIONS, PUT, PATCH, DELETE'); + res.writeHeader('access-control-allow-origin', '*'); + + req.setYield(true); + }); + //create socket controllers - this.ioSocketController = new IoSocketController(this.server); + this.ioSocketController = new IoSocketController(this.app); this.authenticateController = new AuthenticateController(this.app); this.mapController = new MapController(this.app); this.prometheusController = new PrometheusController(this.app, this.ioSocketController); @@ -42,20 +49,20 @@ class App { // TODO add session user private config(): void { - this.app.use(bodyParser.json()); - this.app.use(bodyParser.urlencoded({extended: false})); + /*this.app.use(bodyParser.json()); + this.app.use(bodyParser.urlencoded({extended: false}));*/ } private crossOrigin(){ - this.app.use((req: Request, res: Response, next) => { + /*this.app.use((req: Request, res: Response, next) => { res.setHeader("Access-Control-Allow-Origin", "*"); // update to match the domain you will make the request from // Request methods you wish to allow res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, PATCH, DELETE'); // Request headers you wish to allow res.setHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept"); next(); - }); + });*/ } } -export default new App().server; +export default new App().app; diff --git a/back/src/Controller/AuthenticateController.ts b/back/src/Controller/AuthenticateController.ts index 83880f45..a65255a2 100644 --- a/back/src/Controller/AuthenticateController.ts +++ b/back/src/Controller/AuthenticateController.ts @@ -3,38 +3,58 @@ import Jwt from "jsonwebtoken"; import {BAD_REQUEST, OK} from "http-status-codes"; import {SECRET_KEY, URL_ROOM_STARTED} from "../Enum/EnvironmentVariable"; //TODO fix import by "_Enum/..." import { uuid } from 'uuidv4'; +import {HttpRequest, HttpResponse, TemplatedApp} from "uWebSockets.js"; +import {BaseController} from "./BaseController"; export interface TokenInterface { name: string, userUuid: string } -export class AuthenticateController { - App : Application; +export class AuthenticateController extends BaseController { - constructor(App : Application) { - this.App = App; + constructor(private App : TemplatedApp) { + super(); this.login(); } + onAbortedOrFinishedResponse(res: HttpResponse/*, readStream: any*/) { + + console.log("ERROR! onAbortedOrFinishedResponse called!"); + /*if (res.id == -1) { + console.log("ERROR! onAbortedOrFinishedResponse called twice for the same res!"); + } else { + console.log('Stream was closed, openStreams: ' + --openStreams); + console.timeEnd(res.id); + readStream.destroy(); + }*/ + + /* Mark this response already accounted for */ + //res.id = -1; + } + //permit to login on application. Return token to connect on Websocket IO. login(){ - // For now, let's completely forget the /login route. - this.App.post("/login", (req: Request, res: Response) => { - const param = req.body; - /*if(!param.name){ - return res.status(BAD_REQUEST).send({ - message: "email parameter is empty" - }); - }*/ - //TODO check user email for The Coding Machine game + this.App.options("/login", (res: HttpResponse, req: HttpRequest) => { + this.addCorsHeaders(res); + + res.end(); + }); + + this.App.post("/login", async (res: HttpResponse, req: HttpRequest) => { + this.addCorsHeaders(res); + + res.onAborted(() => { + console.warn('Login request was aborted'); + }) + const param = await res.json(); const userUuid = uuid(); const token = Jwt.sign({name: param.name, userUuid: userUuid} as TokenInterface, SECRET_KEY, {expiresIn: '24h'}); - return res.status(OK).send({ + res.writeStatus("200 OK").end(JSON.stringify({ token: token, mapUrlStart: URL_ROOM_STARTED, userId: userUuid, - }); + })); }); } } diff --git a/back/src/Controller/BaseController.ts b/back/src/Controller/BaseController.ts new file mode 100644 index 00000000..93c17ab4 --- /dev/null +++ b/back/src/Controller/BaseController.ts @@ -0,0 +1,10 @@ +import {HttpResponse} from "uWebSockets.js"; + + +export class BaseController { + protected addCorsHeaders(res: HttpResponse): void { + res.writeHeader('access-control-allow-headers', 'Origin, X-Requested-With, Content-Type, Accept'); + res.writeHeader('access-control-allow-methods', 'GET, POST, OPTIONS, PUT, PATCH, DELETE'); + res.writeHeader('access-control-allow-origin', '*'); + } +} diff --git a/back/src/Controller/IoSocketController.ts b/back/src/Controller/IoSocketController.ts index 7111e7d2..1928679d 100644 --- a/back/src/Controller/IoSocketController.ts +++ b/back/src/Controller/IoSocketController.ts @@ -1,5 +1,3 @@ -import socketIO = require('socket.io'); -import {Socket} from "socket.io"; import * as http from "http"; import {MessageUserPosition, Point} from "../Model/Websocket/MessageUserPosition"; //TODO fix import by "_Model/.." import {ExSocketInterface} from "../Model/Websocket/ExSocketInterface"; //TODO fix import by "_Model/.." @@ -32,11 +30,19 @@ import { GroupDeleteMessage, UserJoinedMessage, UserLeftMessage, - ItemEventMessage, ViewportMessage + ItemEventMessage, + ViewportMessage, + ClientToServerMessage, + JoinRoomMessage, + ErrorMessage, + RoomJoinedMessage, + ItemStateMessage, + ServerToClientMessage, SetUserIdMessage, SilentMessage } from "../Messages/generated/messages_pb"; import {UserMovesMessage} from "../Messages/generated/messages_pb"; import Direction = PositionMessage.Direction; import {ProtobufUtils} from "../Model/Websocket/ProtobufUtils"; +import {App, TemplatedApp, WebSocket} from "uWebSockets.js" enum SocketIoEvent { CONNECTION = "connection", @@ -59,12 +65,18 @@ enum SocketIoEvent { BATCH = "batch", } -function emitInBatch(socket: ExSocketInterface, event: string, payload: SubMessage): void { +function emitInBatch(socket: ExSocketInterface, payload: SubMessage): void { + if (socket.disconnecting) { + return; + } socket.batchedMessages.addPayload(payload); if (socket.batchTimeout === null) { socket.batchTimeout = setTimeout(() => { - socket./*binary(true).*/emit(SocketIoEvent.BATCH, socket.batchedMessages.serializeBinary().buffer); + const serverToClientMessage = new ServerToClientMessage(); + serverToClientMessage.setBatchmessage(socket.batchedMessages); + + socket.send(serverToClientMessage.serializeBinary().buffer, true); socket.batchedMessages = new BatchMessage(); socket.batchTimeout = null; }, 100); @@ -72,15 +84,14 @@ function emitInBatch(socket: ExSocketInterface, event: string, payload: SubMessa } export class IoSocketController { - public readonly Io: socketIO.Server; private Worlds: Map = new Map(); private sockets: Map = new Map(); private nbClientsGauge: Gauge; private nbClientsPerRoomGauge: Gauge; private nextUserId: number = 1; - constructor(server: http.Server) { - this.Io = socketIO(server); + constructor(private readonly app: TemplatedApp) { + this.nbClientsGauge = new Gauge({ name: 'workadventure_nb_sockets', help: 'Number of connected sockets', @@ -92,52 +103,6 @@ export class IoSocketController { labelNames: [ 'room' ] }); - // Authentication with token. it will be decoded and stored in the socket. - // Completely commented for now, as we do not use the "/login" route at all. - this.Io.use((socket: Socket, next) => { - //console.log(socket.handshake.query.token); - if (!socket.handshake.query || !socket.handshake.query.token) { - console.error('An authentication error happened, a user tried to connect without a token.'); - return next(new Error('Authentication error')); - } - if(socket.handshake.query.token === 'test'){ - if (ALLOW_ARTILLERY) { - (socket as ExSocketInterface).token = socket.handshake.query.token; - (socket as ExSocketInterface).userId = this.nextUserId; - (socket as ExSocketInterface).userUuid = uuid(); - this.nextUserId++; - (socket as ExSocketInterface).isArtillery = true; - console.log((socket as ExSocketInterface).userId); - next(); - return; - } else { - console.warn("In order to perform a load-testing test on this environment, you must set the ALLOW_ARTILLERY environment variable to 'true'"); - next(); - } - } - (socket as ExSocketInterface).isArtillery = false; - if(this.searchClientByToken(socket.handshake.query.token)){ - console.error('An authentication error happened, a user tried to connect while its token is already connected.'); - return next(new Error('Authentication error')); - } - Jwt.verify(socket.handshake.query.token, SECRET_KEY, (err: JsonWebTokenError, tokenDecoded: object) => { - if (err) { - console.error('An authentication error happened, invalid JsonWebToken.', err); - return next(new Error('Authentication error')); - } - - if (!this.isValidToken(tokenDecoded)) { - return next(new Error('Authentication error, invalid token structure')); - } - - (socket as ExSocketInterface).token = socket.handshake.query.token; - (socket as ExSocketInterface).userId = this.nextUserId; - (socket as ExSocketInterface).userUuid = tokenDecoded.userUuid; - this.nextUserId++; - next(); - }); - }); - this.ioConnection(); } @@ -167,201 +132,107 @@ export class IoSocketController { return null; } - ioConnection() { - this.Io.on(SocketIoEvent.CONNECTION, (socket: Socket) => { - const client : ExSocketInterface = socket as ExSocketInterface; - client.batchedMessages = new BatchMessage(); - client.batchTimeout = null; - client.emitInBatch = (event: string, payload: SubMessage): void => { - emitInBatch(client, event, payload); + private authenticate(ws: WebSocket) { + //console.log(socket.handshake.query.token); + + /*if (!socket.handshake.query || !socket.handshake.query.token) { + console.error('An authentication error happened, a user tried to connect without a token.'); + return next(new Error('Authentication error')); + } + if(socket.handshake.query.token === 'test'){ + if (ALLOW_ARTILLERY) { + (socket as ExSocketInterface).token = socket.handshake.query.token; + (socket as ExSocketInterface).userId = this.nextUserId; + (socket as ExSocketInterface).userUuid = uuid(); + this.nextUserId++; + (socket as ExSocketInterface).isArtillery = true; + console.log((socket as ExSocketInterface).userId); + next(); + return; + } else { + console.warn("In order to perform a load-testing test on this environment, you must set the ALLOW_ARTILLERY environment variable to 'true'"); + next(); + } + } + (socket as ExSocketInterface).isArtillery = false; + if(this.searchClientByToken(socket.handshake.query.token)){ + console.error('An authentication error happened, a user tried to connect while its token is already connected.'); + return next(new Error('Authentication error')); + } + Jwt.verify(socket.handshake.query.token, SECRET_KEY, (err: JsonWebTokenError, tokenDecoded: object) => { + if (err) { + console.error('An authentication error happened, invalid JsonWebToken.', err); + return next(new Error('Authentication error')); } - this.sockets.set(client.userId, client); - // Let's log server load when a user joins - const srvSockets = this.Io.sockets.sockets; - this.nbClientsGauge.inc(); - console.log(new Date().toISOString() + ' A user joined (', Object.keys(srvSockets).length, ' connected users)'); - //si.currentLoad().then(data => console.log(' Current load: ', data.avgload)); - //si.currentLoad().then(data => console.log(' CPU: ', data.currentload, '%')); - // End log server load + if (!this.isValidToken(tokenDecoded)) { + return next(new Error('Authentication error, invalid token structure')); + } - /*join-rom event permit to join one room. - message : - userId : user identification - roomId: room identification - position: position of user in map - x: user x position on map - y: user y position on map - */ - socket.on(SocketIoEvent.JOIN_ROOM, (message: unknown, answerFn): void => { - //console.log(SocketIoEvent.JOIN_ROOM, message); - try { - if (!isJoinRoomMessageInterface(message)) { - socket.emit(SocketIoEvent.MESSAGE_ERROR, {message: 'Invalid JOIN_ROOM message.'}); - console.warn('Invalid JOIN_ROOM message received: ', message); - return; - } - const roomId = message.roomId; + (socket as ExSocketInterface).token = socket.handshake.query.token; + (socket as ExSocketInterface).userId = this.nextUserId; + (socket as ExSocketInterface).userUuid = tokenDecoded.userUuid; + this.nextUserId++; + next(); + });*/ + const socket = ws as ExSocketInterface; + socket.userId = this.nextUserId; + this.nextUserId++; + } - const Client = (socket as ExSocketInterface); + ioConnection() { + this.app.ws('/*', { + /* Options */ + //compression: uWS.SHARED_COMPRESSOR, + maxPayloadLength: 16 * 1024 * 1024, + idleTimeout: 10, + /* Handlers */ + open: (ws) => { + this.authenticate(ws); + // TODO: close if authenticate is ko - if (Client.roomId === roomId) { - return; - } - - //leave previous room - this.leaveRoom(Client); - - //join new previous room - const world = this.joinRoom(Client, roomId, message.position); - - const things = world.setViewport(Client, message.viewport); - - const listOfUsers: Array = []; - const listOfGroups: Array = []; - - for (const thing of things) { - if (thing instanceof User) { - const player: ExSocketInterface|undefined = this.sockets.get(thing.id); - if (player === undefined) { - console.warn('Something went wrong. The World contains a user "'+thing.id+"' but this user does not exist in the sockets list!"); - continue; - } - - listOfUsers.push(new MessageUserPosition(thing.id, player.name, player.characterLayers, player.position)); - } else if (thing instanceof Group) { - listOfGroups.push({ - groupId: thing.getId(), - position: thing.getPosition(), - }); - } else { - console.error("Unexpected type for Movable returned by setViewport"); - } - } - - const listOfItems: {[itemId: string]: unknown} = {}; - for (const [itemId, item] of world.getItemsState().entries()) { - listOfItems[itemId] = item; - } - - //console.warn('ANSWER PLAYER POSITIONS', listOfUsers); - if (answerFn === undefined && ALLOW_ARTILLERY === true) { - // For some reason, answerFn can be undefined if we use Artillery (?) - return; - } - - answerFn({ - users: listOfUsers, - groups: listOfGroups, - items: listOfItems - }); - } catch (e) { - console.error('An error occurred on "join_room" event'); - console.error(e); + const client : ExSocketInterface = ws as ExSocketInterface; + client.batchedMessages = new BatchMessage(); + client.batchTimeout = null; + client.emitInBatch = (payload: SubMessage): void => { + emitInBatch(client, payload); } - }); + client.disconnecting = false; + this.sockets.set(client.userId, client); - socket.on(SocketIoEvent.SET_VIEWPORT, (message: unknown): void => { - try { - if (!(message instanceof Buffer)) { - socket.emit(SocketIoEvent.MESSAGE_ERROR, {message: 'Invalid SET_VIEWPORT message. Expecting binary buffer.'}); - console.warn('Invalid SET_VIEWPORT message received (expecting binary buffer): ', message); - return; - } + // Let's log server load when a user joins + this.nbClientsGauge.inc(); + console.log(new Date().toISOString() + ' A user joined (', this.sockets.size, ' connected users)'); - const viewportMessage = ViewportMessage.deserializeBinary(new Uint8Array(message as ArrayBuffer)); - const viewport = viewportMessage.toObject(); + }, + message: (ws, arrayBuffer, isBinary) => { + const client = ws as ExSocketInterface; + const message = ClientToServerMessage.deserializeBinary(new Uint8Array(arrayBuffer)); - const Client = (socket as ExSocketInterface); - Client.viewport = viewport; - - const world = this.Worlds.get(Client.roomId); - if (!world) { - console.error("In SET_VIEWPORT, could not find world with id '", Client.roomId, "'"); - return; - } - world.setViewport(Client, Client.viewport); - } catch (e) { - console.error('An error occurred on "SET_VIEWPORT" event'); - console.error(e); + if (message.hasJoinroommessage()) { + this.handleJoinRoom(client, message.getJoinroommessage() as JoinRoomMessage); + } else if (message.hasViewportmessage()) { + this.handleViewport(client, message.getViewportmessage() as ViewportMessage); + } else if (message.hasUsermovesmessage()) { + this.handleUserMovesMessage(client, message.getUsermovesmessage() as UserMovesMessage); + } else if (message.hasSetplayerdetailsmessage()) { + this.handleSetPlayerDetails(client, message.getSetplayerdetailsmessage() as SetPlayerDetailsMessage); + } else if (message.hasSilentmessage()) { + this.handleSilentMessage(client, message.getSilentmessage() as SilentMessage); + } else if (message.hasItemeventmessage()) { + this.handleItemEvent(client, message.getItemeventmessage() as ItemEventMessage); } - }); - socket.on(SocketIoEvent.USER_POSITION, (message: unknown): void => { - //console.log(SockerIoEvent.USER_POSITION, userMovesMessage); - try { - if (!(message instanceof Buffer)) { - socket.emit(SocketIoEvent.MESSAGE_ERROR, {message: 'Invalid USER_POSITION message. Expecting binary buffer.'}); - console.warn('Invalid USER_POSITION message received (expecting binary buffer): ', message); - return; - } - - const userMovesMessage = UserMovesMessage.deserializeBinary(new Uint8Array(message as ArrayBuffer)); - const userMoves = userMovesMessage.toObject(); - - const position = userMoves.position; - if (position === undefined) { - throw new Error('Position not found in message'); - } - const viewport = userMoves.viewport; - if (viewport === undefined) { - throw new Error('Viewport not found in message'); - } - - let direction: string; - switch (position.direction) { - case Direction.UP: - direction = 'up'; - break; - case Direction.DOWN: - direction = 'down'; - break; - case Direction.LEFT: - direction = 'left'; - break; - case Direction.RIGHT: - direction = 'right'; - break; - default: - throw new Error("Unexpected direction"); - } - - const Client = (socket as ExSocketInterface); - - // sending to all clients in room except sender - Client.position = { - x: position.x, - y: position.y, - direction, - moving: position.moving, - }; - Client.viewport = viewport; - - // update position in the world - const world = this.Worlds.get(Client.roomId); - if (!world) { - console.error("In USER_POSITION, could not find world with id '", Client.roomId, "'"); - return; - } - world.updatePosition(Client, Client.position); - world.setViewport(Client, Client.viewport); - } catch (e) { - console.error('An error occurred on "user_position" event'); - console.error(e); - } - }); - - socket.on(SocketIoEvent.WEBRTC_SIGNAL, (data: unknown) => { - this.emitVideo((socket as ExSocketInterface), data); - }); - - socket.on(SocketIoEvent.WEBRTC_SCREEN_SHARING_SIGNAL, (data: unknown) => { - this.emitScreenSharing((socket as ExSocketInterface), data); - }); - - socket.on(SocketIoEvent.DISCONNECT, () => { - const Client = (socket as ExSocketInterface); + /* Ok is false if backpressure was built up, wait for drain */ + //let ok = ws.send(message, isBinary); + }, + drain: (ws) => { + console.log('WebSocket backpressure: ' + ws.getBufferedAmount()); + }, + close: (ws, code, message) => { + const Client = (ws as ExSocketInterface); try { + Client.disconnecting = true; //leave room this.leaveRoom(Client); @@ -377,112 +248,251 @@ export class IoSocketController { console.error('An error occurred on "disconnect"'); console.error(e); } + this.sockets.delete(Client.userId); // Let's log server load when a user leaves - const srvSockets = this.Io.sockets.sockets; this.nbClientsGauge.dec(); - console.log('A user left (', Object.keys(srvSockets).length, ' connected users)'); - //si.currentLoad().then(data => console.log('Current load: ', data.avgload)); - //si.currentLoad().then(data => console.log('CPU: ', data.currentload, '%')); - // End log server load + console.log('A user left (', this.sockets.size, ' connected users)'); + } + }) + + // TODO: finish this! + /*this.Io.on(SocketIoEvent.CONNECTION, (socket: Socket) => { + + + + socket.on(SocketIoEvent.WEBRTC_SIGNAL, (data: unknown) => { + this.emitVideo((socket as ExSocketInterface), data); }); - // Let's send the user id to the user - socket.on(SocketIoEvent.SET_PLAYER_DETAILS, (message: unknown, answerFn) => { - //console.log(SocketIoEvent.SET_PLAYER_DETAILS, message); - if (!(message instanceof Buffer)) { - socket.emit(SocketIoEvent.MESSAGE_ERROR, {message: 'Invalid SET_PLAYER_DETAILS message. Expecting binary buffer.'}); - console.warn('Invalid SET_PLAYER_DETAILS message received (expecting binary buffer): ', message); - return; - } - const playerDetailsMessage = SetPlayerDetailsMessage.deserializeBinary(new Uint8Array(message)); - const playerDetails = { - name: playerDetailsMessage.getName(), - characterLayers: playerDetailsMessage.getCharacterlayersList() - }; - //console.log(SocketIoEvent.SET_PLAYER_DETAILS, playerDetails); - if (!isSetPlayerDetailsMessage(playerDetails)) { - socket.emit(SocketIoEvent.MESSAGE_ERROR, {message: 'Invalid SET_PLAYER_DETAILS message.'}); - console.warn('Invalid SET_PLAYER_DETAILS message received: ', playerDetails); - return; - } - const Client = (socket as ExSocketInterface); - Client.name = playerDetails.name; - Client.characterLayers = playerDetails.characterLayers; - // Artillery fails when receiving an acknowledgement that is not a JSON object - if (!Client.isArtillery) { - answerFn(Client.userId); - } + socket.on(SocketIoEvent.WEBRTC_SCREEN_SHARING_SIGNAL, (data: unknown) => { + this.emitScreenSharing((socket as ExSocketInterface), data); }); - socket.on(SocketIoEvent.SET_SILENT, (silent: unknown) => { - //console.log(SocketIoEvent.SET_SILENT, silent); - if (typeof silent !== "boolean") { - socket.emit(SocketIoEvent.MESSAGE_ERROR, {message: 'Invalid SET_SILENT message.'}); - console.warn('Invalid SET_SILENT message received: ', silent); - return; - } + });*/ + } - try { - const Client = (socket as ExSocketInterface); + private emitError(Client: ExSocketInterface, message: string): void { + const errorMessage = new ErrorMessage(); + errorMessage.setMessage(message); - // update position in the world - const world = this.Worlds.get(Client.roomId); - if (!world) { - console.error("In SET_SILENT, could not find world with id '", Client.roomId, "'"); - return; - } - world.setSilent(Client, silent); - } catch (e) { - console.error('An error occurred on "SET_SILENT"'); - console.error(e); - } - }); + const serverToClientMessage = new ServerToClientMessage(); + serverToClientMessage.setErrormessage(errorMessage); - socket.on(SocketIoEvent.ITEM_EVENT, (message: unknown) => { - if (!(message instanceof Buffer)) { - socket.emit(SocketIoEvent.MESSAGE_ERROR, {message: 'Invalid ITEM_EVENT message. Expecting binary buffer.'}); - console.warn('Invalid ITEM_EVENT message received (expecting binary buffer): ', message); - return; - } - const itemEventMessage = ItemEventMessage.deserializeBinary(new Uint8Array(message)); + if (!Client.disconnecting) { + Client.send(serverToClientMessage.serializeBinary().buffer); + } + console.warn(message); + } - const itemEvent = ProtobufUtils.toItemEvent(itemEventMessage); + private handleJoinRoom(Client: ExSocketInterface, message: JoinRoomMessage): void { + try { + /*if (!isJoinRoomMessageInterface(message.toObject())) { + console.log(message.toObject()) + this.emitError(Client, 'Invalid JOIN_ROOM message received: ' + message.toObject().toString()); + return; + }*/ + const roomId = message.getRoomid(); - /*if (!isItemEventMessageInterface(itemEvent)) { - socket.emit(SocketIoEvent.MESSAGE_ERROR, {message: 'Invalid ITEM_EVENT message.'}); - console.warn('Invalid ITEM_EVENT message received: ', itemEvent); - return; - }*/ - try { - const Client = (socket as ExSocketInterface); + if (Client.roomId === roomId) { + return; + } - //socket.to(Client.roomId).emit(SocketIoEvent.ITEM_EVENT, itemEvent); + //leave previous room + this.leaveRoom(Client); - const world = this.Worlds.get(Client.roomId); - if (!world) { - console.error("Could not find world with id '", Client.roomId, "'"); - return; + //join new previous room + const world = this.joinRoom(Client, roomId, ProtobufUtils.toPointInterface(message.getPosition() as PositionMessage)); + + const things = world.setViewport(Client, (message.getViewport() as ViewportMessage).toObject()); + + const roomJoinedMessage = new RoomJoinedMessage(); + + for (const thing of things) { + if (thing instanceof User) { + const player: ExSocketInterface|undefined = this.sockets.get(thing.id); + if (player === undefined) { + console.warn('Something went wrong. The World contains a user "'+thing.id+"' but this user does not exist in the sockets list!"); + continue; } - const subMessage = new SubMessage(); - subMessage.setItemeventmessage(itemEventMessage); + const userJoinedMessage = new UserJoinedMessage(); + userJoinedMessage.setUserid(thing.id); + userJoinedMessage.setName(player.name); + userJoinedMessage.setCharacterlayersList(player.characterLayers); + userJoinedMessage.setPosition(ProtobufUtils.toPositionMessage(player.position)); - // Let's send the event without using the SocketIO room. - for (const user of world.getUsers().values()) { - const client = this.searchClientByIdOrFail(user.id); - //client.emit(SocketIoEvent.ITEM_EVENT, itemEvent); - emitInBatch(client, SocketIoEvent.ITEM_EVENT, subMessage); - } + roomJoinedMessage.addUser(userJoinedMessage); + } else if (thing instanceof Group) { + const groupUpdateMessage = new GroupUpdateMessage(); + groupUpdateMessage.setGroupid(thing.getId()); + groupUpdateMessage.setPosition(ProtobufUtils.toPointMessage(thing.getPosition())); - world.setItemState(itemEvent.itemId, itemEvent.state); - } catch (e) { - console.error('An error occurred on "item_event"'); - console.error(e); + roomJoinedMessage.addGroup(groupUpdateMessage); + } else { + console.error("Unexpected type for Movable returned by setViewport"); } - }); - }); + } + + for (const [itemId, item] of world.getItemsState().entries()) { + const itemStateMessage = new ItemStateMessage(); + itemStateMessage.setItemid(itemId); + itemStateMessage.setStatejson(JSON.stringify(item)); + + roomJoinedMessage.addItem(itemStateMessage); + } + + const serverToClientMessage = new ServerToClientMessage(); + serverToClientMessage.setRoomjoinedmessage(roomJoinedMessage); + + if (!Client.disconnecting) { + Client.send(serverToClientMessage.serializeBinary().buffer, true); + } + } catch (e) { + console.error('An error occurred on "join_room" event'); + console.error(e); + } + } + + private handleViewport(client: ExSocketInterface, viewportMessage: ViewportMessage) { + try { + const viewport = viewportMessage.toObject(); + + client.viewport = viewport; + + const world = this.Worlds.get(client.roomId); + if (!world) { + console.error("In SET_VIEWPORT, could not find world with id '", client.roomId, "'"); + return; + } + world.setViewport(client, client.viewport); + } catch (e) { + console.error('An error occurred on "SET_VIEWPORT" event'); + console.error(e); + } + } + + private handleUserMovesMessage(client: ExSocketInterface, userMovesMessage: UserMovesMessage) { + //console.log(SockerIoEvent.USER_POSITION, userMovesMessage); + try { + const userMoves = userMovesMessage.toObject(); + + const position = userMoves.position; + if (position === undefined) { + throw new Error('Position not found in message'); + } + const viewport = userMoves.viewport; + if (viewport === undefined) { + throw new Error('Viewport not found in message'); + } + + let direction: string; + switch (position.direction) { + case Direction.UP: + direction = 'up'; + break; + case Direction.DOWN: + direction = 'down'; + break; + case Direction.LEFT: + direction = 'left'; + break; + case Direction.RIGHT: + direction = 'right'; + break; + default: + throw new Error("Unexpected direction"); + } + + // sending to all clients in room except sender + client.position = { + x: position.x, + y: position.y, + direction, + moving: position.moving, + }; + client.viewport = viewport; + + // update position in the world + const world = this.Worlds.get(client.roomId); + if (!world) { + console.error("In USER_POSITION, could not find world with id '", client.roomId, "'"); + return; + } + world.updatePosition(client, client.position); + world.setViewport(client, client.viewport); + } catch (e) { + console.error('An error occurred on "user_position" event'); + console.error(e); + } + } + + private handleSetPlayerDetails(client: ExSocketInterface, playerDetailsMessage: SetPlayerDetailsMessage) { + const playerDetails = { + name: playerDetailsMessage.getName(), + characterLayers: playerDetailsMessage.getCharacterlayersList() + }; + //console.log(SocketIoEvent.SET_PLAYER_DETAILS, playerDetails); + if (!isSetPlayerDetailsMessage(playerDetails)) { + this.emitError(client, 'Invalid SET_PLAYER_DETAILS message received: '); + return; + } + client.name = playerDetails.name; + client.characterLayers = playerDetails.characterLayers; + + + const setUserIdMessage = new SetUserIdMessage(); + setUserIdMessage.setUserid(client.userId); + + const serverToClientMessage = new ServerToClientMessage(); + serverToClientMessage.setSetuseridmessage(setUserIdMessage); + + if (!client.disconnecting) { + client.send(serverToClientMessage.serializeBinary().buffer, true); + } + } + + private handleSilentMessage(client: ExSocketInterface, silentMessage: SilentMessage) { + try { + // update position in the world + const world = this.Worlds.get(client.roomId); + if (!world) { + console.error("In handleSilentMessage, could not find world with id '", client.roomId, "'"); + return; + } + world.setSilent(client, silentMessage.getSilent()); + } catch (e) { + console.error('An error occurred on "handleSilentMessage"'); + console.error(e); + } + } + + private handleItemEvent(ws: ExSocketInterface, itemEventMessage: ItemEventMessage) { + const itemEvent = ProtobufUtils.toItemEvent(itemEventMessage); + + try { + const world = this.Worlds.get(ws.roomId); + if (!world) { + console.error("Could not find world with id '", ws.roomId, "'"); + return; + } + + const subMessage = new SubMessage(); + subMessage.setItemeventmessage(itemEventMessage); + + // Let's send the event without using the SocketIO room. + for (const user of world.getUsers().values()) { + const client = this.searchClientByIdOrFail(user.id); + //client.emit(SocketIoEvent.ITEM_EVENT, itemEvent); + emitInBatch(client, subMessage); + } + + world.setItemState(itemEvent.itemId, itemEvent.state); + } catch (e) { + console.error('An error occurred on "item_event"'); + console.error(e); + } } emitVideo(socket: ExSocketInterface, data: unknown){ @@ -542,7 +552,7 @@ export class IoSocketController { } } //user leave previous room - Client.leave(Client.roomId); + //Client.leave(Client.roomId); } finally { this.nbClientsPerRoomGauge.dec({ room: Client.roomId }); delete Client.roomId; @@ -552,7 +562,7 @@ export class IoSocketController { private joinRoom(Client : ExSocketInterface, roomId: string, position: PointInterface): World { //join user in room - Client.join(roomId); + //Client.join(roomId); this.nbClientsPerRoomGauge.inc({ room: roomId }); Client.roomId = roomId; Client.position = position; @@ -570,6 +580,9 @@ export class IoSocketController { const clientUser = this.searchClientByIdOrFail(thing.id); const userJoinedMessage = new UserJoinedMessage(); + if (!Number.isInteger(clientUser.userId)) { + throw new Error('clientUser.userId is not an integer '+clientUser.userId); + } userJoinedMessage.setUserid(clientUser.userId); userJoinedMessage.setName(clientUser.name); userJoinedMessage.setCharacterlayersList(clientUser.characterLayers); @@ -578,7 +591,7 @@ export class IoSocketController { const subMessage = new SubMessage(); subMessage.setUserjoinedmessage(userJoinedMessage); - emitInBatch(clientListener, SocketIoEvent.JOIN_ROOM, subMessage); + emitInBatch(clientListener, subMessage); } else if (thing instanceof Group) { this.emitCreateUpdateGroupEvent(clientListener, thing); } else { @@ -596,7 +609,7 @@ export class IoSocketController { const subMessage = new SubMessage(); subMessage.setUsermovedmessage(userMovedMessage); - clientListener.emitInBatch(SocketIoEvent.USER_MOVED, subMessage); + clientListener.emitInBatch(subMessage); //console.log("Sending USER_MOVED event"); } else if (thing instanceof Group) { this.emitCreateUpdateGroupEvent(clientListener, thing); @@ -627,7 +640,7 @@ export class IoSocketController { return world; } - private emitCreateUpdateGroupEvent(socket: Socket, group: Group): void { + private emitCreateUpdateGroupEvent(client: ExSocketInterface, group: Group): void { const position = group.getPosition(); const pointMessage = new PointMessage(); pointMessage.setX(Math.floor(position.x)); @@ -639,8 +652,7 @@ export class IoSocketController { const subMessage = new SubMessage(); subMessage.setGroupupdatemessage(groupUpdateMessage); - const client : ExSocketInterface = socket as ExSocketInterface; - emitInBatch(client, SocketIoEvent.GROUP_CREATE_UPDATE, subMessage); + emitInBatch(client, subMessage); //socket.emit(SocketIoEvent.GROUP_CREATE_UPDATE, groupUpdateMessage.serializeBinary().buffer); } @@ -652,7 +664,7 @@ export class IoSocketController { subMessage.setGroupdeletemessage(groupDeleteMessage); const client : ExSocketInterface = socket as ExSocketInterface; - emitInBatch(client, SocketIoEvent.GROUP_DELETE, subMessage); + emitInBatch(client, subMessage); } private emitUserLeftEvent(socket: Socket, userId: number): void { @@ -663,7 +675,7 @@ export class IoSocketController { subMessage.setUserleftmessage(userLeftMessage); const client : ExSocketInterface = socket as ExSocketInterface; - emitInBatch(client, SocketIoEvent.USER_LEFT, subMessage); + emitInBatch(client, subMessage); } /** @@ -672,6 +684,10 @@ export class IoSocketController { * @param roomId */ joinWebRtcRoom(socket: ExSocketInterface, roomId: string) { + + // TODO: REBUILD THIS + return; + if (socket.webRtcRoomId === roomId) { return; } @@ -734,6 +750,9 @@ export class IoSocketController { //disconnect user disConnectedUser(userId: number, group: Group) { + // TODO: rebuild this + return; + const Client = this.searchClientByIdOrFail(userId); Client.to("webrtcroom"+group.getId()).emit(SocketIoEvent.WEBRTC_DISCONNECT, { userId: userId @@ -761,4 +780,5 @@ export class IoSocketController { public getWorlds(): Map { return this.Worlds; } + } diff --git a/back/src/Controller/MapController.ts b/back/src/Controller/MapController.ts index 58ce40a9..ad6f5548 100644 --- a/back/src/Controller/MapController.ts +++ b/back/src/Controller/MapController.ts @@ -1,29 +1,33 @@ -import express from "express"; -import {Application, Request, Response} from "express"; import {OK} from "http-status-codes"; import {URL_ROOM_STARTED} from "../Enum/EnvironmentVariable"; +import {HttpRequest, HttpResponse, TemplatedApp} from "uWebSockets.js"; +import {BaseController} from "./BaseController"; -export class MapController { - App: Application; +export class MapController extends BaseController{ - constructor(App: Application) { + constructor(private App : TemplatedApp) { + super(); this.App = App; this.getStartMap(); - this.assetMaps(); } - assetMaps() { - this.App.use('/map/files', express.static('src/Assets/Maps')); - } // Returns a map mapping map name to file name of the map getStartMap() { - this.App.get("/start-map", (req: Request, res: Response) => { - const url = req.headers.host?.replace('api.', 'maps.') + URL_ROOM_STARTED; - res.status(OK).send({ + this.App.options("/start-map", (res: HttpResponse, req: HttpRequest) => { + this.addCorsHeaders(res); + + res.end(); + }); + + this.App.get("/start-map", (res: HttpResponse, req: HttpRequest) => { + this.addCorsHeaders(res); + + const url = req.getHeader('host').replace('api.', 'maps.') + URL_ROOM_STARTED; + res.writeStatus("200 OK").end(JSON.stringify({ mapUrlStart: url, startInstance: "global" - }); + })); }); } } diff --git a/back/src/Model/Websocket/ExSocketInterface.ts b/back/src/Model/Websocket/ExSocketInterface.ts index ace374f4..36265143 100644 --- a/back/src/Model/Websocket/ExSocketInterface.ts +++ b/back/src/Model/Websocket/ExSocketInterface.ts @@ -1,11 +1,11 @@ -import {Socket} from "socket.io"; import {PointInterface} from "./PointInterface"; import {Identificable} from "./Identificable"; import {TokenInterface} from "../../Controller/AuthenticateController"; import {ViewportInterface} from "_Model/Websocket/ViewportMessage"; import {BatchMessage, SubMessage} from "../../Messages/generated/messages_pb"; +import {WebSocket} from "uWebSockets.js" -export interface ExSocketInterface extends Socket, Identificable { +export interface ExSocketInterface extends WebSocket, Identificable { token: string; roomId: string; webRtcRoomId: string|undefined; @@ -19,7 +19,8 @@ export interface ExSocketInterface extends Socket, Identificable { /** * Pushes an event that will be sent in the next batch of events */ - emitInBatch: (event: string, payload: SubMessage) => void; + emitInBatch: (payload: SubMessage) => void; batchedMessages: BatchMessage; batchTimeout: NodeJS.Timeout|null; + disconnecting: boolean } diff --git a/back/src/Model/Websocket/ProtobufUtils.ts b/back/src/Model/Websocket/ProtobufUtils.ts index aa6810a4..42adbd4c 100644 --- a/back/src/Model/Websocket/ProtobufUtils.ts +++ b/back/src/Model/Websocket/ProtobufUtils.ts @@ -1,8 +1,9 @@ import {PointInterface} from "./PointInterface"; -import {ItemEventMessage, PositionMessage} from "../../Messages/generated/messages_pb"; +import {ItemEventMessage, PointMessage, PositionMessage} from "../../Messages/generated/messages_pb"; import {ExSocketInterface} from "_Model/Websocket/ExSocketInterface"; import Direction = PositionMessage.Direction; import {ItemEventMessageInterface} from "_Model/Websocket/ItemEventMessage"; +import {PositionInterface} from "_Model/PositionInterface"; export class ProtobufUtils { @@ -34,6 +35,42 @@ export class ProtobufUtils { return position; } + public static toPointInterface(position: PositionMessage): PointInterface { + let direction: string; + switch (position.getDirection()) { + case Direction.UP: + direction = 'up'; + break; + case Direction.DOWN: + direction = 'down'; + break; + case Direction.LEFT: + direction = 'left'; + break; + case Direction.RIGHT: + direction = 'right'; + break; + default: + throw new Error("Unexpected direction"); + } + + // sending to all clients in room except sender + return { + x: position.getX(), + y: position.getY(), + direction, + moving: position.getMoving(), + }; + } + + public static toPointMessage(point: PositionInterface): PointMessage { + const position = new PointMessage(); + position.setX(Math.floor(point.x)); + position.setY(Math.floor(point.y)); + + return position; + } + public static toItemEvent(itemEventMessage: ItemEventMessage): ItemEventMessageInterface { return { itemId: itemEventMessage.getItemid(), diff --git a/back/src/Model/World.ts b/back/src/Model/World.ts index 75ac1bdc..8e645c74 100644 --- a/back/src/Model/World.ts +++ b/back/src/Model/World.ts @@ -74,8 +74,8 @@ export class World { this.users.delete(user.userId); if (userObj !== undefined) { - this.positionNotifier.leave(userObj); this.positionNotifier.removeViewport(userObj); + this.positionNotifier.leave(userObj); } } diff --git a/back/src/Server/server/app.ts b/back/src/Server/server/app.ts new file mode 100644 index 00000000..800353c2 --- /dev/null +++ b/back/src/Server/server/app.ts @@ -0,0 +1,13 @@ +import { App as _App, AppOptions } from 'uWebSockets.js'; +import BaseApp from './baseapp'; +import { extend } from './utils'; +import { UwsApp } from './types'; + +class App extends (_App) { + constructor(options: AppOptions = {}) { + super(options); + extend(this, new BaseApp()); + } +} + +export default App; diff --git a/back/src/Server/server/baseapp.ts b/back/src/Server/server/baseapp.ts new file mode 100644 index 00000000..dbac5929 --- /dev/null +++ b/back/src/Server/server/baseapp.ts @@ -0,0 +1,220 @@ +import { readdirSync, statSync } from 'fs'; +import { join, relative } from 'path'; +import { Readable } from 'stream'; +import { us_listen_socket_close, TemplatedApp, HttpResponse, HttpRequest } from 'uWebSockets.js'; +//import { watch } from 'chokidar'; + +import { wsConfig } from './livereload'; +import sendFile from './sendfile'; +import formData from './formdata'; +import loadroutes from './loadroutes'; +import { graphqlPost, graphqlWs } from './graphql'; +import { stob } from './utils'; +import { SendFileOptions, Handler } from './types'; + +const contTypes = ['application/x-www-form-urlencoded', 'multipart/form-data']; +const noOp = () => true; + +const handleBody = (res: HttpResponse, req: HttpRequest) => { + const contType = req.getHeader('content-type'); + + res.bodyStream = function() { + const stream = new Readable(); + stream._read = noOp; + + this.onData((ab, isLast) => { + // uint and then slicing is bit faster than slice and then uint + stream.push(new Uint8Array(ab.slice(ab.byteOffset, ab.byteLength))); + if (isLast) { + stream.push(null); + } + }); + + return stream; + }; + + res.body = () => stob(res.bodyStream()); + + if (contType.indexOf('application/json') > -1) + res.json = async () => JSON.parse(await res.body()); + if (contTypes.map(t => contType.indexOf(t) > -1).indexOf(true) > -1) + res.formData = formData.bind(res, contType); +}; + +class BaseApp { + _staticPaths = new Map(); + //_watched = new Map(); + _sockets = new Map(); + __livereloadenabled = false; + ws!: TemplatedApp['ws']; + get!: TemplatedApp['get']; + _post!: TemplatedApp['post']; + _put!: TemplatedApp['put']; + _patch!: TemplatedApp['patch']; + _listen!: TemplatedApp['listen']; + + file(pattern: string, filePath: string, options: SendFileOptions = {}) { + pattern=pattern.replace(/\\/g,'/'); + if (this._staticPaths.has(pattern)) { + if (options.failOnDuplicateRoute) + throw Error( + `Error serving '${filePath}' for '${pattern}', already serving '${ + this._staticPaths.get(pattern)[0] + }' file for this pattern.` + ); + else if (!options.overwriteRoute) return this; + } + + if (options.livereload && !this.__livereloadenabled) { + this.ws('/__sifrrLiveReload', wsConfig); + this.file('/livereload.js', join(__dirname, './livereloadjs.js')); + this.__livereloadenabled = true; + } + + this._staticPaths.set(pattern, [filePath, options]); + this.get(pattern, this._serveStatic); + return this; + } + + folder(prefix: string, folder: string, options: SendFileOptions, base: string = folder) { + // not a folder + if (!statSync(folder).isDirectory()) { + throw Error('Given path is not a directory: ' + folder); + } + + // ensure slash in beginning and no trailing slash for prefix + if (prefix[0] !== '/') prefix = '/' + prefix; + if (prefix[prefix.length - 1] === '/') prefix = prefix.slice(0, -1); + + // serve folder + const filter = options ? options.filter || noOp : noOp; + readdirSync(folder).forEach(file => { + // Absolute path + const filePath = join(folder, file); + // Return if filtered + if (!filter(filePath)) return; + + if (statSync(filePath).isDirectory()) { + // Recursive if directory + this.folder(prefix, filePath, options, base); + } else { + this.file(prefix + '/' + relative(base, filePath), filePath, options); + } + }); + + /*if (options && options.watch) { + if (!this._watched.has(folder)) { + const w = watch(folder); + + w.on('unlink', filePath => { + const url = '/' + relative(base, filePath); + this._staticPaths.delete(prefix + url); + }); + + w.on('add', filePath => { + const url = '/' + relative(base, filePath); + this.file(prefix + url, filePath, options); + }); + + this._watched.set(folder, w); + } + }*/ + return this; + } + + _serveStatic(res: HttpResponse, req: HttpRequest) { + res.onAborted(noOp); + const options = this._staticPaths.get(req.getUrl()); + if (typeof options === 'undefined') { + res.writeStatus('404 Not Found'); + res.end(); + } else sendFile(res, req, options[0], options[1]); + } + + post(pattern: string, handler: Handler) { + if (typeof handler !== 'function') + throw Error(`handler should be a function, given ${typeof handler}.`); + this._post(pattern, (res, req) => { + handleBody(res, req); + handler(res, req); + }); + return this; + } + + put(pattern: string, handler: Handler) { + if (typeof handler !== 'function') + throw Error(`handler should be a function, given ${typeof handler}.`); + this._put(pattern, (res, req) => { + handleBody(res, req); + + handler(res, req); + }); + return this; + } + + patch(pattern: string, handler: Handler) { + if (typeof handler !== 'function') + throw Error(`handler should be a function, given ${typeof handler}.`); + this._patch(pattern, (res, req) => { + handleBody(res, req); + + handler(res, req); + }); + return this; + } + + graphql(route: string, schema, graphqlOptions: any = {}, uwsOptions = {}, graphql) { + const handler = graphqlPost(schema, graphqlOptions, graphql); + this.post(route, handler); + this.ws(route, graphqlWs(schema, graphqlOptions, uwsOptions, graphql)); + // this.get(route, handler); + if (graphqlOptions && graphqlOptions.graphiqlPath) + this.file(graphqlOptions.graphiqlPath, join(__dirname, './graphiql.html')); + return this; + } + + load(dir: string, options) { + loadroutes.call(this, dir, options); + return this; + } + + listen(h: string | number, p: Function | number = noOp, cb?: Function) { + if (typeof p === 'number' && typeof h === 'string') { + this._listen(h, p, socket => { + this._sockets.set(p, socket); + if (cb === undefined) { + throw new Error('cb undefined'); + } + cb(socket); + }); + } else if (typeof h === 'number' && typeof p === 'function') { + this._listen(h, socket => { + this._sockets.set(h, socket); + p(socket); + }); + } else { + throw Error( + 'Argument types: (host: string, port: number, cb?: Function) | (port: number, cb?: Function)' + ); + } + + return this; + } + + close(port: null | number = null) { + //this._watched.forEach(v => v.close()); + //this._watched.clear(); + if (port) { + this._sockets.has(port) && us_listen_socket_close(this._sockets.get(port)); + this._sockets.delete(port); + } else { + this._sockets.forEach(app => { + us_listen_socket_close(app); + }); + this._sockets.clear(); + } + return this; + } +} + +export default BaseApp; diff --git a/back/src/Server/server/cluster.ts b/back/src/Server/server/cluster.ts new file mode 100644 index 00000000..5b875327 --- /dev/null +++ b/back/src/Server/server/cluster.ts @@ -0,0 +1,48 @@ +const noop = (a, b) => {}; + +export default class Cluster { + apps: any[]; + listens = {}; + // apps = [ { app: SifrrServerApp, port/ports: int } ] + constructor(apps) { + if (!Array.isArray(apps)) apps = [apps]; + this.apps = apps; + } + + listen(onListen = noop) { + for (let i = 0; i < this.apps.length; i++) { + const config = this.apps[i]; + let { app, port, ports } = config; + if (!Array.isArray(ports) || ports.length === 0) { + ports = [port]; + } + ports.forEach(p => { + if (typeof p !== 'number') throw Error(`Port should be a number, given ${p}`); + if (this.listens[p]) return; + + app.listen(p, socket => { + onListen.call(app, socket, p); + }); + this.listens[p] = app; + }); + } + return this; + } + + closeAll() { + Object.keys(this.listens).forEach(port => { + this.close(port); + }); + return this; + } + + close(port = null) { + if (port) { + this.listens[port] && this.listens[port].close(port); + delete this.listens[port]; + } else { + this.closeAll(); + } + return this; + } +} diff --git a/back/src/Server/server/formdata.ts b/back/src/Server/server/formdata.ts new file mode 100644 index 00000000..419e6c6b --- /dev/null +++ b/back/src/Server/server/formdata.ts @@ -0,0 +1,99 @@ +import { createWriteStream } from 'fs'; +import { join, dirname } from 'path'; +import Busboy from 'busboy'; +import mkdirp from 'mkdirp'; + +function formData( + contType: string, + options: busboy.BusboyConfig & { + abortOnLimit?: boolean; + tmpDir?: string; + onFile?: ( + fieldname: string, + file: NodeJS.ReadableStream, + filename: string, + encoding: string, + mimetype: string + ) => string; + onField?: (fieldname: string, value: any) => void; + filename?: (oldName: string) => string; + } = {} +) { + options.headers = { + 'content-type': contType + }; + + return new Promise((resolve, reject) => { + const busb = new Busboy(options); + const ret = {}; + + this.bodyStream().pipe(busb); + + busb.on('limit', () => { + if (options.abortOnLimit) { + reject(Error('limit')); + } + }); + + busb.on('file', function(fieldname, file, filename, encoding, mimetype) { + const value = { + filename, + encoding, + mimetype, + filePath: undefined + }; + + if (typeof options.tmpDir === 'string') { + if (typeof options.filename === 'function') filename = options.filename(filename); + const fileToSave = join(options.tmpDir, filename); + mkdirp(dirname(fileToSave)); + + file.pipe(createWriteStream(fileToSave)); + value.filePath = fileToSave; + } + if (typeof options.onFile === 'function') { + value.filePath = + options.onFile(fieldname, file, filename, encoding, mimetype) || value.filePath; + } + + setRetValue(ret, fieldname, value); + }); + + busb.on('field', function(fieldname, value) { + if (typeof options.onField === 'function') options.onField(fieldname, value); + + setRetValue(ret, fieldname, value); + }); + + busb.on('finish', function() { + resolve(ret); + }); + + busb.on('error', reject); + }); +} + +function setRetValue( + ret: { [x: string]: any }, + fieldname: string, + value: { filename: string; encoding: string; mimetype: string; filePath?: string } | any +) { + if (fieldname.slice(-2) === '[]') { + fieldname = fieldname.slice(0, fieldname.length - 2); + if (Array.isArray(ret[fieldname])) { + ret[fieldname].push(value); + } else { + ret[fieldname] = [value]; + } + } else { + if (Array.isArray(ret[fieldname])) { + ret[fieldname].push(value); + } else if (ret[fieldname]) { + ret[fieldname] = [ret[fieldname], value]; + } else { + ret[fieldname] = value; + } + } +} + +export default formData; diff --git a/back/src/Server/server/graphiql.html b/back/src/Server/server/graphiql.html new file mode 100644 index 00000000..7ce03921 --- /dev/null +++ b/back/src/Server/server/graphiql.html @@ -0,0 +1,133 @@ + + + + + + + + + + + + + + + + +
    Loading...
    + + + diff --git a/back/src/Server/server/graphql.ts b/back/src/Server/server/graphql.ts new file mode 100644 index 00000000..63a2bdaa --- /dev/null +++ b/back/src/Server/server/graphql.ts @@ -0,0 +1,138 @@ +import { parse } from 'query-string'; +import { createAsyncIterator, forAwaitEach, isAsyncIterable } from 'iterall'; +import { HttpResponse, HttpRequest } from 'uWebSockets.js'; +// client -> server +const GQL_START = 'start'; +const GQL_STOP = 'stop'; +// server -> client +const GQL_DATA = 'data'; +const GQL_QUERY = 'query'; + +async function getGraphqlParams(res: HttpResponse, req: HttpRequest) { + // query and variables + const queryParams = parse(req.getQuery()); + let { query, variables, operationName } = queryParams; + if (typeof variables === 'string') variables = JSON.parse(variables); + + // body + if (res && typeof res.json === 'function') { + const data = await res.json(); + query = data.query || query; + variables = data.variables || variables; + operationName = data.operationName || operationName; + } + return { + source: query, + variableValues: variables, + operationName + }; +} + +function graphqlPost(schema, graphqlOptions: any = {}, graphql: any = {}) { + const execute = graphql.graphql || require('graphql').graphql; + + return async (res: HttpResponse, req: HttpRequest) => { + res.onAborted(console.error); + + res.writeHeader('content-type', 'application/json'); + res.end( + JSON.stringify( + await execute({ + schema, + ...(await getGraphqlParams(res, req)), + ...graphqlOptions, + contextValue: { + res, + req, + ...(graphqlOptions && + (graphqlOptions.contextValue || + (graphqlOptions.contextFxn && (await graphqlOptions.contextFxn(res, req))))) + } + }) + ) + ); + }; +} + +function stopGqsSubscription(operations, reqOpId) { + if (!reqOpId) return; + operations[reqOpId] && operations[reqOpId].return && operations[reqOpId].return(); + delete operations[reqOpId]; +} + +function graphqlWs(schema, graphqlOptions: any = {}, uwsOptions: any = {}, graphql: any = {}) { + const subscribe = graphql.subscribe || require('graphql').subscribe; + const execute = graphql.graphql || require('graphql').graphql; + + return { + open: (ws, req) => { + ws.req = req; + ws.operations = {}; + ws.opId = 1; + }, + message: async (ws, message) => { + const { type, payload = {}, id: reqOpId } = JSON.parse(Buffer.from(message).toString('utf8')); + let opId; + if (reqOpId) { + opId = reqOpId; + } else { + opId = ws.opId++; + } + + const params = { + schema, + source: payload.query, + variableValues: payload.variables, + operationName: payload.operationName, + contextValue: { + ws, + ...(graphqlOptions && + (graphqlOptions.contextValue || + (graphqlOptions.contextFxn && (await graphqlOptions.contextFxn(ws))))) + }, + ...graphqlOptions + }; + + switch (type) { + case GQL_START: + stopGqsSubscription(ws.operations, opId); + + // eslint-disable-next-line no-case-declarations + let asyncIterable = await subscribe( + params.schema, + graphql.parse(params.source), + params.rootValue, + params.contextValue, + params.variableValues, + params.operationName + ); + asyncIterable = isAsyncIterable(asyncIterable) + ? asyncIterable + : createAsyncIterator([asyncIterable]); + + forAwaitEach(asyncIterable, result => + ws.send( + JSON.stringify({ + id: opId, + type: GQL_DATA, + payload: result + }) + ) + ); + break; + + case GQL_STOP: + stopGqsSubscription(ws.operations, reqOpId); + break; + + default: + ws.send(JSON.stringify({ payload: await execute(params), type: GQL_QUERY, id: opId })); + break; + } + }, + idleTimeout: 24 * 60 * 60, + ...uwsOptions + }; +} + +export { graphqlPost, graphqlWs }; diff --git a/back/src/Server/server/livereload.ts b/back/src/Server/server/livereload.ts new file mode 100644 index 00000000..787c871b --- /dev/null +++ b/back/src/Server/server/livereload.ts @@ -0,0 +1,35 @@ +import { WebSocketBehavior, WebSocket } from 'uWebSockets.js'; + +const websockets = {}; +let id = 0; + +const wsConfig: WebSocketBehavior = { + open: (ws: WebSocket & { id: number }, req) => { + websockets[id] = { + dirty: false + }; + ws.id = id; + console.log('websocket connected: ', id); + id++; + }, + message: ws => { + ws.send(JSON.stringify(websockets[ws.id].dirty)); + websockets[ws.id].dirty = false; + }, + close: (ws, code, message) => { + delete websockets[ws.id]; + console.log( + `websocket disconnected with code ${code} and message ${message}:`, + ws.id, + websockets + ); + } +}; + +const sendSignal = (type: string, path: string) => { + console.log(type, 'signal for file: ', path); + for (let i in websockets) websockets[i].dirty = true; +}; + +export default { websockets, wsConfig, sendSignal }; +export { websockets, wsConfig, sendSignal }; diff --git a/back/src/Server/server/livereloadjs.js b/back/src/Server/server/livereloadjs.js new file mode 100644 index 00000000..04839578 --- /dev/null +++ b/back/src/Server/server/livereloadjs.js @@ -0,0 +1,47 @@ +const loc = window.location; +let path; +if (loc.protocol === 'https:') { + path = 'wss:'; +} else { + path = 'ws:'; +} +path += '//' + loc.host + '/__sifrrLiveReload'; + +let ws, + ttr = 500, + timeout; + +function newWsConnection() { + ws = new WebSocket(path); + ws.onopen = function() { + ttr = 500; + checkMessage(); + console.log('watching for file changes through sifrr-server livereload mode.'); + }; + ws.onmessage = function(event) { + if (JSON.parse(event.data)) { + console.log('Files changed, refreshing page.'); + location.reload(); + } + }; + ws.onerror = e => { + console.error('Webosocket error: ', e); + console.log('Retrying after ', ttr / 4, 'ms'); + ttr *= 4; + }; + ws.onclose = e => { + console.error(`Webosocket closed with code \${e.code} error \${e.message}`); + }; +} + +function checkMessage() { + if (!ws) return; + if (ws.readyState === WebSocket.OPEN) ws.send(''); + else if (ws.readyState === WebSocket.CLOSED) newWsConnection(); + + if (timeout) clearTimeout(timeout); + timeout = setTimeout(checkMessage, ttr); +} + +newWsConnection(); +setTimeout(checkMessage, ttr); diff --git a/back/src/Server/server/loadroutes.ts b/back/src/Server/server/loadroutes.ts new file mode 100644 index 00000000..3761d762 --- /dev/null +++ b/back/src/Server/server/loadroutes.ts @@ -0,0 +1,42 @@ +import { statSync, readdirSync } from 'fs'; +import { join, extname } from 'path'; + +function loadRoutes(dir, { filter = () => true, basePath = '' } = {}) { + let files; + const paths = []; + + if (statSync(dir).isDirectory()) { + files = readdirSync(dir) + .filter(filter) + .map(file => join(dir, file)); + } else { + files = [dir]; + } + + files.forEach(file => { + if (statSync(file).isDirectory()) { + // Recursive if directory + paths.push(...loadRoutes.call(this, file, { filter, basePath })); + } else if (extname(file) === '.js') { + const routes = require(file); + let basePaths = routes.basePath || ['']; + delete routes.basePath; + if (typeof basePaths === 'string') basePaths = [basePaths]; + + basePaths.forEach(basep => { + for (const method in routes) { + const methodRoutes = routes[method]; + for (let r in methodRoutes) { + if (!Array.isArray(methodRoutes[r])) methodRoutes[r] = [methodRoutes[r]]; + this[method](basePath + basep + r, ...methodRoutes[r]); + paths.push(basePath + basep + r); + } + } + }); + } + }); + + return paths; +} + +export default loadRoutes; diff --git a/back/src/Server/server/mime.ts b/back/src/Server/server/mime.ts new file mode 100644 index 00000000..396073cc --- /dev/null +++ b/back/src/Server/server/mime.ts @@ -0,0 +1,176 @@ +const mimes = { + '3gp': 'video/3gpp', + a: 'application/octet-stream', + ai: 'application/postscript', + aif: 'audio/x-aiff', + aiff: 'audio/x-aiff', + asc: 'application/pgp-signature', + asf: 'video/x-ms-asf', + asm: 'text/x-asm', + asx: 'video/x-ms-asf', + atom: 'application/atom+xml', + au: 'audio/basic', + avi: 'video/x-msvideo', + bat: 'application/x-msdownload', + bin: 'application/octet-stream', + bmp: 'image/bmp', + bz2: 'application/x-bzip2', + c: 'text/x-c', + cab: 'application/vnd.ms-cab-compressed', + cc: 'text/x-c', + chm: 'application/vnd.ms-htmlhelp', + class: 'application/octet-stream', + com: 'application/x-msdownload', + conf: 'text/plain', + cpp: 'text/x-c', + crt: 'application/x-x509-ca-cert', + css: 'text/css', + csv: 'text/csv', + cxx: 'text/x-c', + deb: 'application/x-debian-package', + der: 'application/x-x509-ca-cert', + diff: 'text/x-diff', + djv: 'image/vnd.djvu', + djvu: 'image/vnd.djvu', + dll: 'application/x-msdownload', + dmg: 'application/octet-stream', + doc: 'application/msword', + dot: 'application/msword', + dtd: 'application/xml-dtd', + dvi: 'application/x-dvi', + ear: 'application/java-archive', + eml: 'message/rfc822', + eps: 'application/postscript', + exe: 'application/x-msdownload', + f: 'text/x-fortran', + f77: 'text/x-fortran', + f90: 'text/x-fortran', + flv: 'video/x-flv', + for: 'text/x-fortran', + gem: 'application/octet-stream', + gemspec: 'text/x-script.ruby', + gif: 'image/gif', + gz: 'application/x-gzip', + h: 'text/x-c', + hh: 'text/x-c', + htm: 'text/html', + html: 'text/html', + ico: 'image/vnd.microsoft.icon', + ics: 'text/calendar', + ifb: 'text/calendar', + iso: 'application/octet-stream', + jar: 'application/java-archive', + java: 'text/x-java-source', + jnlp: 'application/x-java-jnlp-file', + jpeg: 'image/jpeg', + jpg: 'image/jpeg', + js: 'application/javascript', + json: 'application/json', + log: 'text/plain', + m3u: 'audio/x-mpegurl', + m4v: 'video/mp4', + man: 'text/troff', + mathml: 'application/mathml+xml', + mbox: 'application/mbox', + mdoc: 'text/troff', + me: 'text/troff', + mid: 'audio/midi', + midi: 'audio/midi', + mime: 'message/rfc822', + mjs: 'application/javascript', + mml: 'application/mathml+xml', + mng: 'video/x-mng', + mov: 'video/quicktime', + mp3: 'audio/mpeg', + mp4: 'video/mp4', + mp4v: 'video/mp4', + mpeg: 'video/mpeg', + mpg: 'video/mpeg', + ms: 'text/troff', + msi: 'application/x-msdownload', + odp: 'application/vnd.oasis.opendocument.presentation', + ods: 'application/vnd.oasis.opendocument.spreadsheet', + odt: 'application/vnd.oasis.opendocument.text', + ogg: 'application/ogg', + p: 'text/x-pascal', + pas: 'text/x-pascal', + pbm: 'image/x-portable-bitmap', + pdf: 'application/pdf', + pem: 'application/x-x509-ca-cert', + pgm: 'image/x-portable-graymap', + pgp: 'application/pgp-encrypted', + pkg: 'application/octet-stream', + pl: 'text/x-script.perl', + pm: 'text/x-script.perl-module', + png: 'image/png', + pnm: 'image/x-portable-anymap', + ppm: 'image/x-portable-pixmap', + pps: 'application/vnd.ms-powerpoint', + ppt: 'application/vnd.ms-powerpoint', + ps: 'application/postscript', + psd: 'image/vnd.adobe.photoshop', + py: 'text/x-script.python', + qt: 'video/quicktime', + ra: 'audio/x-pn-realaudio', + rake: 'text/x-script.ruby', + ram: 'audio/x-pn-realaudio', + rar: 'application/x-rar-compressed', + rb: 'text/x-script.ruby', + rdf: 'application/rdf+xml', + roff: 'text/troff', + rpm: 'application/x-redhat-package-manager', + rss: 'application/rss+xml', + rtf: 'application/rtf', + ru: 'text/x-script.ruby', + s: 'text/x-asm', + sgm: 'text/sgml', + sgml: 'text/sgml', + sh: 'application/x-sh', + sig: 'application/pgp-signature', + snd: 'audio/basic', + so: 'application/octet-stream', + svg: 'image/svg+xml', + svgz: 'image/svg+xml', + swf: 'application/x-shockwave-flash', + t: 'text/troff', + tar: 'application/x-tar', + tbz: 'application/x-bzip-compressed-tar', + tcl: 'application/x-tcl', + tex: 'application/x-tex', + texi: 'application/x-texinfo', + texinfo: 'application/x-texinfo', + text: 'text/plain', + tif: 'image/tiff', + tiff: 'image/tiff', + torrent: 'application/x-bittorrent', + tr: 'text/troff', + txt: 'text/plain', + vcf: 'text/x-vcard', + vcs: 'text/x-vcalendar', + vrml: 'model/vrml', + war: 'application/java-archive', + wav: 'audio/x-wav', + wma: 'audio/x-ms-wma', + wmv: 'video/x-ms-wmv', + wmx: 'video/x-ms-wmx', + wrl: 'model/vrml', + wsdl: 'application/wsdl+xml', + xbm: 'image/x-xbitmap', + xhtml: 'application/xhtml+xml', + xls: 'application/vnd.ms-excel', + xml: 'application/xml', + xpm: 'image/x-xpixmap', + xsl: 'application/xml', + xslt: 'application/xslt+xml', + yaml: 'text/yaml', + yml: 'text/yaml', + zip: 'application/zip', + default: 'text/html' +}; + +const getMime = (path: string): string => { + const i = path.lastIndexOf('.'); + return mimes[path.substr(i + 1).toLowerCase()] || mimes['default']; +}; + +export { getMime, mimes }; diff --git a/back/src/Server/server/sendfile.ts b/back/src/Server/server/sendfile.ts new file mode 100644 index 00000000..8310c4a7 --- /dev/null +++ b/back/src/Server/server/sendfile.ts @@ -0,0 +1,172 @@ +import { watch, statSync, createReadStream } from 'fs'; +import { createBrotliCompress, createGzip, createDeflate } from 'zlib'; +const watchedPaths = new Set(); + +const compressions = { + br: createBrotliCompress, + gzip: createGzip, + deflate: createDeflate +}; +import { writeHeaders } from './utils'; +import { getMime } from './mime'; +const bytes = 'bytes='; +import { stob } from './utils'; +import { sendSignal } from './livereload'; +import { SendFileOptions } from './types'; +import { HttpResponse, HttpRequest } from 'uWebSockets.js'; + +function sendFile(res: HttpResponse, req: HttpRequest, path: string, options: SendFileOptions) { + if (options && options.livereload && !watchedPaths.has(path)) { + watchedPaths.add(path); + watch(path, sendSignal); + } + + sendFileToRes( + res, + { + 'if-modified-since': req.getHeader('if-modified-since'), + range: req.getHeader('range'), + 'accept-encoding': req.getHeader('accept-encoding') + }, + path, + options + ); +} + +function sendFileToRes( + res: HttpResponse, + reqHeaders: { [name: string]: string }, + path: string, + { + lastModified = true, + headers = {}, + compress = false, + compressionOptions = { + priority: ['gzip', 'br', 'deflate'] + }, + cache = false + }: { cache: any } & any = {} +) { + let { mtime, size } = statSync(path); + mtime.setMilliseconds(0); + const mtimeutc = mtime.toUTCString(); + + headers = Object.assign({}, headers); + // handling last modified + if (lastModified) { + // Return 304 if last-modified + if (reqHeaders['if-modified-since']) { + if (new Date(reqHeaders['if-modified-since']) >= mtime) { + res.writeStatus('304 Not Modified'); + return res.end(); + } + } + headers['last-modified'] = mtimeutc; + } + headers['content-type'] = getMime(path); + + // write data + let start = 0, + end = size - 1; + + if (reqHeaders.range) { + compress = false; + const parts = reqHeaders.range.replace(bytes, '').split('-'); + start = parseInt(parts[0], 10); + end = parts[1] ? parseInt(parts[1], 10) : end; + headers['accept-ranges'] = 'bytes'; + headers['content-range'] = `bytes ${start}-${end}/${size}`; + size = end - start + 1; + res.writeStatus('206 Partial Content'); + } + + // for size = 0 + if (end < 0) end = 0; + + let readStream = createReadStream(path, { start, end }); + // Compression; + let compressed: boolean | string = false; + if (compress) { + const l = compressionOptions.priority.length; + for (let i = 0; i < l; i++) { + const type = compressionOptions.priority[i]; + if (reqHeaders['accept-encoding'].indexOf(type) > -1) { + compressed = type; + const compressor = compressions[type](compressionOptions); + readStream.pipe(compressor); + readStream = compressor; + headers['content-encoding'] = compressionOptions.priority[i]; + break; + } + } + } + + res.onAborted(() => readStream.destroy()); + writeHeaders(res, headers); + // check cache + if (cache) { + return cache.wrap( + `${path}_${mtimeutc}_${start}_${end}_${compressed}`, + cb => { + stob(readStream) + .then(b => cb(null, b)) + .catch(cb); + }, + { ttl: 0 }, + (err, buffer) => { + if (err) { + res.writeStatus('500 Internal server error'); + res.end(); + throw err; + } + res.end(buffer); + } + ); + } else if (compressed) { + readStream.on('data', buffer => { + res.write(buffer.buffer.slice(buffer.byteOffset, buffer.byteOffset + buffer.byteLength)); + }); + } else { + readStream.on('data', buffer => { + const chunk = buffer.buffer.slice(buffer.byteOffset, buffer.byteOffset + buffer.byteLength), + lastOffset = res.getWriteOffset(); + + // First try + const [ok, done] = res.tryEnd(chunk, size); + + if (done) { + readStream.destroy(); + } else if (!ok) { + // pause because backpressure + readStream.pause(); + + // Save unsent chunk for later + res.ab = chunk; + res.abOffset = lastOffset; + + // Register async handlers for drainage + res.onWritable(offset => { + const [ok, done] = res.tryEnd(res.ab.slice(offset - res.abOffset), size); + if (done) { + readStream.destroy(); + } else if (ok) { + readStream.resume(); + } + return ok; + }); + } + }); + } + readStream + .on('error', e => { + res.writeStatus('500 Internal server error'); + res.end(); + readStream.destroy(); + throw e; + }) + .on('end', () => { + res.end(); + }); +} + +export default sendFile; diff --git a/back/src/Server/server/sslapp.ts b/back/src/Server/server/sslapp.ts new file mode 100644 index 00000000..60b17aa4 --- /dev/null +++ b/back/src/Server/server/sslapp.ts @@ -0,0 +1,13 @@ +import { SSLApp as _SSLApp, AppOptions } from 'uWebSockets.js'; +import BaseApp from './baseapp'; +import { extend } from './utils'; +import { UwsApp } from './types'; + +class SSLApp extends (_SSLApp) { + constructor(options: AppOptions) { + super(options); + extend(this, new BaseApp()); + } +} + +export default SSLApp; diff --git a/back/src/Server/server/types.ts b/back/src/Server/server/types.ts new file mode 100644 index 00000000..09916b5f --- /dev/null +++ b/back/src/Server/server/types.ts @@ -0,0 +1,26 @@ +import { AppOptions, TemplatedApp, HttpResponse, HttpRequest } from 'uWebSockets.js'; + +export type UwsApp = { + (options: AppOptions): TemplatedApp; + new (options: AppOptions): TemplatedApp; + prototype: TemplatedApp; +}; + +export type SendFileOptions = { + failOnDuplicateRoute?: boolean; + overwriteRoute?: boolean; + watch?: boolean; + filter?: (path: string) => boolean; + livereload?: boolean; + lastModified?: boolean; + headers?: { [name: string]: string }; + compress?: boolean; + compressionOptions?: { + priority?: 'gzip' | 'br' | 'deflate'; + }; + cache?: boolean; +}; + +export type Handler = (res: HttpResponse, req: HttpRequest) => void; + +export {}; diff --git a/back/src/Server/server/utils.ts b/back/src/Server/server/utils.ts new file mode 100644 index 00000000..8f6db886 --- /dev/null +++ b/back/src/Server/server/utils.ts @@ -0,0 +1,52 @@ +import { HttpResponse } from 'uWebSockets.js'; +import { ReadStream } from 'fs'; + +function writeHeaders( + res: HttpResponse, + headers: { [name: string]: string } | string, + other?: string +) { + if (typeof headers === 'string') { + res.writeHeader(headers, other.toString()); + } else { + for (const n in headers) { + res.writeHeader(n, headers[n].toString()); + } + } +} + +function extend(who: object, from: object, overwrite = true) { + const ownProps = Object.getOwnPropertyNames(Object.getPrototypeOf(from)).concat( + Object.keys(from) + ); + ownProps.forEach(prop => { + if (prop === 'constructor' || from[prop] === undefined) return; + if (who[prop] && overwrite) { + who[`_${prop}`] = who[prop]; + } + if (typeof from[prop] === 'function') who[prop] = from[prop].bind(who); + else who[prop] = from[prop]; + }); +} + +function stob(stream: ReadStream): Promise { + return new Promise(resolve => { + const buffers = []; + stream.on('data', buffers.push.bind(buffers)); + + stream.on('end', () => { + switch (buffers.length) { + case 0: + resolve(Buffer.allocUnsafe(0)); + break; + case 1: + resolve(buffers[0]); + break; + default: + resolve(Buffer.concat(buffers)); + } + }); + }); +} + +export { writeHeaders, extend, stob }; diff --git a/back/src/Server/sifrr.server.ts b/back/src/Server/sifrr.server.ts new file mode 100644 index 00000000..9a274378 --- /dev/null +++ b/back/src/Server/sifrr.server.ts @@ -0,0 +1,30 @@ +import { parse } from 'query-string'; +import { HttpRequest } from 'uWebSockets.js'; +import App from './server/app'; +import SSLApp from './server/sslapp'; +import { mimes, getMime } from './server/mime'; +import { writeHeaders } from './server/utils'; +import sendFile from './server/sendfile'; +import Cluster from './server/cluster'; +import livereload from './server/livereload'; +import * as types from './server/types'; + +const getQuery = (req: HttpRequest) => { + return parse(req.getQuery()); +}; + +export { App, SSLApp, mimes, getMime, writeHeaders, sendFile, Cluster, livereload, getQuery }; +export * from './server/types'; + +export default { + App, + SSLApp, + mimes, + getMime, + writeHeaders, + sendFile, + Cluster, + livereload, + getQuery, + ...types +}; diff --git a/back/yarn.lock b/back/yarn.lock index 3731547d..5531f281 100644 --- a/back/yarn.lock +++ b/back/yarn.lock @@ -20,13 +20,6 @@ chalk "^2.0.0" js-tokens "^4.0.0" -"@types/body-parser@*": - version "1.19.0" - resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.0.tgz#0685b3c47eb3006ffed117cdd55164b61f80538f" - dependencies: - "@types/connect" "*" - "@types/node" "*" - "@types/circular-json@^0.4.0": version "0.4.0" resolved "https://registry.yarnpkg.com/@types/circular-json/-/circular-json-0.4.0.tgz#7401f7e218cfe87ad4c43690da5658b9acaf51be" @@ -36,32 +29,10 @@ version "1.1.1" resolved "https://registry.yarnpkg.com/@types/color-name/-/color-name-1.1.1.tgz#1c1261bbeaa10a8055bbc5d8ab84b7b2afc846a0" -"@types/connect@*": - version "3.4.33" - resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.33.tgz#31610c901eca573b8713c3330abc6e6b9f588546" - dependencies: - "@types/node" "*" - "@types/eslint-visitor-keys@^1.0.0": version "1.0.0" resolved "https://registry.yarnpkg.com/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#1ee30d79544ca84d68d4b3cdb0af4f205663dd2d" -"@types/express-serve-static-core@*": - version "4.17.3" - resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.3.tgz#dc8068ee3e354d7fba69feb86b3dfeee49b10f09" - dependencies: - "@types/node" "*" - "@types/range-parser" "*" - -"@types/express@^4.17.4": - version "4.17.4" - resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.4.tgz#e78bf09f3f530889575f4da8a94cd45384520aac" - dependencies: - "@types/body-parser" "*" - "@types/express-serve-static-core" "*" - "@types/qs" "*" - "@types/serve-static" "*" - "@types/google-protobuf@^3.7.3": version "3.7.3" resolved "https://registry.yarnpkg.com/@types/google-protobuf/-/google-protobuf-3.7.3.tgz#429512e541bbd777f2c867692e6335ee08d1f6d4" @@ -87,35 +58,10 @@ dependencies: "@types/node" "*" -"@types/mime@*": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@types/mime/-/mime-2.0.1.tgz#dc488842312a7f075149312905b5e3c0b054c79d" - "@types/node@*": version "13.11.0" resolved "https://registry.yarnpkg.com/@types/node/-/node-13.11.0.tgz#390ea202539c61c8fa6ba4428b57e05bc36dc47b" -"@types/qs@*": - version "6.9.1" - resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.1.tgz#937fab3194766256ee09fcd40b781740758617e7" - -"@types/range-parser@*": - version "1.2.3" - resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.3.tgz#7ee330ba7caafb98090bece86a5ee44115904c2c" - -"@types/serve-static@*": - version "1.13.3" - resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.13.3.tgz#eb7e1c41c4468272557e897e9171ded5e2ded9d1" - dependencies: - "@types/express-serve-static-core" "*" - "@types/mime" "*" - -"@types/socket.io@^2.1.4": - version "2.1.4" - resolved "https://registry.yarnpkg.com/@types/socket.io/-/socket.io-2.1.4.tgz#674e7bc193c5ccdadd4433f79f3660d31759e9ac" - dependencies: - "@types/node" "*" - "@types/strip-bom@^3.0.0": version "3.0.0" resolved "https://registry.yarnpkg.com/@types/strip-bom/-/strip-bom-3.0.0.tgz#14a8ec3956c2e81edb7520790aecf21c290aebd2" @@ -169,13 +115,6 @@ semver "^6.3.0" tsutils "^3.17.1" -accepts@~1.3.4, accepts@~1.3.7: - version "1.3.7" - resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd" - dependencies: - mime-types "~2.1.24" - negotiator "0.6.2" - acorn-jsx@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.2.0.tgz#4c66069173d6fdd68ed85239fc256226182b2ebe" @@ -184,10 +123,6 @@ acorn@^7.1.1: version "7.1.1" resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.1.1.tgz#e35668de0b402f359de515c5482a1ab9f89a69bf" -after@0.8.2: - version "0.8.2" - resolved "https://registry.yarnpkg.com/after/-/after-0.8.2.tgz#fedb394f9f0e02aa9768e702bda23b505fae7e1f" - ajv@^6.10.0, ajv@^6.10.2: version "6.12.0" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.0.tgz#06d60b96d87b8454a5adaba86e7854da629db4b7" @@ -238,22 +173,10 @@ array-find-index@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1" -array-flatten@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" - -arraybuffer.slice@~0.0.7: - version "0.0.7" - resolved "https://registry.yarnpkg.com/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz#3bbc4275dd584cc1b10809b89d4e8b63a69e7675" - astral-regex@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" -async-limiter@~1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" - axios@^0.20.0: version "0.20.0" resolved "https://registry.yarnpkg.com/axios/-/axios-0.20.0.tgz#057ba30f04884694993a8cd07fa394cff11c50bd" @@ -261,38 +184,16 @@ axios@^0.20.0: dependencies: follow-redirects "^1.10.0" -backo2@1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/backo2/-/backo2-1.0.2.tgz#31ab1ac8b129363463e35b3ebb69f4dfcfba7947" - balanced-match@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" -base64-arraybuffer@0.1.5: - version "0.1.5" - resolved "https://registry.yarnpkg.com/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz#73926771923b5a19747ad666aa5cd4bf9c6e9ce8" - -base64id@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/base64id/-/base64id-2.0.0.tgz#2770ac6bc47d312af97a8bf9a634342e0cd25cb6" - -better-assert@~1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/better-assert/-/better-assert-1.0.2.tgz#40866b9e1b9e0b55b481894311e68faffaebc522" - dependencies: - callsite "1.0.0" - bintrees@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/bintrees/-/bintrees-1.0.1.tgz#0e655c9b9c2435eaab68bf4027226d2b55a34524" integrity sha1-DmVcm5wkNeqraL9AJyJtK1WjRSQ= -blob@0.0.5: - version "0.0.5" - resolved "https://registry.yarnpkg.com/blob/-/blob-0.0.5.tgz#d680eeef25f8cd91ad533f5b01eed48e64caf683" - -body-parser@1.19.0, body-parser@^1.19.0: +body-parser@^1.19.0: version "1.19.0" resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.0.tgz#96b2709e57c9c4e09a6fd66a8fd979844f69f08a" dependencies: @@ -322,14 +223,17 @@ buffer-from@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" +busboy@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/busboy/-/busboy-0.3.1.tgz#170899274c5bf38aae27d5c62b71268cd585fd1b" + integrity sha512-y7tTxhGKXcyBxRKAni+awqx8uqaJKrSFSNFSeRG5CsWNdmy2BIK+6VGWEW7TZnIO/533mtMEA4rOevQV815YJw== + dependencies: + dicer "0.3.0" + bytes@3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" -callsite@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/callsite/-/callsite-1.0.0.tgz#280398e5d664bd74038b6f0905153e6e8af1bc20" - callsites@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" @@ -399,44 +303,14 @@ color-name@~1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" -component-bind@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/component-bind/-/component-bind-1.0.0.tgz#00c608ab7dcd93897c0009651b1d3a8e1e73bbd1" - -component-emitter@1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6" - -component-inherit@0.0.3: - version "0.0.3" - resolved "https://registry.yarnpkg.com/component-inherit/-/component-inherit-0.0.3.tgz#645fc4adf58b72b649d5cae65135619db26ff143" - concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" -content-disposition@0.5.3: - version "0.5.3" - resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.3.tgz#e130caf7e7279087c5616c2007d0485698984fbd" - dependencies: - safe-buffer "5.1.2" - content-type@~1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" -cookie-signature@1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" - -cookie@0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.3.1.tgz#e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb" - -cookie@0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.0.tgz#beb437e7022b3b6d49019d088665303ebe9c14ba" - cross-spawn@^6.0.5: version "6.0.5" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" @@ -470,22 +344,21 @@ debug@2.6.9: dependencies: ms "2.0.0" -debug@^4.0.1, debug@^4.1.1, debug@~4.1.0: +debug@^4.0.1, debug@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" dependencies: ms "^2.1.1" -debug@~3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" - dependencies: - ms "2.0.0" - decamelize@^1.1.2: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" +decode-uri-component@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" + integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= + deep-is@~0.1.3: version "0.1.3" resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" @@ -494,9 +367,12 @@ depd@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" -destroy@~1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" +dicer@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/dicer/-/dicer-0.3.0.tgz#eacd98b3bfbf92e8ab5c2fdb71aaac44bb06b872" + integrity sha512-MdceRRWqltEG2dZqO769g27N/3PXfcKl04VhYnBlo2YhH7zPi88VebsjTKclaOyiuMaGU72hTfw3VkUitGcVCA== + dependencies: + streamsearch "0.1.2" diff@^4.0.1: version "4.0.2" @@ -532,57 +408,12 @@ emoji-regex@^8.0.0: version "8.0.0" resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" -encodeurl@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" - -engine.io-client@~3.4.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/engine.io-client/-/engine.io-client-3.4.0.tgz#82a642b42862a9b3f7a188f41776b2deab643700" - dependencies: - component-emitter "1.2.1" - component-inherit "0.0.3" - debug "~4.1.0" - engine.io-parser "~2.2.0" - has-cors "1.1.0" - indexof "0.0.1" - parseqs "0.0.5" - parseuri "0.0.5" - ws "~6.1.0" - xmlhttprequest-ssl "~1.5.4" - yeast "0.1.2" - -engine.io-parser@~2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/engine.io-parser/-/engine.io-parser-2.2.0.tgz#312c4894f57d52a02b420868da7b5c1c84af80ed" - dependencies: - after "0.8.2" - arraybuffer.slice "~0.0.7" - base64-arraybuffer "0.1.5" - blob "0.0.5" - has-binary2 "~1.0.2" - -engine.io@~3.4.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/engine.io/-/engine.io-3.4.0.tgz#3a962cc4535928c252759a00f98519cb46c53ff3" - dependencies: - accepts "~1.3.4" - base64id "2.0.0" - cookie "0.3.1" - debug "~4.1.0" - engine.io-parser "~2.2.0" - ws "^7.1.2" - error-ex@^1.2.0: version "1.3.2" resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" dependencies: is-arrayish "^0.2.1" -escape-html@~1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" - escape-string-regexp@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" @@ -688,45 +519,6 @@ esutils@^2.0.2: version "2.0.3" resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" -etag@~1.8.1: - version "1.8.1" - resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" - -express@^4.17.1: - version "4.17.1" - resolved "https://registry.yarnpkg.com/express/-/express-4.17.1.tgz#4491fc38605cf51f8629d39c2b5d026f98a4c134" - dependencies: - accepts "~1.3.7" - array-flatten "1.1.1" - body-parser "1.19.0" - content-disposition "0.5.3" - content-type "~1.0.4" - cookie "0.4.0" - cookie-signature "1.0.6" - debug "2.6.9" - depd "~1.1.2" - encodeurl "~1.0.2" - escape-html "~1.0.3" - etag "~1.8.1" - finalhandler "~1.1.2" - fresh "0.5.2" - merge-descriptors "1.0.1" - methods "~1.1.2" - on-finished "~2.3.0" - parseurl "~1.3.3" - path-to-regexp "0.1.7" - proxy-addr "~2.0.5" - qs "6.7.0" - range-parser "~1.2.1" - safe-buffer "5.1.2" - send "0.17.1" - serve-static "1.14.1" - setprototypeof "1.1.1" - statuses "~1.5.0" - type-is "~1.6.18" - utils-merge "1.0.1" - vary "~1.1.2" - external-editor@^3.0.3: version "3.1.0" resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" @@ -765,18 +557,6 @@ filewatcher@~3.0.0: dependencies: debounce "^1.0.0" -finalhandler@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d" - dependencies: - debug "2.6.9" - encodeurl "~1.0.2" - escape-html "~1.0.3" - on-finished "~2.3.0" - parseurl "~1.3.3" - statuses "~1.5.0" - unpipe "~1.0.0" - find-up@^1.0.0: version "1.1.2" resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" @@ -801,14 +581,6 @@ follow-redirects@^1.10.0: resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.13.0.tgz#b42e8d93a2a7eea5ed88633676d6597bc8e384db" integrity sha512-aq6gF1BEKje4a9i9+5jimNFIpq4Q1WiwBToeRK5NvZBd/TRsmW8BsJfOEGkr76TbOyPVD3OVDN910EcUNtRYEA== -forwarded@~0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84" - -fresh@0.5.2: - version "0.5.2" - resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" - fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" @@ -862,16 +634,6 @@ growly@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" -has-binary2@~1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has-binary2/-/has-binary2-1.0.3.tgz#7776ac627f3ea77250cfc332dab7ddf5e4f5d11d" - dependencies: - isarray "2.0.1" - -has-cors@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/has-cors/-/has-cors-1.1.0.tgz#5e474793f7ea9843d1bb99c23eef49ff126fff39" - has-flag@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" @@ -894,16 +656,6 @@ http-errors@1.7.2: statuses ">= 1.5.0 < 2" toidentifier "1.0.0" -http-errors@~1.7.2: - version "1.7.3" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06" - dependencies: - depd "~1.1.2" - inherits "2.0.4" - setprototypeof "1.1.1" - statuses ">= 1.5.0 < 2" - toidentifier "1.0.0" - http-status-codes@*, http-status-codes@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/http-status-codes/-/http-status-codes-1.4.0.tgz#6e4c15d16ff3a9e2df03b89f3a55e1aae05fb477" @@ -935,10 +687,6 @@ indent-string@^2.1.0: dependencies: repeating "^2.0.0" -indexof@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/indexof/-/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d" - inflight@^1.0.4: version "1.0.6" resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" @@ -946,7 +694,7 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@2.0.4: +inherits@2: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" @@ -972,10 +720,6 @@ inquirer@^7.0.0: strip-ansi "^6.0.0" through "^2.3.6" -ipaddr.js@1.9.1: - version "1.9.1" - resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" - is-arrayish@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" @@ -1014,14 +758,15 @@ is-wsl@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" -isarray@2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.1.tgz#a37d94ed9cda2d59865c9f76fe596ee1f338741e" - isexe@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" +iterall@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/iterall/-/iterall-1.3.0.tgz#afcb08492e2915cbd8a0884eb93a8c94d0d72fea" + integrity sha512-QZ9qOMdF+QLHxy1QIpUHUU1D5pS2CG2P69LF6L6CPjPYA/XMOmKV3PZpawHoAjHNyB0swdVTRxdYT4tbBbxqwg== + jasmine-core@~3.5.0: version "3.5.0" resolved "https://registry.yarnpkg.com/jasmine-core/-/jasmine-core-3.5.0.tgz#132c23e645af96d85c8bca13c8758b18429fc1e4" @@ -1165,14 +910,6 @@ meow@^3.3.0: redent "^1.0.0" trim-newlines "^1.0.0" -merge-descriptors@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" - -methods@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" - mime-db@1.43.0: version "1.43.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.43.0.tgz#0a12e0502650e473d735535050e7c8f4eb4fae58" @@ -1183,10 +920,6 @@ mime-types@~2.1.24: dependencies: mime-db "1.43.0" -mime@1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" - mimic-fn@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" @@ -1211,10 +944,6 @@ ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" -ms@2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" - ms@^2.1.1: version "2.1.2" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" @@ -1227,10 +956,6 @@ natural-compare@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" -negotiator@0.6.2: - version "0.6.2" - resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" - nice-try@^1.0.4: version "1.0.5" resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" @@ -1258,10 +983,6 @@ object-assign@^4.0.1: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" -object-component@0.0.3: - version "0.0.3" - resolved "https://registry.yarnpkg.com/object-component/-/object-component-0.0.3.tgz#f0c69aa50efc95b866c186f400a33769cb2f1291" - on-finished@~2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" @@ -1307,22 +1028,6 @@ parse-json@^2.2.0: dependencies: error-ex "^1.2.0" -parseqs@0.0.5: - version "0.0.5" - resolved "https://registry.yarnpkg.com/parseqs/-/parseqs-0.0.5.tgz#d5208a3738e46766e291ba2ea173684921a8b89d" - dependencies: - better-assert "~1.0.0" - -parseuri@0.0.5: - version "0.0.5" - resolved "https://registry.yarnpkg.com/parseuri/-/parseuri-0.0.5.tgz#80204a50d4dbb779bfdc6ebe2778d90e4bce320a" - dependencies: - better-assert "~1.0.0" - -parseurl@~1.3.3: - version "1.3.3" - resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" - path-exists@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" @@ -1341,10 +1046,6 @@ path-parse@^1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" -path-to-regexp@0.1.7: - version "0.1.7" - resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" - path-type@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" @@ -1382,13 +1083,6 @@ prom-client@^12.0.0: dependencies: tdigest "^0.1.1" -proxy-addr@~2.0.5: - version "2.0.6" - resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.6.tgz#fdc2336505447d3f2f2c638ed272caf614bbb2bf" - dependencies: - forwarded "~0.1.2" - ipaddr.js "1.9.1" - punycode@^2.1.0: version "2.1.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" @@ -1397,9 +1091,14 @@ qs@6.7.0: version "6.7.0" resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc" -range-parser@~1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" +query-string@^6.13.3: + version "6.13.3" + resolved "https://registry.yarnpkg.com/query-string/-/query-string-6.13.3.tgz#57d1c20e828b0e562d66b7f71a4998bd57f84112" + integrity sha512-dldo2oHe3sg03iPshlHw/64nkaRUJKdS0FW85kmWQkmCkqUbNdNdgkgtAufJcEpjzrx6Q9EW9Y3xqx/rM9pGhw== + dependencies: + decode-uri-component "^0.2.0" + split-on-first "^1.0.0" + strict-uri-encode "^2.0.0" raw-body@2.4.0: version "2.4.0" @@ -1487,10 +1186,6 @@ rxjs@^6.5.3: dependencies: tslib "^1.9.0" -safe-buffer@5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" - safe-buffer@^5.0.1: version "5.2.0" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.0.tgz#b74daec49b1148f88c64b68d49b1e815c1f2f519" @@ -1507,33 +1202,6 @@ semver@^6.1.2, semver@^6.3.0: version "6.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" -send@0.17.1: - version "0.17.1" - resolved "https://registry.yarnpkg.com/send/-/send-0.17.1.tgz#c1d8b059f7900f7466dd4938bdc44e11ddb376c8" - dependencies: - debug "2.6.9" - depd "~1.1.2" - destroy "~1.0.4" - encodeurl "~1.0.2" - escape-html "~1.0.3" - etag "~1.8.1" - fresh "0.5.2" - http-errors "~1.7.2" - mime "1.6.0" - ms "2.1.1" - on-finished "~2.3.0" - range-parser "~1.2.1" - statuses "~1.5.0" - -serve-static@1.14.1: - version "1.14.1" - resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.14.1.tgz#666e636dc4f010f7ef29970a88a674320898b2f9" - dependencies: - encodeurl "~1.0.2" - escape-html "~1.0.3" - parseurl "~1.3.3" - send "0.17.1" - setprototypeof@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683" @@ -1564,56 +1232,6 @@ slice-ansi@^2.1.0: astral-regex "^1.0.0" is-fullwidth-code-point "^2.0.0" -socket.io-adapter@~1.1.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/socket.io-adapter/-/socket.io-adapter-1.1.2.tgz#ab3f0d6f66b8fc7fca3959ab5991f82221789be9" - -socket.io-client@2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/socket.io-client/-/socket.io-client-2.3.0.tgz#14d5ba2e00b9bcd145ae443ab96b3f86cbcc1bb4" - dependencies: - backo2 "1.0.2" - base64-arraybuffer "0.1.5" - component-bind "1.0.0" - component-emitter "1.2.1" - debug "~4.1.0" - engine.io-client "~3.4.0" - has-binary2 "~1.0.2" - has-cors "1.1.0" - indexof "0.0.1" - object-component "0.0.3" - parseqs "0.0.5" - parseuri "0.0.5" - socket.io-parser "~3.3.0" - to-array "0.1.4" - -socket.io-parser@~3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/socket.io-parser/-/socket.io-parser-3.3.0.tgz#2b52a96a509fdf31440ba40fed6094c7d4f1262f" - dependencies: - component-emitter "1.2.1" - debug "~3.1.0" - isarray "2.0.1" - -socket.io-parser@~3.4.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/socket.io-parser/-/socket.io-parser-3.4.0.tgz#370bb4a151df2f77ce3345ff55a7072cc6e9565a" - dependencies: - component-emitter "1.2.1" - debug "~4.1.0" - isarray "2.0.1" - -socket.io@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/socket.io/-/socket.io-2.3.0.tgz#cd762ed6a4faeca59bc1f3e243c0969311eb73fb" - dependencies: - debug "~4.1.0" - engine.io "~3.4.0" - has-binary2 "~1.0.2" - socket.io-adapter "~1.1.0" - socket.io-client "2.3.0" - socket.io-parser "~3.4.0" - source-map-support@^0.5.12, source-map-support@^0.5.6: version "0.5.16" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.16.tgz#0ae069e7fe3ba7538c64c98515e35339eac5a042" @@ -1647,14 +1265,29 @@ spdx-license-ids@^3.0.0: version "3.0.5" resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz#3694b5804567a458d3c8045842a6358632f62654" +split-on-first@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/split-on-first/-/split-on-first-1.1.0.tgz#f610afeee3b12bce1d0c30425e76398b78249a5f" + integrity sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw== + sprintf-js@~1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" -"statuses@>= 1.5.0 < 2", statuses@~1.5.0: +"statuses@>= 1.5.0 < 2": version "1.5.0" resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" +streamsearch@0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/streamsearch/-/streamsearch-0.1.2.tgz#808b9d0e56fc273d809ba57338e929919a1a9f1a" + integrity sha1-gIudDlb8Jz2Am6VzOOkpkZoanxo= + +strict-uri-encode@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz#b9c7330c7042862f6b142dc274bbcc5866ce3546" + integrity sha1-ucczDHBChi9rFC3CdLvMWGbONUY= + string-width@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" @@ -1753,10 +1386,6 @@ tmp@^0.0.33: dependencies: os-tmpdir "~1.0.2" -to-array@0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/to-array/-/to-array-0.1.4.tgz#17e6c11f73dd4f3d74cda7a4ff3238e9ad9bf890" - toidentifier@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" @@ -1829,7 +1458,7 @@ type-fest@^0.8.1: version "0.8.1" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" -type-is@~1.6.17, type-is@~1.6.18: +type-is@~1.6.17: version "1.6.18" resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" dependencies: @@ -1840,7 +1469,11 @@ typescript@^3.8.3: version "3.8.3" resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.8.3.tgz#409eb8544ea0335711205869ec458ab109ee1061" -unpipe@1.0.0, unpipe@~1.0.0: +uWebSockets.js@uNetworking/uWebSockets.js#v18.5.0: + version "18.5.0" + resolved "https://codeload.github.com/uNetworking/uWebSockets.js/tar.gz/9b1605d2db82981cafe69dbe356e10ce412f5805" + +unpipe@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" @@ -1850,10 +1483,6 @@ uri-js@^4.2.2: dependencies: punycode "^2.1.0" -utils-merge@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" - uuid@7.0.3: version "7.0.3" resolved "https://registry.yarnpkg.com/uuid/-/uuid-7.0.3.tgz#c5c9f2c8cf25dc0a372c4df1441c41f5bd0c680b" @@ -1875,10 +1504,6 @@ validate-npm-package-license@^3.0.1: spdx-correct "^3.0.0" spdx-expression-parse "^3.0.0" -vary@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" - which@^1.2.9, which@^1.3.0: version "1.3.1" resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" @@ -1899,28 +1524,10 @@ write@1.0.3: dependencies: mkdirp "^0.5.1" -ws@^7.1.2: - version "7.2.3" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.2.3.tgz#a5411e1fb04d5ed0efee76d26d5c46d830c39b46" - -ws@~6.1.0: - version "6.1.4" - resolved "https://registry.yarnpkg.com/ws/-/ws-6.1.4.tgz#5b5c8800afab925e94ccb29d153c8d02c1776ef9" - dependencies: - async-limiter "~1.0.0" - -xmlhttprequest-ssl@~1.5.4: - version "1.5.5" - resolved "https://registry.yarnpkg.com/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz#c2876b06168aadc40e57d97e81191ac8f4398b3e" - xtend@^4.0.0: version "4.0.2" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" -yeast@0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/yeast/-/yeast-0.1.2.tgz#008e06d8094320c372dbc2f8ed76a0ca6c8ac419" - yn@3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" diff --git a/benchmark/index.ts b/benchmark/index.ts index 736a7bdc..50cd9e17 100644 --- a/benchmark/index.ts +++ b/benchmark/index.ts @@ -1,9 +1,14 @@ import {Connection} from "../front/src/Connection"; +import * as WebSocket from "ws" function sleep(ms) { return new Promise(resolve => setTimeout(resolve, ms)); } +Connection.setWebsocketFactory((url: string) => { + return new WebSocket(url); +}); + async function startOneUser(): Promise { const connection = await Connection.createConnection('foo', ['male3']); diff --git a/benchmark/package.json b/benchmark/package.json index 2c874a7e..b0cd6a23 100644 --- a/benchmark/package.json +++ b/benchmark/package.json @@ -21,11 +21,10 @@ ], "license": "SEE LICENSE IN LICENSE.txt", "dependencies": { - "socket.io-client": "^2.3.0", + "@types/ws": "^7.2.6", "ts-node-dev": "^1.0.0-pre.62", - "typescript": "^4.0.2" + "typescript": "^4.0.2", + "ws": "^7.3.1" }, - "devDependencies": { - "@types/socket.io-client": "^1.4.33" - } + "devDependencies": {} } diff --git a/benchmark/yarn.lock b/benchmark/yarn.lock index 4c73bc38..d93e3667 100644 --- a/benchmark/yarn.lock +++ b/benchmark/yarn.lock @@ -2,9 +2,9 @@ # yarn lockfile v1 -"@types/socket.io-client@^1.4.33": - version "1.4.33" - resolved "https://registry.yarnpkg.com/@types/socket.io-client/-/socket.io-client-1.4.33.tgz#8e705b9b3f7fba6cb329d27cd2eda222812adbf1" +"@types/node@*": + version "14.11.2" + resolved "https://registry.yarnpkg.com/@types/node/-/node-14.11.2.tgz#2de1ed6670439387da1c9f549a2ade2b0a799256" "@types/strip-bom@^3.0.0": version "3.0.0" @@ -14,9 +14,11 @@ version "0.0.30" resolved "https://registry.yarnpkg.com/@types/strip-json-comments/-/strip-json-comments-0.0.30.tgz#9aa30c04db212a9a0649d6ae6fd50accc40748a1" -after@0.8.2: - version "0.8.2" - resolved "https://registry.yarnpkg.com/after/-/after-0.8.2.tgz#fedb394f9f0e02aa9768e702bda23b505fae7e1f" +"@types/ws@^7.2.6": + version "7.2.6" + resolved "https://registry.yarnpkg.com/@types/ws/-/ws-7.2.6.tgz#516cbfb818310f87b43940460e065eb912a4178d" + dependencies: + "@types/node" "*" anymatch@~3.1.1: version "3.1.1" @@ -33,40 +35,14 @@ array-find-index@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1" -arraybuffer.slice@~0.0.7: - version "0.0.7" - resolved "https://registry.yarnpkg.com/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz#3bbc4275dd584cc1b10809b89d4e8b63a69e7675" - -async-limiter@~1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" - -backo2@1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/backo2/-/backo2-1.0.2.tgz#31ab1ac8b129363463e35b3ebb69f4dfcfba7947" - balanced-match@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" -base64-arraybuffer@0.1.5: - version "0.1.5" - resolved "https://registry.yarnpkg.com/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz#73926771923b5a19747ad666aa5cd4bf9c6e9ce8" - -better-assert@~1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/better-assert/-/better-assert-1.0.2.tgz#40866b9e1b9e0b55b481894311e68faffaebc522" - dependencies: - callsite "1.0.0" - binary-extensions@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.1.0.tgz#30fa40c9e7fe07dbc895678cd287024dea241dd9" -blob@0.0.5: - version "0.0.5" - resolved "https://registry.yarnpkg.com/blob/-/blob-0.0.5.tgz#d680eeef25f8cd91ad533f5b01eed48e64caf683" - brace-expansion@^1.1.7: version "1.1.11" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" @@ -84,10 +60,6 @@ buffer-from@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" -callsite@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/callsite/-/callsite-1.0.0.tgz#280398e5d664bd74038b6f0905153e6e8af1bc20" - camelcase-keys@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7" @@ -113,22 +85,6 @@ chokidar@^3.4.0: optionalDependencies: fsevents "~2.1.2" -component-bind@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/component-bind/-/component-bind-1.0.0.tgz#00c608ab7dcd93897c0009651b1d3a8e1e73bbd1" - -component-emitter@1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6" - -component-emitter@~1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" - -component-inherit@0.0.3: - version "0.0.3" - resolved "https://registry.yarnpkg.com/component-inherit/-/component-inherit-0.0.3.tgz#645fc4adf58b72b649d5cae65135619db26ff143" - concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" @@ -146,18 +102,6 @@ dateformat@~1.0.4-1.2.3: get-stdin "^4.0.1" meow "^3.3.0" -debug@~3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" - dependencies: - ms "2.0.0" - -debug@~4.1.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" - dependencies: - ms "^2.1.1" - decamelize@^1.1.2: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" @@ -172,32 +116,6 @@ dynamic-dedupe@^0.3.0: dependencies: xtend "^4.0.0" -engine.io-client@~3.4.0: - version "3.4.3" - resolved "https://registry.yarnpkg.com/engine.io-client/-/engine.io-client-3.4.3.tgz#192d09865403e3097e3575ebfeb3861c4d01a66c" - dependencies: - component-emitter "~1.3.0" - component-inherit "0.0.3" - debug "~4.1.0" - engine.io-parser "~2.2.0" - has-cors "1.1.0" - indexof "0.0.1" - parseqs "0.0.5" - parseuri "0.0.5" - ws "~6.1.0" - xmlhttprequest-ssl "~1.5.4" - yeast "0.1.2" - -engine.io-parser@~2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/engine.io-parser/-/engine.io-parser-2.2.0.tgz#312c4894f57d52a02b420868da7b5c1c84af80ed" - dependencies: - after "0.8.2" - arraybuffer.slice "~0.0.7" - base64-arraybuffer "0.1.5" - blob "0.0.5" - has-binary2 "~1.0.2" - error-ex@^1.2.0: version "1.3.2" resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" @@ -250,16 +168,6 @@ graceful-fs@^4.1.2: version "4.2.4" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" -has-binary2@~1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has-binary2/-/has-binary2-1.0.3.tgz#7776ac627f3ea77250cfc332dab7ddf5e4f5d11d" - dependencies: - isarray "2.0.1" - -has-cors@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/has-cors/-/has-cors-1.1.0.tgz#5e474793f7ea9843d1bb99c23eef49ff126fff39" - hosted-git-info@^2.1.4: version "2.8.8" resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.8.tgz#7539bd4bc1e0e0a895815a2e0262420b12858488" @@ -270,10 +178,6 @@ indent-string@^2.1.0: dependencies: repeating "^2.0.0" -indexof@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/indexof/-/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d" - inflight@^1.0.4: version "1.0.6" resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" @@ -317,10 +221,6 @@ is-utf8@^0.2.0: version "0.2.1" resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" -isarray@2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.1.tgz#a37d94ed9cda2d59865c9f76fe596ee1f338741e" - load-json-file@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" @@ -375,14 +275,6 @@ mkdirp@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" -ms@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" - -ms@^2.1.1: - version "2.1.2" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" - normalize-package-data@^2.3.2, normalize-package-data@^2.3.4: version "2.5.0" resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" @@ -400,10 +292,6 @@ object-assign@^4.0.1: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" -object-component@0.0.3: - version "0.0.3" - resolved "https://registry.yarnpkg.com/object-component/-/object-component-0.0.3.tgz#f0c69aa50efc95b866c186f400a33769cb2f1291" - once@^1.3.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" @@ -416,18 +304,6 @@ parse-json@^2.2.0: dependencies: error-ex "^1.2.0" -parseqs@0.0.5: - version "0.0.5" - resolved "https://registry.yarnpkg.com/parseqs/-/parseqs-0.0.5.tgz#d5208a3738e46766e291ba2ea173684921a8b89d" - dependencies: - better-assert "~1.0.0" - -parseuri@0.0.5: - version "0.0.5" - resolved "https://registry.yarnpkg.com/parseuri/-/parseuri-0.0.5.tgz#80204a50d4dbb779bfdc6ebe2778d90e4bce320a" - dependencies: - better-assert "~1.0.0" - path-exists@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" @@ -522,33 +398,6 @@ signal-exit@^3.0.0: version "3.0.3" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" -socket.io-client@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/socket.io-client/-/socket.io-client-2.3.0.tgz#14d5ba2e00b9bcd145ae443ab96b3f86cbcc1bb4" - dependencies: - backo2 "1.0.2" - base64-arraybuffer "0.1.5" - component-bind "1.0.0" - component-emitter "1.2.1" - debug "~4.1.0" - engine.io-client "~3.4.0" - has-binary2 "~1.0.2" - has-cors "1.1.0" - indexof "0.0.1" - object-component "0.0.3" - parseqs "0.0.5" - parseuri "0.0.5" - socket.io-parser "~3.3.0" - to-array "0.1.4" - -socket.io-parser@~3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/socket.io-parser/-/socket.io-parser-3.3.0.tgz#2b52a96a509fdf31440ba40fed6094c7d4f1262f" - dependencies: - component-emitter "1.2.1" - debug "~3.1.0" - isarray "2.0.1" - source-map-support@^0.5.12, source-map-support@^0.5.17: version "0.5.19" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61" @@ -602,10 +451,6 @@ strip-json-comments@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" -to-array@0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/to-array/-/to-array-0.1.4.tgz#17e6c11f73dd4f3d74cda7a4ff3238e9ad9bf890" - to-regex-range@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" @@ -670,24 +515,14 @@ wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" -ws@~6.1.0: - version "6.1.4" - resolved "https://registry.yarnpkg.com/ws/-/ws-6.1.4.tgz#5b5c8800afab925e94ccb29d153c8d02c1776ef9" - dependencies: - async-limiter "~1.0.0" - -xmlhttprequest-ssl@~1.5.4: - version "1.5.5" - resolved "https://registry.yarnpkg.com/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz#c2876b06168aadc40e57d97e81191ac8f4398b3e" +ws@^7.3.1: + version "7.3.1" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.3.1.tgz#d0547bf67f7ce4f12a72dfe31262c68d7dc551c8" xtend@^4.0.0: version "4.0.2" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" -yeast@0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/yeast/-/yeast-0.1.2.tgz#008e06d8094320c372dbc2f8ed76a0ca6c8ac419" - yn@3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" diff --git a/front/src/Connection.ts b/front/src/Connection.ts index 61b0c4e7..d7036ba8 100644 --- a/front/src/Connection.ts +++ b/front/src/Connection.ts @@ -2,15 +2,13 @@ import Axios from "axios"; import {API_URL} from "./Enum/EnvironmentVariable"; import {MessageUI} from "./Logger/MessageUI"; import { - BatchMessage, GroupDeleteMessage, GroupUpdateMessage, ItemEventMessage, - PositionMessage, - SetPlayerDetailsMessage, UserJoinedMessage, UserLeftMessage, UserMovedMessage, + BatchMessage, ClientToServerMessage, GroupDeleteMessage, GroupUpdateMessage, ItemEventMessage, JoinRoomMessage, + PositionMessage, RoomJoinedMessage, ServerToClientMessage, + SetPlayerDetailsMessage, SetUserIdMessage, SilentMessage, UserJoinedMessage, UserLeftMessage, UserMovedMessage, UserMovesMessage, ViewportMessage } from "./Messages/generated/messages_pb" -const SocketIo = require('socket.io-client'); -import Socket = SocketIOClient.Socket; import {PlayerAnimationNames} from "./Phaser/Player/Animation"; import {UserSimplePeerInterface} from "./WebRtc/SimplePeer"; import {SignalData} from "simple-peer"; @@ -132,63 +130,91 @@ export interface RoomJoinedMessageInterface { } export class Connection implements Connection { - private readonly socket: Socket; + private readonly socket: WebSocket; private userId: number|null = null; private batchCallbacks: Map = new Map(); + private static websocketFactory: null|((url: string)=>any) = null; + + public static setWebsocketFactory(websocketFactory: (url: string)=>any): void { + Connection.websocketFactory = websocketFactory; + } private constructor(token: string) { + let url = API_URL.replace('http://', 'ws://').replace('https://', 'wss://'); + url += '?token='+token; - this.socket = SocketIo(`${API_URL}`, { - query: { - token: token - }, - reconnection: false // Reconnection is handled by the application itself - }); + if (Connection.websocketFactory) { + this.socket = Connection.websocketFactory(url); + } else { + this.socket = new WebSocket(url); + } - this.socket.on(EventMessage.MESSAGE_ERROR, (message: string) => { - console.error(EventMessage.MESSAGE_ERROR, message); - }) + this.socket.binaryType = 'arraybuffer'; - /** - * Messages inside batched messages are extracted and sent to listeners directly. - */ - this.socket.on(EventMessage.BATCH, (batchedMessagesBinary: ArrayBuffer) => { - const batchMessage = BatchMessage.deserializeBinary(new Uint8Array(batchedMessagesBinary)); + this.socket.onopen = (ev) => { + console.log('WS connected'); + }; - for (const message of batchMessage.getPayloadList()) { - let event: string; - let payload; - if (message.hasUsermovedmessage()) { - event = EventMessage.USER_MOVED; - payload = message.getUsermovedmessage(); - } else if (message.hasGroupupdatemessage()) { - event = EventMessage.GROUP_CREATE_UPDATE; - payload = message.getGroupupdatemessage(); - } else if (message.hasGroupdeletemessage()) { - event = EventMessage.GROUP_DELETE; - payload = message.getGroupdeletemessage(); - } else if (message.hasUserjoinedmessage()) { - event = EventMessage.JOIN_ROOM; - payload = message.getUserjoinedmessage(); - } else if (message.hasUserleftmessage()) { - event = EventMessage.USER_LEFT; - payload = message.getUserleftmessage(); - } else if (message.hasItemeventmessage()) { - event = EventMessage.ITEM_EVENT; - payload = message.getItemeventmessage(); - } else { - throw new Error('Unexpected batch message type'); + this.socket.onmessage = (messageEvent) => { + const arrayBuffer: ArrayBuffer = messageEvent.data; + const message = ServerToClientMessage.deserializeBinary(new Uint8Array(arrayBuffer)); + + if (message.hasBatchmessage()) { + for (const subMessage of (message.getBatchmessage() as BatchMessage).getPayloadList()) { + let event: string; + let payload; + if (subMessage.hasUsermovedmessage()) { + event = EventMessage.USER_MOVED; + payload = subMessage.getUsermovedmessage(); + } else if (subMessage.hasGroupupdatemessage()) { + event = EventMessage.GROUP_CREATE_UPDATE; + payload = subMessage.getGroupupdatemessage(); + } else if (subMessage.hasGroupdeletemessage()) { + event = EventMessage.GROUP_DELETE; + payload = subMessage.getGroupdeletemessage(); + } else if (subMessage.hasUserjoinedmessage()) { + event = EventMessage.JOIN_ROOM; + payload = subMessage.getUserjoinedmessage(); + } else if (subMessage.hasUserleftmessage()) { + event = EventMessage.USER_LEFT; + payload = subMessage.getUserleftmessage(); + } else if (subMessage.hasItemeventmessage()) { + event = EventMessage.ITEM_EVENT; + payload = subMessage.getItemeventmessage(); + } else { + throw new Error('Unexpected batch message type'); + } + + const listeners = this.batchCallbacks.get(event); + if (listeners === undefined) { + continue; + } + for (const listener of listeners) { + listener(payload); + } + } + } else if (message.hasRoomjoinedmessage()) { + const roomJoinedMessage = message.getRoomjoinedmessage() as RoomJoinedMessage; + + const users: Array = roomJoinedMessage.getUserList().map(this.toMessageUserJoined); + const groups: Array = roomJoinedMessage.getGroupList().map(this.toGroupCreatedUpdatedMessage); + let items: { [itemId: number] : unknown } = {}; + for (const item of roomJoinedMessage.getItemList()) { + items[item.getItemid()] = JSON.parse(item.getStatejson()); } - const listeners = this.batchCallbacks.get(event); - if (listeners === undefined) { - continue; - } - for (const listener of listeners) { - listener(payload); - } + this.resolveJoinRoom({ + users, + groups, + items + }) + } else if (message.hasSetuseridmessage()) { + this.userId = (message.getSetuseridmessage() as SetUserIdMessage).getUserid(); + } else if (message.hasErrormessage()) { + console.error(EventMessage.MESSAGE_ERROR, message.getErrormessage()?.getMessage); } - }) + + } } public static createConnection(name: string, characterLayersSelected: string[]): Promise { @@ -203,18 +229,23 @@ export class Connection implements Connection { reject(error); }); - const message = new SetPlayerDetailsMessage(); - message.setName(name); - message.setCharacterlayersList(characterLayersSelected); - connection.socket.emit(EventMessage.SET_PLAYER_DETAILS, message.serializeBinary().buffer, (id: number) => { - connection.userId = id; - }); + connection.onConnect(() => { + const message = new SetPlayerDetailsMessage(); + message.setName(name); + message.setCharacterlayersList(characterLayersSelected); - resolve(connection); + const clientToServerMessage = new ClientToServerMessage(); + clientToServerMessage.setSetplayerdetailsmessage(message); + + connection.socket.send(clientToServerMessage.serializeBinary().buffer); + + resolve(connection); + }); }); }) .catch((err) => { // Let's retry in 4-6 seconds + console.error('Connection failed. Retrying', err); return new Promise((resolve, reject) => { setTimeout(() => { Connection.createConnection(name, characterLayersSelected).then((connection) => resolve(connection)) @@ -228,24 +259,30 @@ export class Connection implements Connection { this.socket?.close(); } + private resolveJoinRoom!: (value?: (RoomJoinedMessageInterface | PromiseLike | undefined)) => void; public joinARoom(roomId: string, startX: number, startY: number, direction: string, moving: boolean, viewport: ViewportInterface): Promise { const promise = new Promise((resolve, reject) => { - this.socket.emit(EventMessage.JOIN_ROOM, { - roomId, - position: {x: startX, y: startY, direction, moving }, - viewport, - }, (roomJoinedMessage: RoomJoinedMessageInterface) => { - resolve(roomJoinedMessage); - }); + this.resolveJoinRoom = resolve; + + const positionMessage = this.toPositionMessage(startX, startY, direction, moving); + const viewportMessage = this.toViewportMessage(viewport); + + const joinRoomMessage = new JoinRoomMessage(); + joinRoomMessage.setRoomid(roomId); + joinRoomMessage.setPosition(positionMessage); + joinRoomMessage.setViewport(viewportMessage); + + //console.log('Sending position ', positionMessage.getX(), positionMessage.getY()); + const clientToServerMessage = new ClientToServerMessage(); + clientToServerMessage.setJoinroommessage(joinRoomMessage); + + this.socket.send(clientToServerMessage.serializeBinary().buffer); }) return promise; } - public sharePosition(x : number, y : number, direction : string, moving: boolean, viewport: ViewportInterface) : void{ - if(!this.socket){ - return; - } + private toPositionMessage(x : number, y : number, direction : string, moving: boolean): PositionMessage { const positionMessage = new PositionMessage(); positionMessage.setX(Math.floor(x)); positionMessage.setY(Math.floor(y)); @@ -269,23 +306,47 @@ export class Connection implements Connection { positionMessage.setDirection(directionEnum); positionMessage.setMoving(moving); + return positionMessage; + } + + private toViewportMessage(viewport: ViewportInterface): ViewportMessage { const viewportMessage = new ViewportMessage(); viewportMessage.setLeft(Math.floor(viewport.left)); viewportMessage.setRight(Math.floor(viewport.right)); viewportMessage.setTop(Math.floor(viewport.top)); viewportMessage.setBottom(Math.floor(viewport.bottom)); + return viewportMessage; + } + + public sharePosition(x : number, y : number, direction : string, moving: boolean, viewport: ViewportInterface) : void{ + if(!this.socket){ + return; + } + + const positionMessage = this.toPositionMessage(x, y, direction, moving); + + const viewportMessage = this.toViewportMessage(viewport); + const userMovesMessage = new UserMovesMessage(); userMovesMessage.setPosition(positionMessage); userMovesMessage.setViewport(viewportMessage); //console.log('Sending position ', positionMessage.getX(), positionMessage.getY()); + const clientToServerMessage = new ClientToServerMessage(); + clientToServerMessage.setUsermovesmessage(userMovesMessage); - this.socket.emit(EventMessage.USER_POSITION, userMovesMessage.serializeBinary().buffer); + this.socket.send(clientToServerMessage.serializeBinary().buffer); } public setSilent(silent: boolean): void { - this.socket.emit(EventMessage.SET_SILENT, silent); + const silentMessage = new SilentMessage(); + silentMessage.setSilent(silent); + + const clientToServerMessage = new ClientToServerMessage(); + clientToServerMessage.setSilentmessage(silentMessage); + + this.socket.send(clientToServerMessage.serializeBinary().buffer); } public setViewport(viewport: ViewportInterface): void { @@ -295,25 +356,32 @@ export class Connection implements Connection { viewportMessage.setLeft(Math.round(viewport.left)); viewportMessage.setRight(Math.round(viewport.right)); - this.socket.emit(EventMessage.SET_VIEWPORT, viewportMessage.serializeBinary().buffer); + const clientToServerMessage = new ClientToServerMessage(); + clientToServerMessage.setViewportmessage(viewportMessage); + + this.socket.send(clientToServerMessage.serializeBinary().buffer); } public onUserJoins(callback: (message: MessageUserJoined) => void): void { this.onBatchMessage(EventMessage.JOIN_ROOM, (message: UserJoinedMessage) => { - const position = message.getPosition(); - if (position === undefined) { - throw new Error('Invalid JOIN_ROOM message'); - } - const messageUserJoined: MessageUserJoined = { - userId: message.getUserid(), - name: message.getName(), - characterLayers: message.getCharacterlayersList(), - position: ProtobufClientUtils.toPointInterface(position) - } - callback(messageUserJoined); + callback(this.toMessageUserJoined(message)); }); } + // TODO: move this to protobuf utils + private toMessageUserJoined(message: UserJoinedMessage): MessageUserJoined { + const position = message.getPosition(); + if (position === undefined) { + throw new Error('Invalid JOIN_ROOM message'); + } + return { + userId: message.getUserid(), + name: message.getName(), + characterLayers: message.getCharacterlayersList(), + position: ProtobufClientUtils.toPointInterface(position) + } + } + public onUserMoved(callback: (message: UserMovedMessage) => void): void { this.onBatchMessage(EventMessage.USER_MOVED, callback); //this.socket.on(EventMessage.USER_MOVED, callback); @@ -339,64 +407,73 @@ export class Connection implements Connection { public onGroupUpdatedOrCreated(callback: (groupCreateUpdateMessage: GroupCreatedUpdatedMessageInterface) => void): void { this.onBatchMessage(EventMessage.GROUP_CREATE_UPDATE, (message: GroupUpdateMessage) => { - const position = message.getPosition(); - if (position === undefined) { - throw new Error('Missing position in GROUP_CREATE_UPDATE'); - } - - const groupCreateUpdateMessage: GroupCreatedUpdatedMessageInterface = { - groupId: message.getGroupid(), - position: position.toObject() - } - - //console.log('Group position: ', position.toObject()); - callback(groupCreateUpdateMessage); + callback(this.toGroupCreatedUpdatedMessage(message)); }); } + private toGroupCreatedUpdatedMessage(message: GroupUpdateMessage): GroupCreatedUpdatedMessageInterface { + const position = message.getPosition(); + if (position === undefined) { + throw new Error('Missing position in GROUP_CREATE_UPDATE'); + } + + return { + groupId: message.getGroupid(), + position: position.toObject() + } + } + public onGroupDeleted(callback: (groupId: number) => void): void { this.onBatchMessage(EventMessage.GROUP_DELETE, (message: GroupDeleteMessage) => { callback(message.getGroupid()); }); } - public onConnectError(callback: (error: object) => void): void { - this.socket.on(EventMessage.CONNECT_ERROR, callback) + public onConnectError(callback: (error: Event) => void): void { + this.socket.addEventListener('error', callback) + } + + public onConnect(callback: (event: Event) => void): void { + this.socket.addEventListener('open', callback) } public sendWebrtcSignal(signal: unknown, receiverId: number) { - return this.socket.emit(EventMessage.WEBRTC_SIGNAL, { +/* return this.socket.emit(EventMessage.WEBRTC_SIGNAL, { receiverId: receiverId, signal: signal - } as WebRtcSignalSentMessageInterface); + } as WebRtcSignalSentMessageInterface);*/ } public sendWebrtcScreenSharingSignal(signal: unknown, receiverId: number) { - return this.socket.emit(EventMessage.WEBRTC_SCREEN_SHARING_SIGNAL, { +/* return this.socket.emit(EventMessage.WEBRTC_SCREEN_SHARING_SIGNAL, { receiverId: receiverId, signal: signal - } as WebRtcSignalSentMessageInterface); + } as WebRtcSignalSentMessageInterface);*/ } public receiveWebrtcStart(callback: (message: WebRtcStartMessageInterface) => void) { - this.socket.on(EventMessage.WEBRTC_START, callback); +// TODO + // this.socket.on(EventMessage.WEBRTC_START, callback); } public receiveWebrtcSignal(callback: (message: WebRtcSignalReceivedMessageInterface) => void) { - return this.socket.on(EventMessage.WEBRTC_SIGNAL, callback); +// TODO + // return this.socket.on(EventMessage.WEBRTC_SIGNAL, callback); } public receiveWebrtcScreenSharingSignal(callback: (message: WebRtcSignalReceivedMessageInterface) => void) { - return this.socket.on(EventMessage.WEBRTC_SCREEN_SHARING_SIGNAL, callback); +// TODO + // return this.socket.on(EventMessage.WEBRTC_SCREEN_SHARING_SIGNAL, callback); } - public onServerDisconnected(callback: (reason: string) => void): void { - this.socket.on('disconnect', (reason: string) => { - if (reason === 'io client disconnect') { - // The client asks for disconnect, let's not trigger any event. + public onServerDisconnected(callback: (event: CloseEvent) => void): void { + this.socket.addEventListener('close', (event) => { + + if (event.code === 1000) { + // Normal closure case return; } - callback(reason); + callback(event); }); } @@ -406,7 +483,8 @@ export class Connection implements Connection { } disconnectMessage(callback: (message: WebRtcDisconnectMessageInterface) => void): void { - this.socket.on(EventMessage.WEBRTC_DISCONNECT, callback); +// TODO + // this.socket.on(EventMessage.WEBRTC_DISCONNECT, callback); } emitActionableEvent(itemId: number, event: string, state: unknown, parameters: unknown): void { @@ -416,7 +494,10 @@ export class Connection implements Connection { itemEventMessage.setStatejson(JSON.stringify(state)); itemEventMessage.setParametersjson(JSON.stringify(parameters)); - this.socket.emit(EventMessage.ITEM_EVENT, itemEventMessage.serializeBinary().buffer); + const clientToServerMessage = new ClientToServerMessage(); + clientToServerMessage.setItemeventmessage(itemEventMessage); + + this.socket.send(clientToServerMessage.serializeBinary().buffer); } onActionableEvent(callback: (message: ItemEventMessageInterface) => void): void { diff --git a/messages/messages.proto b/messages/messages.proto index 57b1f2ea..6dd936fc 100644 --- a/messages/messages.proto +++ b/messages/messages.proto @@ -27,6 +27,10 @@ message ViewportMessage { int32 bottom = 4; } +message SilentMessage { + bool silent = 1; +} + /*********** CLIENT TO SERVER MESSAGES *************/ message SetPlayerDetailsMessage { @@ -34,11 +38,29 @@ message SetPlayerDetailsMessage { repeated string characterLayers = 2; } +message JoinRoomMessage { + string roomId = 1; + PositionMessage position = 2; + ViewportMessage viewport = 3; +} + message UserMovesMessage { PositionMessage position = 1; ViewportMessage viewport = 2; } +message ClientToServerMessage { + oneof message { + JoinRoomMessage joinRoomMessage = 1; + UserMovesMessage userMovesMessage = 2; + SilentMessage silentMessage = 3; + ViewportMessage viewportMessage = 4; + ItemEventMessage itemEventMessage = 5; + SetPlayerDetailsMessage setPlayerDetailsMessage = 6; + } +} + + /************ BI-DIRECTIONAL MESSAGES **************/ message ItemEventMessage { @@ -90,3 +112,44 @@ message UserJoinedMessage { message UserLeftMessage { int32 userId = 1; } + +message ErrorMessage { + string message = 1; +} + +message SetUserIdMessage { + int32 userId = 1; +} + +message ItemStateMessage { + int32 itemId = 1; + string stateJson = 2; +} + +message RoomJoinedMessage { + repeated UserJoinedMessage user = 1; + repeated GroupUpdateMessage group = 2; + repeated ItemStateMessage item = 3; +} + + +/*message WebRtcStartMessage { + int32 itemId = 1; + string event = 2; + string stateJson = 3; + string parametersJson = 4; +}*/ + + +message ServerToClientMessage { + oneof message { + BatchMessage batchMessage = 1; + ErrorMessage errorMessage = 2; + RoomJoinedMessage roomJoinedMessage = 3; + SetUserIdMessage setUserIdMessage = 4; // TODO: merge this with RoomJoinedMessage ? +// WebRtcStartMessage webRtcStartMessage = 3; +// WebRtcSignalMessage webRtcSignalMessage = 4; +// WebRtcScreenSharingSignalMessage webRtcScreenSharingSignalMessage = 5; +// WebRtcDisconnectMessage webRtcDisconnectMessage = 6; + } +} From 2cea0e490bc6cfaafe45062cb955f49145b158c1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20N=C3=A9grier?= Date: Tue, 29 Sep 2020 09:45:47 +0200 Subject: [PATCH 193/313] Fixing disconnect call --- back/src/Controller/IoSocketController.ts | 13 +++++++------ back/src/Controller/PrometheusController.ts | 9 +++++---- 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/back/src/Controller/IoSocketController.ts b/back/src/Controller/IoSocketController.ts index 1928679d..d9bdc950 100644 --- a/back/src/Controller/IoSocketController.ts +++ b/back/src/Controller/IoSocketController.ts @@ -66,13 +66,14 @@ enum SocketIoEvent { } function emitInBatch(socket: ExSocketInterface, payload: SubMessage): void { - if (socket.disconnecting) { - return; - } socket.batchedMessages.addPayload(payload); if (socket.batchTimeout === null) { socket.batchTimeout = setTimeout(() => { + if (socket.disconnecting) { + return; + } + const serverToClientMessage = new ServerToClientMessage(); serverToClientMessage.setBatchmessage(socket.batchedMessages); @@ -688,13 +689,13 @@ export class IoSocketController { // TODO: REBUILD THIS return; - if (socket.webRtcRoomId === roomId) { +/* if (socket.webRtcRoomId === roomId) { return; } socket.join(roomId); socket.webRtcRoomId = roomId; //if two persons in room share - if (this.Io.sockets.adapter.rooms[roomId].length < 2 /*|| this.Io.sockets.adapter.rooms[roomId].length >= 4*/) { + if (this.Io.sockets.adapter.rooms[roomId].length < 2) { return; } @@ -718,7 +719,7 @@ export class IoSocketController { }, []); client.emit(SocketIoEvent.WEBRTC_START, {clients: peerClients, roomId: roomId}); - }); + });*/ } /** permit to share user position diff --git a/back/src/Controller/PrometheusController.ts b/back/src/Controller/PrometheusController.ts index 0a0db2bb..95254af8 100644 --- a/back/src/Controller/PrometheusController.ts +++ b/back/src/Controller/PrometheusController.ts @@ -1,10 +1,11 @@ -import {Application, Request, Response} from "express"; +import {App} from "../Server/sifrr.server"; import {IoSocketController} from "_Controller/IoSocketController"; +import {HttpRequest, HttpResponse} from "uWebSockets.js"; const register = require('prom-client').register; const collectDefaultMetrics = require('prom-client').collectDefaultMetrics; export class PrometheusController { - constructor(private App: Application, private ioSocketController: IoSocketController) { + constructor(private App: App, private ioSocketController: IoSocketController) { collectDefaultMetrics({ timeout: 10000, gcDurationBuckets: [0.001, 0.01, 0.1, 1, 2, 5], // These are the default buckets. @@ -13,8 +14,8 @@ export class PrometheusController { this.App.get("/metrics", this.metrics.bind(this)); } - private metrics(req: Request, res: Response): void { - res.set('Content-Type', register.contentType); + private metrics(res: HttpResponse, req: HttpRequest): void { + res.writeHeader('Content-Type', register.contentType); res.end(register.metrics()); } } From a9b1313d39c9e6ff5acbcc2f5031847187c8ecf1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20N=C3=A9grier?= Date: Tue, 29 Sep 2020 10:57:14 +0200 Subject: [PATCH 194/313] Cleanup --- back/src/App.ts | 4 - back/src/Controller/AdminController.ts | 24 +-- back/src/Controller/AuthenticateController.ts | 2 - back/src/Controller/DebugController.ts | 15 +- back/src/Controller/IoSocketController.ts | 10 +- back/src/Server/server/baseapp.ts | 113 +---------- back/src/Server/server/cluster.ts | 48 ----- back/src/Server/server/formdata.ts | 99 ---------- back/src/Server/server/graphiql.html | 133 ------------- back/src/Server/server/graphql.ts | 138 -------------- back/src/Server/server/livereload.ts | 35 ---- back/src/Server/server/livereloadjs.js | 47 ----- back/src/Server/server/loadroutes.ts | 42 ----- back/src/Server/server/mime.ts | 176 ------------------ back/src/Server/server/sendfile.ts | 172 ----------------- back/src/Server/server/types.ts | 15 -- back/src/Server/server/utils.ts | 21 +-- back/src/Server/sifrr.server.ts | 13 +- 18 files changed, 32 insertions(+), 1075 deletions(-) delete mode 100644 back/src/Server/server/cluster.ts delete mode 100644 back/src/Server/server/formdata.ts delete mode 100644 back/src/Server/server/graphiql.html delete mode 100644 back/src/Server/server/graphql.ts delete mode 100644 back/src/Server/server/livereload.ts delete mode 100644 back/src/Server/server/livereloadjs.js delete mode 100644 back/src/Server/server/loadroutes.ts delete mode 100644 back/src/Server/server/mime.ts delete mode 100644 back/src/Server/server/sendfile.ts diff --git a/back/src/App.ts b/back/src/App.ts index c13b6fdc..5853f4d6 100644 --- a/back/src/App.ts +++ b/back/src/App.ts @@ -1,10 +1,6 @@ // lib/app.ts import {IoSocketController} from "./Controller/IoSocketController"; //TODO fix import by "_Controller/..." import {AuthenticateController} from "./Controller/AuthenticateController"; //TODO fix import by "_Controller/..." -import express from "express"; -import {Application, Request, Response} from 'express'; -import bodyParser = require('body-parser'); -import * as http from "http"; import {MapController} from "./Controller/MapController"; import {PrometheusController} from "./Controller/PrometheusController"; import {AdminController} from "./Controller/AdminController"; diff --git a/back/src/Controller/AdminController.ts b/back/src/Controller/AdminController.ts index c4905a8a..78280523 100644 --- a/back/src/Controller/AdminController.ts +++ b/back/src/Controller/AdminController.ts @@ -1,24 +1,26 @@ -import {Application, Request, Response} from "express"; import {OK} from "http-status-codes"; import {ADMIN_API_TOKEN, ADMIN_API_URL} from "../Enum/EnvironmentVariable"; import Axios from "axios"; +import {HttpRequest, HttpResponse} from "uWebSockets.js"; +import {parse} from "query-string"; +import {App} from "../Server/sifrr.server"; export class AdminController { - App : Application; - - constructor(App : Application) { - this.App = App; + constructor(private App : App) { this.getLoginUrlByToken(); } - + getLoginUrlByToken(){ - this.App.get("/register/:token", async (req: Request, res: Response) => { + this.App.get("/register/:token", async (res: HttpResponse, req: HttpRequest) => { if (!ADMIN_API_URL) { - return res.status(500).send('No admin backoffice set!'); + return res.writeStatus("500 Internal Server Error").end('No admin backoffice set!'); } - const token:string = req.params.token; - + + const query = parse(req.getQuery()); + + const token:string = query.token as string; + let response = null try { response = await Axios.get(ADMIN_API_URL+'/api/login-url/'+token, { headers: {"Authorization" : `${ADMIN_API_TOKEN}`} }) @@ -30,7 +32,7 @@ export class AdminController { const organizationSlug = response.data.organizationSlug; const worldSlug = response.data.worldSlug; const roomSlug = response.data.roomSlug; - return res.status(OK).send({organizationSlug, worldSlug, roomSlug}); + return res.writeStatus("200 OK").end(JSON.stringify({organizationSlug, worldSlug, roomSlug})); }); } } diff --git a/back/src/Controller/AuthenticateController.ts b/back/src/Controller/AuthenticateController.ts index a65255a2..b7fd093c 100644 --- a/back/src/Controller/AuthenticateController.ts +++ b/back/src/Controller/AuthenticateController.ts @@ -1,6 +1,4 @@ -import {Application, Request, Response} from "express"; import Jwt from "jsonwebtoken"; -import {BAD_REQUEST, OK} from "http-status-codes"; import {SECRET_KEY, URL_ROOM_STARTED} from "../Enum/EnvironmentVariable"; //TODO fix import by "_Enum/..." import { uuid } from 'uuidv4'; import {HttpRequest, HttpResponse, TemplatedApp} from "uWebSockets.js"; diff --git a/back/src/Controller/DebugController.ts b/back/src/Controller/DebugController.ts index 54544f6c..e77b28f3 100644 --- a/back/src/Controller/DebugController.ts +++ b/back/src/Controller/DebugController.ts @@ -1,22 +1,25 @@ -import {Application, Request, Response} from "express"; -import {OK} from "http-status-codes"; import {ADMIN_API_TOKEN} from "../Enum/EnvironmentVariable"; import {IoSocketController} from "_Controller/IoSocketController"; import {stringify} from "circular-json"; +import {HttpRequest, HttpResponse} from "uWebSockets.js"; +import { parse } from 'query-string'; +import {App} from "../Server/sifrr.server"; export class DebugController { - constructor(private App : Application, private ioSocketController: IoSocketController) { + constructor(private App : App, private ioSocketController: IoSocketController) { this.getDump(); } getDump(){ - this.App.get("/dump", (req: Request, res: Response) => { - if (req.query.token !== ADMIN_API_TOKEN) { + this.App.get("/dump", (res: HttpResponse, req: HttpRequest) => { + const query = parse(req.getQuery()); + + if (query.token !== ADMIN_API_TOKEN) { return res.status(401).send('Invalid token sent!'); } - return res.status(OK).contentType('application/json').send(stringify( + return res.writeStatus('200 OK').writeHeader('Content-Type', 'application/json').end(stringify( this.ioSocketController.getWorlds(), (key: unknown, value: unknown) => { if(value instanceof Map) { diff --git a/back/src/Controller/IoSocketController.ts b/back/src/Controller/IoSocketController.ts index d9bdc950..cd3d5e52 100644 --- a/back/src/Controller/IoSocketController.ts +++ b/back/src/Controller/IoSocketController.ts @@ -121,7 +121,7 @@ export class IoSocketController { * * @param token */ - searchClientByToken(token: string): ExSocketInterface | null { +/* searchClientByToken(token: string): ExSocketInterface | null { const clients: ExSocketInterface[] = Object.values(this.Io.sockets.sockets) as ExSocketInterface[]; for (let i = 0; i < clients.length; i++) { const client = clients[i]; @@ -131,7 +131,7 @@ export class IoSocketController { return client; } return null; - } + }*/ private authenticate(ws: WebSocket) { //console.log(socket.handshake.query.token); @@ -657,25 +657,23 @@ export class IoSocketController { //socket.emit(SocketIoEvent.GROUP_CREATE_UPDATE, groupUpdateMessage.serializeBinary().buffer); } - private emitDeleteGroupEvent(socket: Socket, groupId: number): void { + private emitDeleteGroupEvent(client: ExSocketInterface, groupId: number): void { const groupDeleteMessage = new GroupDeleteMessage(); groupDeleteMessage.setGroupid(groupId); const subMessage = new SubMessage(); subMessage.setGroupdeletemessage(groupDeleteMessage); - const client : ExSocketInterface = socket as ExSocketInterface; emitInBatch(client, subMessage); } - private emitUserLeftEvent(socket: Socket, userId: number): void { + private emitUserLeftEvent(client: ExSocketInterface, userId: number): void { const userLeftMessage = new UserLeftMessage(); userLeftMessage.setUserid(userId); const subMessage = new SubMessage(); subMessage.setUserleftmessage(userLeftMessage); - const client : ExSocketInterface = socket as ExSocketInterface; emitInBatch(client, subMessage); } diff --git a/back/src/Server/server/baseapp.ts b/back/src/Server/server/baseapp.ts index dbac5929..d723c33d 100644 --- a/back/src/Server/server/baseapp.ts +++ b/back/src/Server/server/baseapp.ts @@ -1,18 +1,9 @@ -import { readdirSync, statSync } from 'fs'; -import { join, relative } from 'path'; import { Readable } from 'stream'; import { us_listen_socket_close, TemplatedApp, HttpResponse, HttpRequest } from 'uWebSockets.js'; -//import { watch } from 'chokidar'; -import { wsConfig } from './livereload'; -import sendFile from './sendfile'; -import formData from './formdata'; -import loadroutes from './loadroutes'; -import { graphqlPost, graphqlWs } from './graphql'; import { stob } from './utils'; -import { SendFileOptions, Handler } from './types'; +import { Handler } from './types'; -const contTypes = ['application/x-www-form-urlencoded', 'multipart/form-data']; const noOp = () => true; const handleBody = (res: HttpResponse, req: HttpRequest) => { @@ -24,7 +15,7 @@ const handleBody = (res: HttpResponse, req: HttpRequest) => { this.onData((ab, isLast) => { // uint and then slicing is bit faster than slice and then uint - stream.push(new Uint8Array(ab.slice(ab.byteOffset, ab.byteLength))); + stream.push(new Uint8Array(ab.slice((ab as any).byteOffset, ab.byteLength))); if (isLast) { stream.push(null); } @@ -37,15 +28,10 @@ const handleBody = (res: HttpResponse, req: HttpRequest) => { if (contType.indexOf('application/json') > -1) res.json = async () => JSON.parse(await res.body()); - if (contTypes.map(t => contType.indexOf(t) > -1).indexOf(true) > -1) - res.formData = formData.bind(res, contType); }; class BaseApp { - _staticPaths = new Map(); - //_watched = new Map(); _sockets = new Map(); - __livereloadenabled = false; ws!: TemplatedApp['ws']; get!: TemplatedApp['get']; _post!: TemplatedApp['post']; @@ -53,84 +39,6 @@ class BaseApp { _patch!: TemplatedApp['patch']; _listen!: TemplatedApp['listen']; - file(pattern: string, filePath: string, options: SendFileOptions = {}) { - pattern=pattern.replace(/\\/g,'/'); - if (this._staticPaths.has(pattern)) { - if (options.failOnDuplicateRoute) - throw Error( - `Error serving '${filePath}' for '${pattern}', already serving '${ - this._staticPaths.get(pattern)[0] - }' file for this pattern.` - ); - else if (!options.overwriteRoute) return this; - } - - if (options.livereload && !this.__livereloadenabled) { - this.ws('/__sifrrLiveReload', wsConfig); - this.file('/livereload.js', join(__dirname, './livereloadjs.js')); - this.__livereloadenabled = true; - } - - this._staticPaths.set(pattern, [filePath, options]); - this.get(pattern, this._serveStatic); - return this; - } - - folder(prefix: string, folder: string, options: SendFileOptions, base: string = folder) { - // not a folder - if (!statSync(folder).isDirectory()) { - throw Error('Given path is not a directory: ' + folder); - } - - // ensure slash in beginning and no trailing slash for prefix - if (prefix[0] !== '/') prefix = '/' + prefix; - if (prefix[prefix.length - 1] === '/') prefix = prefix.slice(0, -1); - - // serve folder - const filter = options ? options.filter || noOp : noOp; - readdirSync(folder).forEach(file => { - // Absolute path - const filePath = join(folder, file); - // Return if filtered - if (!filter(filePath)) return; - - if (statSync(filePath).isDirectory()) { - // Recursive if directory - this.folder(prefix, filePath, options, base); - } else { - this.file(prefix + '/' + relative(base, filePath), filePath, options); - } - }); - - /*if (options && options.watch) { - if (!this._watched.has(folder)) { - const w = watch(folder); - - w.on('unlink', filePath => { - const url = '/' + relative(base, filePath); - this._staticPaths.delete(prefix + url); - }); - - w.on('add', filePath => { - const url = '/' + relative(base, filePath); - this.file(prefix + url, filePath, options); - }); - - this._watched.set(folder, w); - } - }*/ - return this; - } - - _serveStatic(res: HttpResponse, req: HttpRequest) { - res.onAborted(noOp); - const options = this._staticPaths.get(req.getUrl()); - if (typeof options === 'undefined') { - res.writeStatus('404 Not Found'); - res.end(); - } else sendFile(res, req, options[0], options[1]); - } - post(pattern: string, handler: Handler) { if (typeof handler !== 'function') throw Error(`handler should be a function, given ${typeof handler}.`); @@ -163,21 +71,6 @@ class BaseApp { return this; } - graphql(route: string, schema, graphqlOptions: any = {}, uwsOptions = {}, graphql) { - const handler = graphqlPost(schema, graphqlOptions, graphql); - this.post(route, handler); - this.ws(route, graphqlWs(schema, graphqlOptions, uwsOptions, graphql)); - // this.get(route, handler); - if (graphqlOptions && graphqlOptions.graphiqlPath) - this.file(graphqlOptions.graphiqlPath, join(__dirname, './graphiql.html')); - return this; - } - - load(dir: string, options) { - loadroutes.call(this, dir, options); - return this; - } - listen(h: string | number, p: Function | number = noOp, cb?: Function) { if (typeof p === 'number' && typeof h === 'string') { this._listen(h, p, socket => { @@ -202,8 +95,6 @@ class BaseApp { } close(port: null | number = null) { - //this._watched.forEach(v => v.close()); - //this._watched.clear(); if (port) { this._sockets.has(port) && us_listen_socket_close(this._sockets.get(port)); this._sockets.delete(port); diff --git a/back/src/Server/server/cluster.ts b/back/src/Server/server/cluster.ts deleted file mode 100644 index 5b875327..00000000 --- a/back/src/Server/server/cluster.ts +++ /dev/null @@ -1,48 +0,0 @@ -const noop = (a, b) => {}; - -export default class Cluster { - apps: any[]; - listens = {}; - // apps = [ { app: SifrrServerApp, port/ports: int } ] - constructor(apps) { - if (!Array.isArray(apps)) apps = [apps]; - this.apps = apps; - } - - listen(onListen = noop) { - for (let i = 0; i < this.apps.length; i++) { - const config = this.apps[i]; - let { app, port, ports } = config; - if (!Array.isArray(ports) || ports.length === 0) { - ports = [port]; - } - ports.forEach(p => { - if (typeof p !== 'number') throw Error(`Port should be a number, given ${p}`); - if (this.listens[p]) return; - - app.listen(p, socket => { - onListen.call(app, socket, p); - }); - this.listens[p] = app; - }); - } - return this; - } - - closeAll() { - Object.keys(this.listens).forEach(port => { - this.close(port); - }); - return this; - } - - close(port = null) { - if (port) { - this.listens[port] && this.listens[port].close(port); - delete this.listens[port]; - } else { - this.closeAll(); - } - return this; - } -} diff --git a/back/src/Server/server/formdata.ts b/back/src/Server/server/formdata.ts deleted file mode 100644 index 419e6c6b..00000000 --- a/back/src/Server/server/formdata.ts +++ /dev/null @@ -1,99 +0,0 @@ -import { createWriteStream } from 'fs'; -import { join, dirname } from 'path'; -import Busboy from 'busboy'; -import mkdirp from 'mkdirp'; - -function formData( - contType: string, - options: busboy.BusboyConfig & { - abortOnLimit?: boolean; - tmpDir?: string; - onFile?: ( - fieldname: string, - file: NodeJS.ReadableStream, - filename: string, - encoding: string, - mimetype: string - ) => string; - onField?: (fieldname: string, value: any) => void; - filename?: (oldName: string) => string; - } = {} -) { - options.headers = { - 'content-type': contType - }; - - return new Promise((resolve, reject) => { - const busb = new Busboy(options); - const ret = {}; - - this.bodyStream().pipe(busb); - - busb.on('limit', () => { - if (options.abortOnLimit) { - reject(Error('limit')); - } - }); - - busb.on('file', function(fieldname, file, filename, encoding, mimetype) { - const value = { - filename, - encoding, - mimetype, - filePath: undefined - }; - - if (typeof options.tmpDir === 'string') { - if (typeof options.filename === 'function') filename = options.filename(filename); - const fileToSave = join(options.tmpDir, filename); - mkdirp(dirname(fileToSave)); - - file.pipe(createWriteStream(fileToSave)); - value.filePath = fileToSave; - } - if (typeof options.onFile === 'function') { - value.filePath = - options.onFile(fieldname, file, filename, encoding, mimetype) || value.filePath; - } - - setRetValue(ret, fieldname, value); - }); - - busb.on('field', function(fieldname, value) { - if (typeof options.onField === 'function') options.onField(fieldname, value); - - setRetValue(ret, fieldname, value); - }); - - busb.on('finish', function() { - resolve(ret); - }); - - busb.on('error', reject); - }); -} - -function setRetValue( - ret: { [x: string]: any }, - fieldname: string, - value: { filename: string; encoding: string; mimetype: string; filePath?: string } | any -) { - if (fieldname.slice(-2) === '[]') { - fieldname = fieldname.slice(0, fieldname.length - 2); - if (Array.isArray(ret[fieldname])) { - ret[fieldname].push(value); - } else { - ret[fieldname] = [value]; - } - } else { - if (Array.isArray(ret[fieldname])) { - ret[fieldname].push(value); - } else if (ret[fieldname]) { - ret[fieldname] = [ret[fieldname], value]; - } else { - ret[fieldname] = value; - } - } -} - -export default formData; diff --git a/back/src/Server/server/graphiql.html b/back/src/Server/server/graphiql.html deleted file mode 100644 index 7ce03921..00000000 --- a/back/src/Server/server/graphiql.html +++ /dev/null @@ -1,133 +0,0 @@ - - - - - - - - - - - - - - - - -
    Loading...
    - - - diff --git a/back/src/Server/server/graphql.ts b/back/src/Server/server/graphql.ts deleted file mode 100644 index 63a2bdaa..00000000 --- a/back/src/Server/server/graphql.ts +++ /dev/null @@ -1,138 +0,0 @@ -import { parse } from 'query-string'; -import { createAsyncIterator, forAwaitEach, isAsyncIterable } from 'iterall'; -import { HttpResponse, HttpRequest } from 'uWebSockets.js'; -// client -> server -const GQL_START = 'start'; -const GQL_STOP = 'stop'; -// server -> client -const GQL_DATA = 'data'; -const GQL_QUERY = 'query'; - -async function getGraphqlParams(res: HttpResponse, req: HttpRequest) { - // query and variables - const queryParams = parse(req.getQuery()); - let { query, variables, operationName } = queryParams; - if (typeof variables === 'string') variables = JSON.parse(variables); - - // body - if (res && typeof res.json === 'function') { - const data = await res.json(); - query = data.query || query; - variables = data.variables || variables; - operationName = data.operationName || operationName; - } - return { - source: query, - variableValues: variables, - operationName - }; -} - -function graphqlPost(schema, graphqlOptions: any = {}, graphql: any = {}) { - const execute = graphql.graphql || require('graphql').graphql; - - return async (res: HttpResponse, req: HttpRequest) => { - res.onAborted(console.error); - - res.writeHeader('content-type', 'application/json'); - res.end( - JSON.stringify( - await execute({ - schema, - ...(await getGraphqlParams(res, req)), - ...graphqlOptions, - contextValue: { - res, - req, - ...(graphqlOptions && - (graphqlOptions.contextValue || - (graphqlOptions.contextFxn && (await graphqlOptions.contextFxn(res, req))))) - } - }) - ) - ); - }; -} - -function stopGqsSubscription(operations, reqOpId) { - if (!reqOpId) return; - operations[reqOpId] && operations[reqOpId].return && operations[reqOpId].return(); - delete operations[reqOpId]; -} - -function graphqlWs(schema, graphqlOptions: any = {}, uwsOptions: any = {}, graphql: any = {}) { - const subscribe = graphql.subscribe || require('graphql').subscribe; - const execute = graphql.graphql || require('graphql').graphql; - - return { - open: (ws, req) => { - ws.req = req; - ws.operations = {}; - ws.opId = 1; - }, - message: async (ws, message) => { - const { type, payload = {}, id: reqOpId } = JSON.parse(Buffer.from(message).toString('utf8')); - let opId; - if (reqOpId) { - opId = reqOpId; - } else { - opId = ws.opId++; - } - - const params = { - schema, - source: payload.query, - variableValues: payload.variables, - operationName: payload.operationName, - contextValue: { - ws, - ...(graphqlOptions && - (graphqlOptions.contextValue || - (graphqlOptions.contextFxn && (await graphqlOptions.contextFxn(ws))))) - }, - ...graphqlOptions - }; - - switch (type) { - case GQL_START: - stopGqsSubscription(ws.operations, opId); - - // eslint-disable-next-line no-case-declarations - let asyncIterable = await subscribe( - params.schema, - graphql.parse(params.source), - params.rootValue, - params.contextValue, - params.variableValues, - params.operationName - ); - asyncIterable = isAsyncIterable(asyncIterable) - ? asyncIterable - : createAsyncIterator([asyncIterable]); - - forAwaitEach(asyncIterable, result => - ws.send( - JSON.stringify({ - id: opId, - type: GQL_DATA, - payload: result - }) - ) - ); - break; - - case GQL_STOP: - stopGqsSubscription(ws.operations, reqOpId); - break; - - default: - ws.send(JSON.stringify({ payload: await execute(params), type: GQL_QUERY, id: opId })); - break; - } - }, - idleTimeout: 24 * 60 * 60, - ...uwsOptions - }; -} - -export { graphqlPost, graphqlWs }; diff --git a/back/src/Server/server/livereload.ts b/back/src/Server/server/livereload.ts deleted file mode 100644 index 787c871b..00000000 --- a/back/src/Server/server/livereload.ts +++ /dev/null @@ -1,35 +0,0 @@ -import { WebSocketBehavior, WebSocket } from 'uWebSockets.js'; - -const websockets = {}; -let id = 0; - -const wsConfig: WebSocketBehavior = { - open: (ws: WebSocket & { id: number }, req) => { - websockets[id] = { - dirty: false - }; - ws.id = id; - console.log('websocket connected: ', id); - id++; - }, - message: ws => { - ws.send(JSON.stringify(websockets[ws.id].dirty)); - websockets[ws.id].dirty = false; - }, - close: (ws, code, message) => { - delete websockets[ws.id]; - console.log( - `websocket disconnected with code ${code} and message ${message}:`, - ws.id, - websockets - ); - } -}; - -const sendSignal = (type: string, path: string) => { - console.log(type, 'signal for file: ', path); - for (let i in websockets) websockets[i].dirty = true; -}; - -export default { websockets, wsConfig, sendSignal }; -export { websockets, wsConfig, sendSignal }; diff --git a/back/src/Server/server/livereloadjs.js b/back/src/Server/server/livereloadjs.js deleted file mode 100644 index 04839578..00000000 --- a/back/src/Server/server/livereloadjs.js +++ /dev/null @@ -1,47 +0,0 @@ -const loc = window.location; -let path; -if (loc.protocol === 'https:') { - path = 'wss:'; -} else { - path = 'ws:'; -} -path += '//' + loc.host + '/__sifrrLiveReload'; - -let ws, - ttr = 500, - timeout; - -function newWsConnection() { - ws = new WebSocket(path); - ws.onopen = function() { - ttr = 500; - checkMessage(); - console.log('watching for file changes through sifrr-server livereload mode.'); - }; - ws.onmessage = function(event) { - if (JSON.parse(event.data)) { - console.log('Files changed, refreshing page.'); - location.reload(); - } - }; - ws.onerror = e => { - console.error('Webosocket error: ', e); - console.log('Retrying after ', ttr / 4, 'ms'); - ttr *= 4; - }; - ws.onclose = e => { - console.error(`Webosocket closed with code \${e.code} error \${e.message}`); - }; -} - -function checkMessage() { - if (!ws) return; - if (ws.readyState === WebSocket.OPEN) ws.send(''); - else if (ws.readyState === WebSocket.CLOSED) newWsConnection(); - - if (timeout) clearTimeout(timeout); - timeout = setTimeout(checkMessage, ttr); -} - -newWsConnection(); -setTimeout(checkMessage, ttr); diff --git a/back/src/Server/server/loadroutes.ts b/back/src/Server/server/loadroutes.ts deleted file mode 100644 index 3761d762..00000000 --- a/back/src/Server/server/loadroutes.ts +++ /dev/null @@ -1,42 +0,0 @@ -import { statSync, readdirSync } from 'fs'; -import { join, extname } from 'path'; - -function loadRoutes(dir, { filter = () => true, basePath = '' } = {}) { - let files; - const paths = []; - - if (statSync(dir).isDirectory()) { - files = readdirSync(dir) - .filter(filter) - .map(file => join(dir, file)); - } else { - files = [dir]; - } - - files.forEach(file => { - if (statSync(file).isDirectory()) { - // Recursive if directory - paths.push(...loadRoutes.call(this, file, { filter, basePath })); - } else if (extname(file) === '.js') { - const routes = require(file); - let basePaths = routes.basePath || ['']; - delete routes.basePath; - if (typeof basePaths === 'string') basePaths = [basePaths]; - - basePaths.forEach(basep => { - for (const method in routes) { - const methodRoutes = routes[method]; - for (let r in methodRoutes) { - if (!Array.isArray(methodRoutes[r])) methodRoutes[r] = [methodRoutes[r]]; - this[method](basePath + basep + r, ...methodRoutes[r]); - paths.push(basePath + basep + r); - } - } - }); - } - }); - - return paths; -} - -export default loadRoutes; diff --git a/back/src/Server/server/mime.ts b/back/src/Server/server/mime.ts deleted file mode 100644 index 396073cc..00000000 --- a/back/src/Server/server/mime.ts +++ /dev/null @@ -1,176 +0,0 @@ -const mimes = { - '3gp': 'video/3gpp', - a: 'application/octet-stream', - ai: 'application/postscript', - aif: 'audio/x-aiff', - aiff: 'audio/x-aiff', - asc: 'application/pgp-signature', - asf: 'video/x-ms-asf', - asm: 'text/x-asm', - asx: 'video/x-ms-asf', - atom: 'application/atom+xml', - au: 'audio/basic', - avi: 'video/x-msvideo', - bat: 'application/x-msdownload', - bin: 'application/octet-stream', - bmp: 'image/bmp', - bz2: 'application/x-bzip2', - c: 'text/x-c', - cab: 'application/vnd.ms-cab-compressed', - cc: 'text/x-c', - chm: 'application/vnd.ms-htmlhelp', - class: 'application/octet-stream', - com: 'application/x-msdownload', - conf: 'text/plain', - cpp: 'text/x-c', - crt: 'application/x-x509-ca-cert', - css: 'text/css', - csv: 'text/csv', - cxx: 'text/x-c', - deb: 'application/x-debian-package', - der: 'application/x-x509-ca-cert', - diff: 'text/x-diff', - djv: 'image/vnd.djvu', - djvu: 'image/vnd.djvu', - dll: 'application/x-msdownload', - dmg: 'application/octet-stream', - doc: 'application/msword', - dot: 'application/msword', - dtd: 'application/xml-dtd', - dvi: 'application/x-dvi', - ear: 'application/java-archive', - eml: 'message/rfc822', - eps: 'application/postscript', - exe: 'application/x-msdownload', - f: 'text/x-fortran', - f77: 'text/x-fortran', - f90: 'text/x-fortran', - flv: 'video/x-flv', - for: 'text/x-fortran', - gem: 'application/octet-stream', - gemspec: 'text/x-script.ruby', - gif: 'image/gif', - gz: 'application/x-gzip', - h: 'text/x-c', - hh: 'text/x-c', - htm: 'text/html', - html: 'text/html', - ico: 'image/vnd.microsoft.icon', - ics: 'text/calendar', - ifb: 'text/calendar', - iso: 'application/octet-stream', - jar: 'application/java-archive', - java: 'text/x-java-source', - jnlp: 'application/x-java-jnlp-file', - jpeg: 'image/jpeg', - jpg: 'image/jpeg', - js: 'application/javascript', - json: 'application/json', - log: 'text/plain', - m3u: 'audio/x-mpegurl', - m4v: 'video/mp4', - man: 'text/troff', - mathml: 'application/mathml+xml', - mbox: 'application/mbox', - mdoc: 'text/troff', - me: 'text/troff', - mid: 'audio/midi', - midi: 'audio/midi', - mime: 'message/rfc822', - mjs: 'application/javascript', - mml: 'application/mathml+xml', - mng: 'video/x-mng', - mov: 'video/quicktime', - mp3: 'audio/mpeg', - mp4: 'video/mp4', - mp4v: 'video/mp4', - mpeg: 'video/mpeg', - mpg: 'video/mpeg', - ms: 'text/troff', - msi: 'application/x-msdownload', - odp: 'application/vnd.oasis.opendocument.presentation', - ods: 'application/vnd.oasis.opendocument.spreadsheet', - odt: 'application/vnd.oasis.opendocument.text', - ogg: 'application/ogg', - p: 'text/x-pascal', - pas: 'text/x-pascal', - pbm: 'image/x-portable-bitmap', - pdf: 'application/pdf', - pem: 'application/x-x509-ca-cert', - pgm: 'image/x-portable-graymap', - pgp: 'application/pgp-encrypted', - pkg: 'application/octet-stream', - pl: 'text/x-script.perl', - pm: 'text/x-script.perl-module', - png: 'image/png', - pnm: 'image/x-portable-anymap', - ppm: 'image/x-portable-pixmap', - pps: 'application/vnd.ms-powerpoint', - ppt: 'application/vnd.ms-powerpoint', - ps: 'application/postscript', - psd: 'image/vnd.adobe.photoshop', - py: 'text/x-script.python', - qt: 'video/quicktime', - ra: 'audio/x-pn-realaudio', - rake: 'text/x-script.ruby', - ram: 'audio/x-pn-realaudio', - rar: 'application/x-rar-compressed', - rb: 'text/x-script.ruby', - rdf: 'application/rdf+xml', - roff: 'text/troff', - rpm: 'application/x-redhat-package-manager', - rss: 'application/rss+xml', - rtf: 'application/rtf', - ru: 'text/x-script.ruby', - s: 'text/x-asm', - sgm: 'text/sgml', - sgml: 'text/sgml', - sh: 'application/x-sh', - sig: 'application/pgp-signature', - snd: 'audio/basic', - so: 'application/octet-stream', - svg: 'image/svg+xml', - svgz: 'image/svg+xml', - swf: 'application/x-shockwave-flash', - t: 'text/troff', - tar: 'application/x-tar', - tbz: 'application/x-bzip-compressed-tar', - tcl: 'application/x-tcl', - tex: 'application/x-tex', - texi: 'application/x-texinfo', - texinfo: 'application/x-texinfo', - text: 'text/plain', - tif: 'image/tiff', - tiff: 'image/tiff', - torrent: 'application/x-bittorrent', - tr: 'text/troff', - txt: 'text/plain', - vcf: 'text/x-vcard', - vcs: 'text/x-vcalendar', - vrml: 'model/vrml', - war: 'application/java-archive', - wav: 'audio/x-wav', - wma: 'audio/x-ms-wma', - wmv: 'video/x-ms-wmv', - wmx: 'video/x-ms-wmx', - wrl: 'model/vrml', - wsdl: 'application/wsdl+xml', - xbm: 'image/x-xbitmap', - xhtml: 'application/xhtml+xml', - xls: 'application/vnd.ms-excel', - xml: 'application/xml', - xpm: 'image/x-xpixmap', - xsl: 'application/xml', - xslt: 'application/xslt+xml', - yaml: 'text/yaml', - yml: 'text/yaml', - zip: 'application/zip', - default: 'text/html' -}; - -const getMime = (path: string): string => { - const i = path.lastIndexOf('.'); - return mimes[path.substr(i + 1).toLowerCase()] || mimes['default']; -}; - -export { getMime, mimes }; diff --git a/back/src/Server/server/sendfile.ts b/back/src/Server/server/sendfile.ts deleted file mode 100644 index 8310c4a7..00000000 --- a/back/src/Server/server/sendfile.ts +++ /dev/null @@ -1,172 +0,0 @@ -import { watch, statSync, createReadStream } from 'fs'; -import { createBrotliCompress, createGzip, createDeflate } from 'zlib'; -const watchedPaths = new Set(); - -const compressions = { - br: createBrotliCompress, - gzip: createGzip, - deflate: createDeflate -}; -import { writeHeaders } from './utils'; -import { getMime } from './mime'; -const bytes = 'bytes='; -import { stob } from './utils'; -import { sendSignal } from './livereload'; -import { SendFileOptions } from './types'; -import { HttpResponse, HttpRequest } from 'uWebSockets.js'; - -function sendFile(res: HttpResponse, req: HttpRequest, path: string, options: SendFileOptions) { - if (options && options.livereload && !watchedPaths.has(path)) { - watchedPaths.add(path); - watch(path, sendSignal); - } - - sendFileToRes( - res, - { - 'if-modified-since': req.getHeader('if-modified-since'), - range: req.getHeader('range'), - 'accept-encoding': req.getHeader('accept-encoding') - }, - path, - options - ); -} - -function sendFileToRes( - res: HttpResponse, - reqHeaders: { [name: string]: string }, - path: string, - { - lastModified = true, - headers = {}, - compress = false, - compressionOptions = { - priority: ['gzip', 'br', 'deflate'] - }, - cache = false - }: { cache: any } & any = {} -) { - let { mtime, size } = statSync(path); - mtime.setMilliseconds(0); - const mtimeutc = mtime.toUTCString(); - - headers = Object.assign({}, headers); - // handling last modified - if (lastModified) { - // Return 304 if last-modified - if (reqHeaders['if-modified-since']) { - if (new Date(reqHeaders['if-modified-since']) >= mtime) { - res.writeStatus('304 Not Modified'); - return res.end(); - } - } - headers['last-modified'] = mtimeutc; - } - headers['content-type'] = getMime(path); - - // write data - let start = 0, - end = size - 1; - - if (reqHeaders.range) { - compress = false; - const parts = reqHeaders.range.replace(bytes, '').split('-'); - start = parseInt(parts[0], 10); - end = parts[1] ? parseInt(parts[1], 10) : end; - headers['accept-ranges'] = 'bytes'; - headers['content-range'] = `bytes ${start}-${end}/${size}`; - size = end - start + 1; - res.writeStatus('206 Partial Content'); - } - - // for size = 0 - if (end < 0) end = 0; - - let readStream = createReadStream(path, { start, end }); - // Compression; - let compressed: boolean | string = false; - if (compress) { - const l = compressionOptions.priority.length; - for (let i = 0; i < l; i++) { - const type = compressionOptions.priority[i]; - if (reqHeaders['accept-encoding'].indexOf(type) > -1) { - compressed = type; - const compressor = compressions[type](compressionOptions); - readStream.pipe(compressor); - readStream = compressor; - headers['content-encoding'] = compressionOptions.priority[i]; - break; - } - } - } - - res.onAborted(() => readStream.destroy()); - writeHeaders(res, headers); - // check cache - if (cache) { - return cache.wrap( - `${path}_${mtimeutc}_${start}_${end}_${compressed}`, - cb => { - stob(readStream) - .then(b => cb(null, b)) - .catch(cb); - }, - { ttl: 0 }, - (err, buffer) => { - if (err) { - res.writeStatus('500 Internal server error'); - res.end(); - throw err; - } - res.end(buffer); - } - ); - } else if (compressed) { - readStream.on('data', buffer => { - res.write(buffer.buffer.slice(buffer.byteOffset, buffer.byteOffset + buffer.byteLength)); - }); - } else { - readStream.on('data', buffer => { - const chunk = buffer.buffer.slice(buffer.byteOffset, buffer.byteOffset + buffer.byteLength), - lastOffset = res.getWriteOffset(); - - // First try - const [ok, done] = res.tryEnd(chunk, size); - - if (done) { - readStream.destroy(); - } else if (!ok) { - // pause because backpressure - readStream.pause(); - - // Save unsent chunk for later - res.ab = chunk; - res.abOffset = lastOffset; - - // Register async handlers for drainage - res.onWritable(offset => { - const [ok, done] = res.tryEnd(res.ab.slice(offset - res.abOffset), size); - if (done) { - readStream.destroy(); - } else if (ok) { - readStream.resume(); - } - return ok; - }); - } - }); - } - readStream - .on('error', e => { - res.writeStatus('500 Internal server error'); - res.end(); - readStream.destroy(); - throw e; - }) - .on('end', () => { - res.end(); - }); -} - -export default sendFile; diff --git a/back/src/Server/server/types.ts b/back/src/Server/server/types.ts index 09916b5f..3d0f48c7 100644 --- a/back/src/Server/server/types.ts +++ b/back/src/Server/server/types.ts @@ -6,21 +6,6 @@ export type UwsApp = { prototype: TemplatedApp; }; -export type SendFileOptions = { - failOnDuplicateRoute?: boolean; - overwriteRoute?: boolean; - watch?: boolean; - filter?: (path: string) => boolean; - livereload?: boolean; - lastModified?: boolean; - headers?: { [name: string]: string }; - compress?: boolean; - compressionOptions?: { - priority?: 'gzip' | 'br' | 'deflate'; - }; - cache?: boolean; -}; - export type Handler = (res: HttpResponse, req: HttpRequest) => void; export {}; diff --git a/back/src/Server/server/utils.ts b/back/src/Server/server/utils.ts index 8f6db886..f7f3e4b5 100644 --- a/back/src/Server/server/utils.ts +++ b/back/src/Server/server/utils.ts @@ -1,21 +1,6 @@ -import { HttpResponse } from 'uWebSockets.js'; import { ReadStream } from 'fs'; -function writeHeaders( - res: HttpResponse, - headers: { [name: string]: string } | string, - other?: string -) { - if (typeof headers === 'string') { - res.writeHeader(headers, other.toString()); - } else { - for (const n in headers) { - res.writeHeader(n, headers[n].toString()); - } - } -} - -function extend(who: object, from: object, overwrite = true) { +function extend(who: any, from: any, overwrite = true) { const ownProps = Object.getOwnPropertyNames(Object.getPrototypeOf(from)).concat( Object.keys(from) ); @@ -31,7 +16,7 @@ function extend(who: object, from: object, overwrite = true) { function stob(stream: ReadStream): Promise { return new Promise(resolve => { - const buffers = []; + const buffers: Buffer[] = []; stream.on('data', buffers.push.bind(buffers)); stream.on('end', () => { @@ -49,4 +34,4 @@ function stob(stream: ReadStream): Promise { }); } -export { writeHeaders, extend, stob }; +export { extend, stob }; diff --git a/back/src/Server/sifrr.server.ts b/back/src/Server/sifrr.server.ts index 9a274378..47fba02c 100644 --- a/back/src/Server/sifrr.server.ts +++ b/back/src/Server/sifrr.server.ts @@ -2,29 +2,18 @@ import { parse } from 'query-string'; import { HttpRequest } from 'uWebSockets.js'; import App from './server/app'; import SSLApp from './server/sslapp'; -import { mimes, getMime } from './server/mime'; -import { writeHeaders } from './server/utils'; -import sendFile from './server/sendfile'; -import Cluster from './server/cluster'; -import livereload from './server/livereload'; import * as types from './server/types'; const getQuery = (req: HttpRequest) => { return parse(req.getQuery()); }; -export { App, SSLApp, mimes, getMime, writeHeaders, sendFile, Cluster, livereload, getQuery }; +export { App, SSLApp, getQuery }; export * from './server/types'; export default { App, SSLApp, - mimes, - getMime, - writeHeaders, - sendFile, - Cluster, - livereload, getQuery, ...types }; From b485c9bf4642bc1d6472425406fcf78ec7a2401f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20N=C3=A9grier?= Date: Tue, 29 Sep 2020 16:01:22 +0200 Subject: [PATCH 195/313] Switching WebRTC to protobuf + uws --- back/src/Controller/IoSocketController.ts | 182 ++++++++++++++-------- back/src/Model/Group.ts | 4 +- back/src/Model/User.ts | 4 +- back/src/Model/World.ts | 8 +- front/src/Connection.ts | 133 +++++++++++----- front/src/WebRtc/SimplePeer.ts | 18 ++- messages/messages.proto | 33 ++-- 7 files changed, 253 insertions(+), 129 deletions(-) diff --git a/back/src/Controller/IoSocketController.ts b/back/src/Controller/IoSocketController.ts index cd3d5e52..fb1f0680 100644 --- a/back/src/Controller/IoSocketController.ts +++ b/back/src/Controller/IoSocketController.ts @@ -37,7 +37,12 @@ import { ErrorMessage, RoomJoinedMessage, ItemStateMessage, - ServerToClientMessage, SetUserIdMessage, SilentMessage + ServerToClientMessage, + SetUserIdMessage, + SilentMessage, + WebRtcSignalToClientMessage, + WebRtcSignalToServerMessage, + WebRtcStartMessage, WebRtcDisconnectMessage } from "../Messages/generated/messages_pb"; import {UserMovesMessage} from "../Messages/generated/messages_pb"; import Direction = PositionMessage.Direction; @@ -186,7 +191,7 @@ export class IoSocketController { /* Options */ //compression: uWS.SHARED_COMPRESSOR, maxPayloadLength: 16 * 1024 * 1024, - idleTimeout: 10, + //idleTimeout: 10, /* Handlers */ open: (ws) => { this.authenticate(ws); @@ -222,6 +227,10 @@ export class IoSocketController { this.handleSilentMessage(client, message.getSilentmessage() as SilentMessage); } else if (message.hasItemeventmessage()) { this.handleItemEvent(client, message.getItemeventmessage() as ItemEventMessage); + } else if (message.hasWebrtcsignaltoservermessage()) { + this.emitVideo(client, message.getWebrtcsignaltoservermessage() as WebRtcSignalToServerMessage) + } else if (message.hasWebrtcscreensharingsignaltoservermessage()) { + this.emitScreenSharing(client, message.getWebrtcscreensharingsignaltoservermessage() as WebRtcSignalToServerMessage) } /* Ok is false if backpressure was built up, wait for drain */ @@ -282,7 +291,7 @@ export class IoSocketController { serverToClientMessage.setErrormessage(errorMessage); if (!Client.disconnecting) { - Client.send(serverToClientMessage.serializeBinary().buffer); + Client.send(serverToClientMessage.serializeBinary().buffer, true); } console.warn(message); } @@ -496,40 +505,44 @@ export class IoSocketController { } } - emitVideo(socket: ExSocketInterface, data: unknown){ - if (!isWebRtcSignalMessageInterface(data)) { - socket.emit(SocketIoEvent.MESSAGE_ERROR, {message: 'Invalid WEBRTC_SIGNAL message.'}); - console.warn('Invalid WEBRTC_SIGNAL message received: ', data); - return; - } + emitVideo(socket: ExSocketInterface, data: WebRtcSignalToServerMessage): void { //send only at user - const client = this.sockets.get(data.receiverId); + const client = this.sockets.get(data.getReceiverid()); if (client === undefined) { - console.warn("While exchanging a WebRTC signal: client with id ", data.receiverId, " does not exist. This might be a race condition."); + console.warn("While exchanging a WebRTC signal: client with id ", data.getReceiverid(), " does not exist. This might be a race condition."); return; } - return client.emit(SocketIoEvent.WEBRTC_SIGNAL, { - userId: socket.userId, - signal: data.signal - }); + + const webrtcSignalToClient = new WebRtcSignalToClientMessage(); + webrtcSignalToClient.setUserid(socket.userId); + webrtcSignalToClient.setSignal(data.getSignal()); + + const serverToClientMessage = new ServerToClientMessage(); + serverToClientMessage.setWebrtcsignaltoclientmessage(webrtcSignalToClient); + + if (!client.disconnecting) { + client.send(serverToClientMessage.serializeBinary().buffer, true); + } } - emitScreenSharing(socket: ExSocketInterface, data: unknown){ - if (!isWebRtcSignalMessageInterface(data)) { - socket.emit(SocketIoEvent.MESSAGE_ERROR, {message: 'Invalid WEBRTC_SCREEN_SHARING message.'}); - console.warn('Invalid WEBRTC_SCREEN_SHARING message received: ', data); - return; - } + emitScreenSharing(socket: ExSocketInterface, data: WebRtcSignalToServerMessage): void { //send only at user - const client = this.sockets.get(data.receiverId); + const client = this.sockets.get(data.getReceiverid()); if (client === undefined) { - console.warn("While exchanging a WEBRTC_SCREEN_SHARING signal: client with id ", data.receiverId, " does not exist. This might be a race condition."); + console.warn("While exchanging a WEBRTC_SCREEN_SHARING signal: client with id ", data.getReceiverid(), " does not exist. This might be a race condition."); return; } - return client.emit(SocketIoEvent.WEBRTC_SCREEN_SHARING_SIGNAL, { - userId: socket.userId, - signal: data.signal - }); + + const webrtcSignalToClient = new WebRtcSignalToClientMessage(); + webrtcSignalToClient.setUserid(socket.userId); + webrtcSignalToClient.setSignal(data.getSignal()); + + const serverToClientMessage = new ServerToClientMessage(); + serverToClientMessage.setWebrtcscreensharingsignaltoclientmessage(webrtcSignalToClient); + + if (!client.disconnecting) { + client.send(serverToClientMessage.serializeBinary().buffer, true); + } } searchClientByIdOrFail(userId: number): ExSocketInterface { @@ -571,9 +584,9 @@ export class IoSocketController { //check and create new world for a room let world = this.Worlds.get(roomId) if(world === undefined){ - world = new World((user1: number, group: Group) => { - this.connectedUser(user1, group); - }, (user1: number, group: Group) => { + world = new World((user1: User, group: Group) => { + this.joinWebRtcRoom(user1, group); + }, (user1: User, group: Group) => { this.disConnectedUser(user1, group); }, MINIMUM_DISTANCE, GROUP_RADIUS, (thing: Movable, listener: User) => { const clientListener = this.searchClientByIdOrFail(listener.id); @@ -677,20 +690,49 @@ export class IoSocketController { emitInBatch(client, subMessage); } - /** - * - * @param socket - * @param roomId - */ - joinWebRtcRoom(socket: ExSocketInterface, roomId: string) { - - // TODO: REBUILD THIS - return; - -/* if (socket.webRtcRoomId === roomId) { + joinWebRtcRoom(user: User, group: Group) { + /*const roomId: string = "webrtcroom"+group.getId(); + if (user.socket.webRtcRoomId === roomId) { return; + }*/ + + // TODO: joinWebRtcRoom will be trigerred twice when joining the first time! Maybe we should fix the GROUP constructor to trigger only one event +console.log('joinWebRtcRoom FOR '+user.socket.name+" "+user.socket.userId); + for (const otherUser of group.getUsers()) { + if (user === otherUser) { + continue; + } + + // Let's send 2 messages: one to the user joining the group and one to the other user + const webrtcStartMessage1 = new WebRtcStartMessage(); + webrtcStartMessage1.setUserid(otherUser.id); + webrtcStartMessage1.setName(otherUser.socket.name); + webrtcStartMessage1.setInitiator(true); + + const serverToClientMessage1 = new ServerToClientMessage(); + serverToClientMessage1.setWebrtcstartmessage(webrtcStartMessage1); + + if (!user.socket.disconnecting) { + user.socket.send(serverToClientMessage1.serializeBinary().buffer, true); + console.log('Sending webrtcstart initiator to '+user.socket.userId) + } + + const webrtcStartMessage2 = new WebRtcStartMessage(); + webrtcStartMessage2.setUserid(user.id); + webrtcStartMessage2.setName(user.socket.name); + webrtcStartMessage2.setInitiator(false); + + const serverToClientMessage2 = new ServerToClientMessage(); + serverToClientMessage2.setWebrtcstartmessage(webrtcStartMessage2); + + if (!otherUser.socket.disconnecting) { + otherUser.socket.send(serverToClientMessage2.serializeBinary().buffer, true); + console.log('Sending webrtcstart to '+otherUser.socket.userId) + } + } - socket.join(roomId); + +/* socket.join(roomId); socket.webRtcRoomId = roomId; //if two persons in room share if (this.Io.sockets.adapter.rooms[roomId].length < 2) { @@ -737,43 +779,49 @@ export class IoSocketController { ] **/ - //connected user - connectedUser(userId: number, group: Group) { - /*let Client = this.sockets.get(userId); - if (Client === undefined) { - return; - }*/ - const Client = this.searchClientByIdOrFail(userId); - this.joinWebRtcRoom(Client, "webrtcroom"+group.getId()); - } - //disconnect user - disConnectedUser(userId: number, group: Group) { - // TODO: rebuild this - return; + disConnectedUser(user: User, group: Group) { - const Client = this.searchClientByIdOrFail(userId); - Client.to("webrtcroom"+group.getId()).emit(SocketIoEvent.WEBRTC_DISCONNECT, { - userId: userId - }); + const Client = user.socket; // Most of the time, sending a disconnect event to one of the players is enough (the player will close the connection // which will be shut for the other player). // However! In the rare case where the WebRTC connection is not yet established, if we close the connection on one of the player, // the other player will try connecting until a timeout happens (during this time, the connection icon will be displayed for nothing). // So we also send the disconnect event to the other player. - for (const user of group.getUsers()) { - Client.emit(SocketIoEvent.WEBRTC_DISCONNECT, { - userId: user.id - }); + for (const otherUser of group.getUsers()) { + if (user === otherUser) { + continue; + } + + const webrtcDisconnectMessage1 = new WebRtcDisconnectMessage(); + webrtcDisconnectMessage1.setUserid(user.id); + + const serverToClientMessage1 = new ServerToClientMessage(); + serverToClientMessage1.setWebrtcdisconnectmessage(webrtcDisconnectMessage1); + + if (!otherUser.socket.disconnecting) { + otherUser.socket.send(serverToClientMessage1.serializeBinary().buffer, true); + } + + + const webrtcDisconnectMessage2 = new WebRtcDisconnectMessage(); + webrtcDisconnectMessage2.setUserid(otherUser.id); + + const serverToClientMessage2 = new ServerToClientMessage(); + serverToClientMessage2.setWebrtcdisconnectmessage(webrtcDisconnectMessage2); + + if (!user.socket.disconnecting) { + user.socket.send(serverToClientMessage2.serializeBinary().buffer, true); + } } //disconnect webrtc room - if(!Client.webRtcRoomId){ + /*if(!Client.webRtcRoomId){ return; - } - Client.leave(Client.webRtcRoomId); - delete Client.webRtcRoomId; + }*/ + //Client.leave(Client.webRtcRoomId); + //delete Client.webRtcRoomId; } public getWorlds(): Map { diff --git a/back/src/Model/Group.ts b/back/src/Model/Group.ts index f2e5feb1..16dd6cd5 100644 --- a/back/src/Model/Group.ts +++ b/back/src/Model/Group.ts @@ -87,7 +87,7 @@ export class Group implements Movable { join(user: User): void { // Broadcast on the right event - this.connectCallback(user.id, this); + this.connectCallback(user, this); this.users.add(user); user.group = this; } @@ -105,7 +105,7 @@ export class Group implements Movable { } // Broadcast on the right event - this.disconnectCallback(user.id, this); + this.disconnectCallback(user, this); } /** diff --git a/back/src/Model/User.ts b/back/src/Model/User.ts index 2396c4d8..34377dc4 100644 --- a/back/src/Model/User.ts +++ b/back/src/Model/User.ts @@ -4,6 +4,7 @@ import {Zone} from "_Model/Zone"; import {Movable} from "_Model/Movable"; import {PositionInterface} from "_Model/PositionInterface"; import {PositionNotifier} from "_Model/PositionNotifier"; +import {ExSocketInterface} from "_Model/Websocket/ExSocketInterface"; export class User implements Movable { public listenedZones: Set; @@ -13,7 +14,8 @@ export class User implements Movable { public id: number, private position: PointInterface, public silent: boolean, - private positionNotifier: PositionNotifier + private positionNotifier: PositionNotifier, + public readonly socket: ExSocketInterface ) { this.listenedZones = new Set(); diff --git a/back/src/Model/World.ts b/back/src/Model/World.ts index 8e645c74..c276d04e 100644 --- a/back/src/Model/World.ts +++ b/back/src/Model/World.ts @@ -11,8 +11,8 @@ import {PositionNotifier} from "./PositionNotifier"; import {ViewportInterface} from "_Model/Websocket/ViewportMessage"; import {Movable} from "_Model/Movable"; -export type ConnectCallback = (user: number, group: Group) => void; -export type DisconnectCallback = (user: number, group: Group) => void; +export type ConnectCallback = (user: User, group: Group) => void; +export type DisconnectCallback = (user: User, group: Group) => void; export class World { private readonly minDistance: number; @@ -55,8 +55,8 @@ export class World { return this.users; } - public join(socket : Identificable, userPosition: PointInterface): void { - const user = new User(socket.userId, userPosition, false, this.positionNotifier); + public join(socket : ExSocketInterface, userPosition: PointInterface): void { + const user = new User(socket.userId, userPosition, false, this.positionNotifier, socket); this.users.set(socket.userId, user); // Let's call update position to trigger the join / leave room //this.updatePosition(socket, userPosition); diff --git a/front/src/Connection.ts b/front/src/Connection.ts index d7036ba8..6da46c2d 100644 --- a/front/src/Connection.ts +++ b/front/src/Connection.ts @@ -2,11 +2,27 @@ import Axios from "axios"; import {API_URL} from "./Enum/EnvironmentVariable"; import {MessageUI} from "./Logger/MessageUI"; import { - BatchMessage, ClientToServerMessage, GroupDeleteMessage, GroupUpdateMessage, ItemEventMessage, JoinRoomMessage, - PositionMessage, RoomJoinedMessage, ServerToClientMessage, - SetPlayerDetailsMessage, SetUserIdMessage, SilentMessage, UserJoinedMessage, UserLeftMessage, UserMovedMessage, + BatchMessage, + ClientToServerMessage, + GroupDeleteMessage, + GroupUpdateMessage, + ItemEventMessage, + JoinRoomMessage, + PositionMessage, + RoomJoinedMessage, + ServerToClientMessage, + SetPlayerDetailsMessage, + SetUserIdMessage, + SilentMessage, + UserJoinedMessage, + UserLeftMessage, + UserMovedMessage, UserMovesMessage, - ViewportMessage + ViewportMessage, + WebRtcDisconnectMessage, + WebRtcSignalToClientMessage, + WebRtcSignalToServerMessage, + WebRtcStartMessage } from "./Messages/generated/messages_pb" import {PlayerAnimationNames} from "./Phaser/Player/Animation"; @@ -132,7 +148,7 @@ export interface RoomJoinedMessageInterface { export class Connection implements Connection { private readonly socket: WebSocket; private userId: number|null = null; - private batchCallbacks: Map = new Map(); + private listeners: Map = new Map(); private static websocketFactory: null|((url: string)=>any) = null; public static setWebsocketFactory(websocketFactory: (url: string)=>any): void { @@ -185,13 +201,7 @@ export class Connection implements Connection { throw new Error('Unexpected batch message type'); } - const listeners = this.batchCallbacks.get(event); - if (listeners === undefined) { - continue; - } - for (const listener of listeners) { - listener(payload); - } + this.dispatch(event, payload); } } else if (message.hasRoomjoinedmessage()) { const roomJoinedMessage = message.getRoomjoinedmessage() as RoomJoinedMessage; @@ -212,11 +222,32 @@ export class Connection implements Connection { this.userId = (message.getSetuseridmessage() as SetUserIdMessage).getUserid(); } else if (message.hasErrormessage()) { console.error(EventMessage.MESSAGE_ERROR, message.getErrormessage()?.getMessage); + } else if (message.hasWebrtcsignaltoclientmessage()) { + this.dispatch(EventMessage.WEBRTC_SIGNAL, message.getWebrtcsignaltoclientmessage()); + } else if (message.hasWebrtcscreensharingsignaltoclientmessage()) { + this.dispatch(EventMessage.WEBRTC_SCREEN_SHARING_SIGNAL, message.getWebrtcscreensharingsignaltoclientmessage()); + } else if (message.hasWebrtcstartmessage()) { + console.log('Received WebRtcStartMessage'); + this.dispatch(EventMessage.WEBRTC_START, message.getWebrtcstartmessage()); + } else if (message.hasWebrtcdisconnectmessage()) { + this.dispatch(EventMessage.WEBRTC_DISCONNECT, message.getWebrtcdisconnectmessage()); + } else { + throw new Error('Unknown message received'); } } } + private dispatch(event: string, payload: unknown): void { + const listeners = this.listeners.get(event); + if (listeners === undefined) { + return; + } + for (const listener of listeners) { + listener(payload); + } + } + public static createConnection(name: string, characterLayersSelected: string[]): Promise { return Axios.post(`${API_URL}/login`, {name: name}) .then((res) => { @@ -363,7 +394,7 @@ export class Connection implements Connection { } public onUserJoins(callback: (message: MessageUserJoined) => void): void { - this.onBatchMessage(EventMessage.JOIN_ROOM, (message: UserJoinedMessage) => { + this.onMessage(EventMessage.JOIN_ROOM, (message: UserJoinedMessage) => { callback(this.toMessageUserJoined(message)); }); } @@ -383,30 +414,30 @@ export class Connection implements Connection { } public onUserMoved(callback: (message: UserMovedMessage) => void): void { - this.onBatchMessage(EventMessage.USER_MOVED, callback); + this.onMessage(EventMessage.USER_MOVED, callback); //this.socket.on(EventMessage.USER_MOVED, callback); } /** * Registers a listener on a message that is part of a batch */ - private onBatchMessage(eventName: string, callback: Function): void { - let callbacks = this.batchCallbacks.get(eventName); + private onMessage(eventName: string, callback: Function): void { + let callbacks = this.listeners.get(eventName); if (callbacks === undefined) { callbacks = new Array(); - this.batchCallbacks.set(eventName, callbacks); + this.listeners.set(eventName, callbacks); } callbacks.push(callback); } public onUserLeft(callback: (userId: number) => void): void { - this.onBatchMessage(EventMessage.USER_LEFT, (message: UserLeftMessage) => { + this.onMessage(EventMessage.USER_LEFT, (message: UserLeftMessage) => { callback(message.getUserid()); }); } public onGroupUpdatedOrCreated(callback: (groupCreateUpdateMessage: GroupCreatedUpdatedMessageInterface) => void): void { - this.onBatchMessage(EventMessage.GROUP_CREATE_UPDATE, (message: GroupUpdateMessage) => { + this.onMessage(EventMessage.GROUP_CREATE_UPDATE, (message: GroupUpdateMessage) => { callback(this.toGroupCreatedUpdatedMessage(message)); }); } @@ -424,7 +455,7 @@ export class Connection implements Connection { } public onGroupDeleted(callback: (groupId: number) => void): void { - this.onBatchMessage(EventMessage.GROUP_DELETE, (message: GroupDeleteMessage) => { + this.onMessage(EventMessage.GROUP_DELETE, (message: GroupDeleteMessage) => { callback(message.getGroupid()); }); } @@ -438,37 +469,58 @@ export class Connection implements Connection { } public sendWebrtcSignal(signal: unknown, receiverId: number) { -/* return this.socket.emit(EventMessage.WEBRTC_SIGNAL, { - receiverId: receiverId, - signal: signal - } as WebRtcSignalSentMessageInterface);*/ + const webRtcSignal = new WebRtcSignalToServerMessage(); + webRtcSignal.setReceiverid(receiverId); + webRtcSignal.setSignal(JSON.stringify(signal)); + + const clientToServerMessage = new ClientToServerMessage(); + clientToServerMessage.setWebrtcsignaltoservermessage(webRtcSignal); + + this.socket.send(clientToServerMessage.serializeBinary().buffer); } public sendWebrtcScreenSharingSignal(signal: unknown, receiverId: number) { -/* return this.socket.emit(EventMessage.WEBRTC_SCREEN_SHARING_SIGNAL, { - receiverId: receiverId, - signal: signal - } as WebRtcSignalSentMessageInterface);*/ + const webRtcSignal = new WebRtcSignalToServerMessage(); + webRtcSignal.setReceiverid(receiverId); + webRtcSignal.setSignal(JSON.stringify(signal)); + + const clientToServerMessage = new ClientToServerMessage(); + clientToServerMessage.setWebrtcscreensharingsignaltoservermessage(webRtcSignal); + + this.socket.send(clientToServerMessage.serializeBinary().buffer); } - public receiveWebrtcStart(callback: (message: WebRtcStartMessageInterface) => void) { -// TODO - // this.socket.on(EventMessage.WEBRTC_START, callback); + public receiveWebrtcStart(callback: (message: UserSimplePeerInterface) => void) { + this.onMessage(EventMessage.WEBRTC_START, (message: WebRtcStartMessage) => { + callback({ + userId: message.getUserid(), + name: message.getName(), + initiator: message.getInitiator() + }); + }); } public receiveWebrtcSignal(callback: (message: WebRtcSignalReceivedMessageInterface) => void) { -// TODO - // return this.socket.on(EventMessage.WEBRTC_SIGNAL, callback); + this.onMessage(EventMessage.WEBRTC_SIGNAL, (message: WebRtcSignalToClientMessage) => { + callback({ + userId: message.getUserid(), + signal: JSON.parse(message.getSignal()) + }); + }); } public receiveWebrtcScreenSharingSignal(callback: (message: WebRtcSignalReceivedMessageInterface) => void) { -// TODO - // return this.socket.on(EventMessage.WEBRTC_SCREEN_SHARING_SIGNAL, callback); + this.onMessage(EventMessage.WEBRTC_SCREEN_SHARING_SIGNAL, (message: WebRtcSignalToClientMessage) => { + callback({ + userId: message.getUserid(), + signal: JSON.parse(message.getSignal()) + }); + }); } public onServerDisconnected(callback: (event: CloseEvent) => void): void { this.socket.addEventListener('close', (event) => { - + console.log('Socket closed with code '+event.code+". Reason: "+event.reason); if (event.code === 1000) { // Normal closure case return; @@ -483,8 +535,11 @@ export class Connection implements Connection { } disconnectMessage(callback: (message: WebRtcDisconnectMessageInterface) => void): void { -// TODO - // this.socket.on(EventMessage.WEBRTC_DISCONNECT, callback); + this.onMessage(EventMessage.WEBRTC_DISCONNECT, (message: WebRtcDisconnectMessage) => { + callback({ + userId: message.getUserid() + }); + }); } emitActionableEvent(itemId: number, event: string, state: unknown, parameters: unknown): void { @@ -501,7 +556,7 @@ export class Connection implements Connection { } onActionableEvent(callback: (message: ItemEventMessageInterface) => void): void { - this.onBatchMessage(EventMessage.ITEM_EVENT, (message: ItemEventMessage) => { + this.onMessage(EventMessage.ITEM_EVENT, (message: ItemEventMessage) => { callback({ itemId: message.getItemid(), event: message.getEvent(), diff --git a/front/src/WebRtc/SimplePeer.ts b/front/src/WebRtc/SimplePeer.ts index ac603756..c32e4305 100644 --- a/front/src/WebRtc/SimplePeer.ts +++ b/front/src/WebRtc/SimplePeer.ts @@ -82,7 +82,7 @@ export class SimplePeer { mediaManager.getCamera().then(() => { //receive message start - this.Connection.receiveWebrtcStart((message: WebRtcStartMessageInterface) => { + this.Connection.receiveWebrtcStart((message: UserSimplePeerInterface) => { this.receiveWebrtcStart(message); }); @@ -95,17 +95,22 @@ export class SimplePeer { }); } - private receiveWebrtcStart(data: WebRtcStartMessageInterface) { - this.WebRtcRoomId = data.roomId; - this.Users = data.clients; + private receiveWebrtcStart(user: UserSimplePeerInterface) { + //this.WebRtcRoomId = data.roomId; + this.Users.push(user); // Note: the clients array contain the list of all clients (even the ones we are already connected to in case a user joints a group) // So we can receive a request we already had before. (which will abort at the first line of createPeerConnection) - // TODO: refactor this to only send a message to connect to one user (rather than several users). + // TODO: refactor this to only send a message to connect to one user (rather than several users). => DONE // This would be symmetrical to the way we handle disconnection. //console.log('Start message', data); //start connection - this.startWebRtc(); + //this.startWebRtc(); + console.log('receiveWebrtcStart. Initiator: ', user.initiator) + if(!user.initiator){ + return; + } + this.createPeerConnection(user); } /** @@ -129,6 +134,7 @@ export class SimplePeer { if( this.PeerConnectionArray.has(user.userId) ){ + console.log('Peer connection already exists to user '+user.userId) return null; } diff --git a/messages/messages.proto b/messages/messages.proto index 6dd936fc..1cbaae40 100644 --- a/messages/messages.proto +++ b/messages/messages.proto @@ -49,6 +49,11 @@ message UserMovesMessage { ViewportMessage viewport = 2; } +message WebRtcSignalToServerMessage { + int32 receiverId = 1; + string signal = 2; +} + message ClientToServerMessage { oneof message { JoinRoomMessage joinRoomMessage = 1; @@ -57,6 +62,8 @@ message ClientToServerMessage { ViewportMessage viewportMessage = 4; ItemEventMessage itemEventMessage = 5; SetPlayerDetailsMessage setPlayerDetailsMessage = 6; + WebRtcSignalToServerMessage webRtcSignalToServerMessage = 7; + WebRtcSignalToServerMessage webRtcScreenSharingSignalToServerMessage = 8; } } @@ -132,14 +139,20 @@ message RoomJoinedMessage { repeated ItemStateMessage item = 3; } +message WebRtcStartMessage { + int32 userId = 1; + string name = 2; + bool initiator = 3; +} -/*message WebRtcStartMessage { - int32 itemId = 1; - string event = 2; - string stateJson = 3; - string parametersJson = 4; -}*/ +message WebRtcDisconnectMessage { + int32 userId = 1; +} +message WebRtcSignalToClientMessage { + int32 userId = 1; + string signal = 2; +} message ServerToClientMessage { oneof message { @@ -147,9 +160,9 @@ message ServerToClientMessage { ErrorMessage errorMessage = 2; RoomJoinedMessage roomJoinedMessage = 3; SetUserIdMessage setUserIdMessage = 4; // TODO: merge this with RoomJoinedMessage ? -// WebRtcStartMessage webRtcStartMessage = 3; -// WebRtcSignalMessage webRtcSignalMessage = 4; -// WebRtcScreenSharingSignalMessage webRtcScreenSharingSignalMessage = 5; -// WebRtcDisconnectMessage webRtcDisconnectMessage = 6; + WebRtcStartMessage webRtcStartMessage = 5; + WebRtcSignalToClientMessage webRtcSignalToClientMessage = 6; + WebRtcSignalToClientMessage webRtcScreenSharingSignalToClientMessage = 7; + WebRtcDisconnectMessage webRtcDisconnectMessage = 8; } } From 432b4a0e85f41c587c6c00d69849ce8e87c17949 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20N=C3=A9grier?= Date: Tue, 29 Sep 2020 16:12:17 +0200 Subject: [PATCH 196/313] Linting app --- back/src/Controller/AdminController.ts | 36 ++++++++++--------- back/src/Controller/AuthenticateController.ts | 28 ++++++++------- back/src/Server/server/app.ts | 2 +- back/src/Server/server/baseapp.ts | 6 ++-- back/src/Server/server/sslapp.ts | 2 +- back/src/Server/server/utils.ts | 2 +- front/src/Connection.ts | 12 +++---- 7 files changed, 46 insertions(+), 42 deletions(-) diff --git a/back/src/Controller/AdminController.ts b/back/src/Controller/AdminController.ts index 78280523..7bb536ca 100644 --- a/back/src/Controller/AdminController.ts +++ b/back/src/Controller/AdminController.ts @@ -12,27 +12,29 @@ export class AdminController { getLoginUrlByToken(){ - this.App.get("/register/:token", async (res: HttpResponse, req: HttpRequest) => { - if (!ADMIN_API_URL) { - return res.writeStatus("500 Internal Server Error").end('No admin backoffice set!'); - } + this.App.get("/register/:token", (res: HttpResponse, req: HttpRequest) => { + (async () => { + if (!ADMIN_API_URL) { + return res.writeStatus("500 Internal Server Error").end('No admin backoffice set!'); + } - const query = parse(req.getQuery()); + const query = parse(req.getQuery()); - const token:string = query.token as string; + const token:string = query.token as string; - let response = null - try { - response = await Axios.get(ADMIN_API_URL+'/api/login-url/'+token, { headers: {"Authorization" : `${ADMIN_API_TOKEN}`} }) - } catch (e) { - console.log(e.message) - return res.status(e.status || 500).send('An error happened'); - } + let response = null + try { + response = await Axios.get(ADMIN_API_URL+'/api/login-url/'+token, { headers: {"Authorization" : `${ADMIN_API_TOKEN}`} }) + } catch (e) { + console.log(e.message) + return res.status(e.status || 500).send('An error happened'); + } - const organizationSlug = response.data.organizationSlug; - const worldSlug = response.data.worldSlug; - const roomSlug = response.data.roomSlug; - return res.writeStatus("200 OK").end(JSON.stringify({organizationSlug, worldSlug, roomSlug})); + const organizationSlug = response.data.organizationSlug; + const worldSlug = response.data.worldSlug; + const roomSlug = response.data.roomSlug; + res.writeStatus("200 OK").end(JSON.stringify({organizationSlug, worldSlug, roomSlug})); + })(); }); } } diff --git a/back/src/Controller/AuthenticateController.ts b/back/src/Controller/AuthenticateController.ts index b7fd093c..6585054d 100644 --- a/back/src/Controller/AuthenticateController.ts +++ b/back/src/Controller/AuthenticateController.ts @@ -39,20 +39,22 @@ export class AuthenticateController extends BaseController { res.end(); }); - this.App.post("/login", async (res: HttpResponse, req: HttpRequest) => { - this.addCorsHeaders(res); + this.App.post("/login", (res: HttpResponse, req: HttpRequest) => { + (async () => { + this.addCorsHeaders(res); - res.onAborted(() => { - console.warn('Login request was aborted'); - }) - const param = await res.json(); - const userUuid = uuid(); - const token = Jwt.sign({name: param.name, userUuid: userUuid} as TokenInterface, SECRET_KEY, {expiresIn: '24h'}); - res.writeStatus("200 OK").end(JSON.stringify({ - token: token, - mapUrlStart: URL_ROOM_STARTED, - userId: userUuid, - })); + res.onAborted(() => { + console.warn('Login request was aborted'); + }) + const param = await res.json(); + const userUuid = uuid(); + const token = Jwt.sign({name: param.name, userUuid: userUuid} as TokenInterface, SECRET_KEY, {expiresIn: '24h'}); + res.writeStatus("200 OK").end(JSON.stringify({ + token: token, + mapUrlStart: URL_ROOM_STARTED, + userId: userUuid, + })); + })(); }); } } diff --git a/back/src/Server/server/app.ts b/back/src/Server/server/app.ts index 800353c2..3b98a9b3 100644 --- a/back/src/Server/server/app.ts +++ b/back/src/Server/server/app.ts @@ -5,7 +5,7 @@ import { UwsApp } from './types'; class App extends (_App) { constructor(options: AppOptions = {}) { - super(options); + super(options); // eslint-disable-line constructor-super extend(this, new BaseApp()); } } diff --git a/back/src/Server/server/baseapp.ts b/back/src/Server/server/baseapp.ts index d723c33d..0c07c17e 100644 --- a/back/src/Server/server/baseapp.ts +++ b/back/src/Server/server/baseapp.ts @@ -11,11 +11,11 @@ const handleBody = (res: HttpResponse, req: HttpRequest) => { res.bodyStream = function() { const stream = new Readable(); - stream._read = noOp; + stream._read = noOp; // eslint-disable-line @typescript-eslint/unbound-method this.onData((ab, isLast) => { // uint and then slicing is bit faster than slice and then uint - stream.push(new Uint8Array(ab.slice((ab as any).byteOffset, ab.byteLength))); + stream.push(new Uint8Array(ab.slice((ab as any).byteOffset, ab.byteLength))); // eslint-disable-line @typescript-eslint/no-explicit-any if (isLast) { stream.push(null); } @@ -26,7 +26,7 @@ const handleBody = (res: HttpResponse, req: HttpRequest) => { res.body = () => stob(res.bodyStream()); - if (contType.indexOf('application/json') > -1) + if (contType.includes('application/json')) res.json = async () => JSON.parse(await res.body()); }; diff --git a/back/src/Server/server/sslapp.ts b/back/src/Server/server/sslapp.ts index 60b17aa4..46ae89a5 100644 --- a/back/src/Server/server/sslapp.ts +++ b/back/src/Server/server/sslapp.ts @@ -5,7 +5,7 @@ import { UwsApp } from './types'; class SSLApp extends (_SSLApp) { constructor(options: AppOptions) { - super(options); + super(options); // eslint-disable-line constructor-super extend(this, new BaseApp()); } } diff --git a/back/src/Server/server/utils.ts b/back/src/Server/server/utils.ts index f7f3e4b5..80ea3938 100644 --- a/back/src/Server/server/utils.ts +++ b/back/src/Server/server/utils.ts @@ -1,6 +1,6 @@ import { ReadStream } from 'fs'; -function extend(who: any, from: any, overwrite = true) { +function extend(who: any, from: any, overwrite = true) { // eslint-disable-line @typescript-eslint/no-explicit-any const ownProps = Object.getOwnPropertyNames(Object.getPrototypeOf(from)).concat( Object.keys(from) ); diff --git a/front/src/Connection.ts b/front/src/Connection.ts index 6da46c2d..e0c3121d 100644 --- a/front/src/Connection.ts +++ b/front/src/Connection.ts @@ -149,9 +149,9 @@ export class Connection implements Connection { private readonly socket: WebSocket; private userId: number|null = null; private listeners: Map = new Map(); - private static websocketFactory: null|((url: string)=>any) = null; + private static websocketFactory: null|((url: string)=>any) = null; // eslint-disable-line @typescript-eslint/no-explicit-any - public static setWebsocketFactory(websocketFactory: (url: string)=>any): void { + public static setWebsocketFactory(websocketFactory: (url: string)=>any): void { // eslint-disable-line @typescript-eslint/no-explicit-any Connection.websocketFactory = websocketFactory; } @@ -206,9 +206,9 @@ export class Connection implements Connection { } else if (message.hasRoomjoinedmessage()) { const roomJoinedMessage = message.getRoomjoinedmessage() as RoomJoinedMessage; - const users: Array = roomJoinedMessage.getUserList().map(this.toMessageUserJoined); - const groups: Array = roomJoinedMessage.getGroupList().map(this.toGroupCreatedUpdatedMessage); - let items: { [itemId: number] : unknown } = {}; + const users: Array = roomJoinedMessage.getUserList().map(this.toMessageUserJoined.bind(this)); + const groups: Array = roomJoinedMessage.getGroupList().map(this.toGroupCreatedUpdatedMessage.bind(this)); + const items: { [itemId: number] : unknown } = {}; for (const item of roomJoinedMessage.getItemList()) { items[item.getItemid()] = JSON.parse(item.getStatejson()); } @@ -221,7 +221,7 @@ export class Connection implements Connection { } else if (message.hasSetuseridmessage()) { this.userId = (message.getSetuseridmessage() as SetUserIdMessage).getUserid(); } else if (message.hasErrormessage()) { - console.error(EventMessage.MESSAGE_ERROR, message.getErrormessage()?.getMessage); + console.error(EventMessage.MESSAGE_ERROR, message.getErrormessage()?.getMessage()); } else if (message.hasWebrtcsignaltoclientmessage()) { this.dispatch(EventMessage.WEBRTC_SIGNAL, message.getWebrtcsignaltoclientmessage()); } else if (message.hasWebrtcscreensharingsignaltoclientmessage()) { From a37557dd4b0864f0f82fd21c97cccb7d856d8028 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20N=C3=A9grier?= Date: Tue, 29 Sep 2020 16:27:41 +0200 Subject: [PATCH 197/313] Fixing tests --- back/tests/PositionNotifierTest.ts | 9 ++++---- back/tests/WorldTest.ts | 34 ++++++++++++++++++------------ 2 files changed, 26 insertions(+), 17 deletions(-) diff --git a/back/tests/PositionNotifierTest.ts b/back/tests/PositionNotifierTest.ts index e65d025d..253283af 100644 --- a/back/tests/PositionNotifierTest.ts +++ b/back/tests/PositionNotifierTest.ts @@ -8,6 +8,7 @@ import {PointInterface} from "../src/Model/Websocket/PointInterface"; import {Zone} from "_Model/Zone"; import {Movable} from "_Model/Movable"; import {PositionInterface} from "_Model/PositionInterface"; +import {ExSocketInterface} from "_Model/Websocket/ExSocketInterface"; describe("PositionNotifier", () => { @@ -29,14 +30,14 @@ describe("PositionNotifier", () => { y: 500, moving: false, direction: 'down' - }, false, positionNotifier); + }, false, positionNotifier, {} as ExSocketInterface); const user2 = new User(2, { x: -9999, y: -9999, moving: false, direction: 'down' - }, false, positionNotifier); + }, false, positionNotifier, {} as ExSocketInterface); positionNotifier.setViewport(user1, { left: 200, @@ -107,14 +108,14 @@ describe("PositionNotifier", () => { y: 500, moving: false, direction: 'down' - }, false, positionNotifier); + }, false, positionNotifier, {} as ExSocketInterface); const user2 = new User(2, { x: 0, y: 0, moving: false, direction: 'down' - }, false, positionNotifier); + }, false, positionNotifier, {} as ExSocketInterface); let newUsers = positionNotifier.setViewport(user1, { left: 200, diff --git a/back/tests/WorldTest.ts b/back/tests/WorldTest.ts index 9afef228..8d3b1a2d 100644 --- a/back/tests/WorldTest.ts +++ b/back/tests/WorldTest.ts @@ -2,22 +2,30 @@ import "jasmine"; import {World, ConnectCallback, DisconnectCallback } from "../src/Model/World"; import {Point} from "../src/Model/Websocket/MessageUserPosition"; import { Group } from "../src/Model/Group"; +import {ExSocketInterface} from "_Model/Websocket/ExSocketInterface"; +import {User} from "_Model/User"; + +function createMockUser(userId: number): ExSocketInterface { + return { + userId + } as ExSocketInterface; +} describe("World", () => { it("should connect user1 and user2", () => { let connectCalledNumber: number = 0; - const connect: ConnectCallback = (user: number, group: Group): void => { + const connect: ConnectCallback = (user: User, group: Group): void => { connectCalledNumber++; } - const disconnect: DisconnectCallback = (user: number, group: Group): void => { + const disconnect: DisconnectCallback = (user: User, group: Group): void => { } const world = new World(connect, disconnect, 160, 160, () => {}, () => {}, () => {}); - world.join({ userId: 1 }, new Point(100, 100)); + world.join(createMockUser(1), new Point(100, 100)); - world.join({ userId: 2 }, new Point(500, 100)); + world.join(createMockUser(2), new Point(500, 100)); world.updatePosition({ userId: 2 }, new Point(261, 100)); @@ -33,24 +41,24 @@ describe("World", () => { it("should connect 3 users", () => { let connectCalled: boolean = false; - const connect: ConnectCallback = (user: number, group: Group): void => { + const connect: ConnectCallback = (user: User, group: Group): void => { connectCalled = true; } - const disconnect: DisconnectCallback = (user: number, group: Group): void => { + const disconnect: DisconnectCallback = (user: User, group: Group): void => { } const world = new World(connect, disconnect, 160, 160, () => {}, () => {}, () => {}); - world.join({ userId: 1 }, new Point(100, 100)); + world.join(createMockUser(1), new Point(100, 100)); - world.join({ userId: 2 }, new Point(200, 100)); + world.join(createMockUser(2), new Point(200, 100)); expect(connectCalled).toBe(true); connectCalled = false; // baz joins at the outer limit of the group - world.join({ userId: 3 }, new Point(311, 100)); + world.join(createMockUser(3), new Point(311, 100)); expect(connectCalled).toBe(false); @@ -62,18 +70,18 @@ describe("World", () => { it("should disconnect user1 and user2", () => { let connectCalled: boolean = false; let disconnectCallNumber: number = 0; - const connect: ConnectCallback = (user: number, group: Group): void => { + const connect: ConnectCallback = (user: User, group: Group): void => { connectCalled = true; } - const disconnect: DisconnectCallback = (user: number, group: Group): void => { + const disconnect: DisconnectCallback = (user: User, group: Group): void => { disconnectCallNumber++; } const world = new World(connect, disconnect, 160, 160, () => {}, () => {}, () => {}); - world.join({ userId: 1 }, new Point(100, 100)); + world.join(createMockUser(1), new Point(100, 100)); - world.join({ userId: 2 }, new Point(259, 100)); + world.join(createMockUser(2), new Point(259, 100)); expect(connectCalled).toBe(true); expect(disconnectCallNumber).toBe(0); From 53c6c2bc30d7c896a64553ce2c807e95cbe93804 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20N=C3=A9grier?= Date: Tue, 29 Sep 2020 17:24:16 +0200 Subject: [PATCH 198/313] Fixing benchmark --- back/src/Controller/IoSocketController.ts | 18 ++++++------------ back/src/Model/Websocket/ExSocketInterface.ts | 1 - benchmark/index.ts | 9 +++++++-- front/src/Connexion/RoomConnection.ts | 4 ++-- 4 files changed, 15 insertions(+), 17 deletions(-) diff --git a/back/src/Controller/IoSocketController.ts b/back/src/Controller/IoSocketController.ts index dc116616..c8753371 100644 --- a/back/src/Controller/IoSocketController.ts +++ b/back/src/Controller/IoSocketController.ts @@ -244,14 +244,10 @@ export class IoSocketController { //leave room this.leaveRoom(Client); - //leave webrtc room - //socket.leave(Client.webRtcRoomId); - //delete all socket information - delete Client.webRtcRoomId; - delete Client.roomId; + /*delete Client.roomId; delete Client.token; - delete Client.position; + delete Client.position;*/ } catch (e) { console.error('An error occurred on "disconnect"'); console.error(e); @@ -308,7 +304,7 @@ export class IoSocketController { } //leave previous room - this.leaveRoom(Client); + //this.leaveRoom(Client); // Useless now, there is only one room per connection //join new previous room const world = this.joinRoom(Client, roomId, ProtobufUtils.toPointInterface(message.getPosition() as PositionMessage)); @@ -567,7 +563,7 @@ export class IoSocketController { //Client.leave(Client.roomId); } finally { this.nbClientsPerRoomGauge.dec({ room: Client.roomId }); - delete Client.roomId; + //delete Client.roomId; } } } @@ -694,8 +690,6 @@ export class IoSocketController { return; }*/ - // TODO: joinWebRtcRoom will be trigerred twice when joining the first time! Maybe we should fix the GROUP constructor to trigger only one event -console.log('joinWebRtcRoom FOR '+user.socket.name+" "+user.socket.userId); for (const otherUser of group.getUsers()) { if (user === otherUser) { continue; @@ -712,7 +706,7 @@ console.log('joinWebRtcRoom FOR '+user.socket.name+" "+user.socket.userId); if (!user.socket.disconnecting) { user.socket.send(serverToClientMessage1.serializeBinary().buffer, true); - console.log('Sending webrtcstart initiator to '+user.socket.userId) + //console.log('Sending webrtcstart initiator to '+user.socket.userId) } const webrtcStartMessage2 = new WebRtcStartMessage(); @@ -725,7 +719,7 @@ console.log('joinWebRtcRoom FOR '+user.socket.name+" "+user.socket.userId); if (!otherUser.socket.disconnecting) { otherUser.socket.send(serverToClientMessage2.serializeBinary().buffer, true); - console.log('Sending webrtcstart to '+otherUser.socket.userId) + //console.log('Sending webrtcstart to '+otherUser.socket.userId) } } diff --git a/back/src/Model/Websocket/ExSocketInterface.ts b/back/src/Model/Websocket/ExSocketInterface.ts index 46c4b787..00aeadb7 100644 --- a/back/src/Model/Websocket/ExSocketInterface.ts +++ b/back/src/Model/Websocket/ExSocketInterface.ts @@ -7,7 +7,6 @@ import {WebSocket} from "uWebSockets.js" export interface ExSocketInterface extends WebSocket, Identificable { token: string; roomId: string; - webRtcRoomId: string|undefined; userId: number; // A temporary (autoincremented) identifier for this user userUuid: string; // A unique identifier for this user name: string; diff --git a/benchmark/index.ts b/benchmark/index.ts index ebf58c6a..af209581 100644 --- a/benchmark/index.ts +++ b/benchmark/index.ts @@ -1,4 +1,5 @@ -import {RoomConnection} from "../front/src/Connexion/Connection"; +import {RoomConnection} from "../front/src/Connexion/RoomConnection"; +import {connectionManager} from "../front/src/Connexion/ConnectionManager"; import * as WebSocket from "ws" function sleep(ms) { @@ -10,7 +11,8 @@ RoomConnection.setWebsocketFactory((url: string) => { }); async function startOneUser(): Promise { - const connection = await RoomConnection.createConnection('foo', ['male3']); + const connection = await connectionManager.connectToRoomSocket(); + connection.emitPlayerDetailsMessage('foo', ['male3']); await connection.joinARoom('global__maps.workadventure.localhost/Floor0/floor0', 783, 170, 'down', false, { top: 0, @@ -43,6 +45,9 @@ async function startOneUser(): Promise { } (async () => { + + //await connectionManager.init(); + for (let userNo = 0; userNo < 40; userNo++) { startOneUser(); // Wait 0.5s between adding users diff --git a/front/src/Connexion/RoomConnection.ts b/front/src/Connexion/RoomConnection.ts index e64164b8..526ce54c 100644 --- a/front/src/Connexion/RoomConnection.ts +++ b/front/src/Connexion/RoomConnection.ts @@ -61,7 +61,7 @@ export class RoomConnection implements RoomConnection { this.socket.binaryType = 'arraybuffer'; this.socket.onopen = (ev) => { - console.log('WS connected'); + //console.log('WS connected'); }; this.socket.onmessage = (messageEvent) => { @@ -143,7 +143,7 @@ export class RoomConnection implements RoomConnection { public emitPlayerDetailsMessage(userName: string, characterLayersSelected: string[]) { const message = new SetPlayerDetailsMessage(); - message.setName(name); + message.setName(userName); message.setCharacterlayersList(characterLayersSelected); const clientToServerMessage = new ClientToServerMessage(); From e9b538e43c14d1ee7bf84afc9d55340e8fe88c58 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20N=C3=A9grier?= Date: Tue, 29 Sep 2020 17:30:38 +0200 Subject: [PATCH 199/313] Fixing import --- back/src/Controller/AuthenticateController.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/back/src/Controller/AuthenticateController.ts b/back/src/Controller/AuthenticateController.ts index b6381eea..d8d92cc1 100644 --- a/back/src/Controller/AuthenticateController.ts +++ b/back/src/Controller/AuthenticateController.ts @@ -1,6 +1,4 @@ import Jwt from "jsonwebtoken"; -import {SECRET_KEY, URL_ROOM_STARTED} from "../Enum/EnvironmentVariable"; //TODO fix import by "_Enum/..." -import {OK} from "http-status-codes"; import {ADMIN_API_TOKEN, ADMIN_API_URL, SECRET_KEY, URL_ROOM_STARTED} from "../Enum/EnvironmentVariable"; //TODO fix import by "_Enum/..." import { uuid } from 'uuidv4'; import {HttpRequest, HttpResponse, TemplatedApp} from "uWebSockets.js"; From 5de2f6123179739b637efa2ecfd6d37eac95e26c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20N=C3=A9grier?= Date: Wed, 30 Sep 2020 10:12:40 +0200 Subject: [PATCH 200/313] Adding back authentication to uws websocket --- back/src/Controller/AdminController.ts | 0 back/src/Controller/AuthenticateController.ts | 5 +- back/src/Controller/IoSocketController.ts | 134 +++++++++++++----- back/src/Model/Websocket/ExSocketInterface.ts | 1 - 4 files changed, 98 insertions(+), 42 deletions(-) delete mode 100644 back/src/Controller/AdminController.ts diff --git a/back/src/Controller/AdminController.ts b/back/src/Controller/AdminController.ts deleted file mode 100644 index e69de29b..00000000 diff --git a/back/src/Controller/AuthenticateController.ts b/back/src/Controller/AuthenticateController.ts index d8d92cc1..ce97eb0e 100644 --- a/back/src/Controller/AuthenticateController.ts +++ b/back/src/Controller/AuthenticateController.ts @@ -39,6 +39,7 @@ export class AuthenticateController extends BaseController { res.onAborted(() => { console.warn('Login request was aborted'); }) + const host = req.getHeader('host'); const param = await res.json(); //todo: what to do if the organizationMemberToken is already used? @@ -63,7 +64,7 @@ export class AuthenticateController extends BaseController { newUrl = this.getNewUrlOnAdminAuth(data) } else { userUuid = uuid(); - mapUrlStart = req.getHeader('host').replace('api.', 'maps.') + URL_ROOM_STARTED; + mapUrlStart = host.replace('api.', 'maps.') + URL_ROOM_STARTED; newUrl = null; } @@ -76,7 +77,7 @@ export class AuthenticateController extends BaseController { })); } catch (e) { - console.log(e.message) + console.log("An error happened", e) res.writeStatus(e.status || "500 Internal Server Error").end('An error happened'); } diff --git a/back/src/Controller/IoSocketController.ts b/back/src/Controller/IoSocketController.ts index c8753371..49ff7f49 100644 --- a/back/src/Controller/IoSocketController.ts +++ b/back/src/Controller/IoSocketController.ts @@ -47,7 +47,8 @@ import { import {UserMovesMessage} from "../Messages/generated/messages_pb"; import Direction = PositionMessage.Direction; import {ProtobufUtils} from "../Model/Websocket/ProtobufUtils"; -import {App, TemplatedApp, WebSocket} from "uWebSockets.js" +import {App, HttpRequest, TemplatedApp, WebSocket} from "uWebSockets.js" +import {parse} from "query-string"; enum SocketIoEvent { CONNECTION = "connection", @@ -135,67 +136,122 @@ export class IoSocketController { return null; }*/ - private authenticate(ws: WebSocket) { + private async authenticate(req: HttpRequest): Promise<{ token: string, userUuid: string }> { //console.log(socket.handshake.query.token); - /*if (!socket.handshake.query || !socket.handshake.query.token) { - console.error('An authentication error happened, a user tried to connect without a token.'); - return next(new Error('Authentication error')); - } - if(socket.handshake.query.token === 'test'){ - if (ALLOW_ARTILLERY) { - (socket as ExSocketInterface).token = socket.handshake.query.token; - (socket as ExSocketInterface).userId = this.nextUserId; - (socket as ExSocketInterface).userUuid = uuid(); - this.nextUserId++; - (socket as ExSocketInterface).isArtillery = true; - console.log((socket as ExSocketInterface).userId); - next(); - return; - } else { - console.warn("In order to perform a load-testing test on this environment, you must set the ALLOW_ARTILLERY environment variable to 'true'"); - next(); + const query = parse(req.getQuery()); + + if (!query.token) { + console.error('An authentication error happened, a user tried to connect without a token.'); + throw new Error('An authentication error happened, a user tried to connect without a token.'); + } + + const token = query.token; + if (typeof(token) !== "string") { + throw new Error('Token is expected to be a string'); + } + + + if(token === 'test'){ + if (ALLOW_ARTILLERY) { + return { + token, + userUuid: uuid() } + } else { + throw new Error("In order to perform a load-testing test on this environment, you must set the ALLOW_ARTILLERY environment variable to 'true'"); } - (socket as ExSocketInterface).isArtillery = false; - if(this.searchClientByToken(socket.handshake.query.token)){ - console.error('An authentication error happened, a user tried to connect while its token is already connected.'); - return next(new Error('Authentication error')); - } - Jwt.verify(socket.handshake.query.token, SECRET_KEY, (err: JsonWebTokenError, tokenDecoded: object) => { + } + + /*if(this.searchClientByToken(socket.handshake.query.token)){ + console.error('An authentication error happened, a user tried to connect while its token is already connected.'); + return next(new Error('Authentication error')); + }*/ + + const promise = new Promise<{ token: string, userUuid: string }>((resolve, reject) => { + Jwt.verify(token, SECRET_KEY, (err: JsonWebTokenError, tokenDecoded: object) => { const tokenInterface = tokenDecoded as TokenInterface; if (err) { console.error('An authentication error happened, invalid JsonWebToken.', err); - return next(new Error('Authentication error')); + reject(new Error('An authentication error happened, invalid JsonWebToken. '+err.message)); + return; } if (!this.isValidToken(tokenInterface)) { - return next(new Error('Authentication error, invalid token structure')); + reject(new Error('Authentication error, invalid token structure.')); + return; } - (socket as ExSocketInterface).token = socket.handshake.query.token; - (socket as ExSocketInterface).userId = this.nextUserId; - (socket as ExSocketInterface).userUuid = tokenInterface.userUuid; - this.nextUserId++; - next(); - });*/ - const socket = ws as ExSocketInterface; - socket.userId = this.nextUserId; - this.nextUserId++; + resolve({ + token, + userUuid: tokenInterface.userUuid + }); + }); + }); + + return promise; } ioConnection() { this.app.ws('/*', { + /* Options */ //compression: uWS.SHARED_COMPRESSOR, maxPayloadLength: 16 * 1024 * 1024, //idleTimeout: 10, + upgrade: (res, req, context) => { + console.log('An Http connection wants to become WebSocket, URL: ' + req.getUrl() + '!'); + (async () => { + + /* Keep track of abortions */ + const upgradeAborted = {aborted: false}; + + res.onAborted(() => { + /* We can simply signal that we were aborted */ + upgradeAborted.aborted = true; + }); + + try { + const result = await this.authenticate(req); + + if (upgradeAborted.aborted) { + console.log("Ouch! Client disconnected before we could upgrade it!"); + /* You must not upgrade now */ + return; + } + + /* This immediately calls open handler, you must not use res after this call */ + res.upgrade({ + // Data passed here is accessible on the "websocket" socket object. + url: req.getUrl(), + token: result.token, + userUuid: result.userUuid + }, + /* Spell these correctly */ + req.getHeader('sec-websocket-key'), + req.getHeader('sec-websocket-protocol'), + req.getHeader('sec-websocket-extensions'), + context); + + } catch (e: unknown) { + if (e instanceof Error) { + console.warn(e.message); + res.writeStatus("401 Unauthorized").end(e.message); + } else { + console.warn(e); + res.writeStatus("500 Internal Server Error").end('An error occurred'); + } + return; + } + })(); + }, /* Handlers */ open: (ws) => { - this.authenticate(ws); - // TODO: close if authenticate is ko - const client : ExSocketInterface = ws as ExSocketInterface; + client.userId = this.nextUserId; + this.nextUserId++; + client.userUuid = ws.userUuid; + client.token = ws.token; client.batchedMessages = new BatchMessage(); client.batchTimeout = null; client.emitInBatch = (payload: SubMessage): void => { diff --git a/back/src/Model/Websocket/ExSocketInterface.ts b/back/src/Model/Websocket/ExSocketInterface.ts index 00aeadb7..d70205ef 100644 --- a/back/src/Model/Websocket/ExSocketInterface.ts +++ b/back/src/Model/Websocket/ExSocketInterface.ts @@ -13,7 +13,6 @@ export interface ExSocketInterface extends WebSocket, Identificable { characterLayers: string[]; position: PointInterface; viewport: ViewportInterface; - isArtillery: boolean; // Whether this socket is opened by Artillery for load testing (hack) /** * Pushes an event that will be sent in the next batch of events */ From c7f5770968313df41a2ec0c3478300aa407360f9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20N=C3=A9grier?= Date: Wed, 30 Sep 2020 10:17:01 +0200 Subject: [PATCH 201/313] Fix CI --- back/src/Controller/IoSocketController.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/back/src/Controller/IoSocketController.ts b/back/src/Controller/IoSocketController.ts index 49ff7f49..6248372c 100644 --- a/back/src/Controller/IoSocketController.ts +++ b/back/src/Controller/IoSocketController.ts @@ -233,7 +233,7 @@ export class IoSocketController { req.getHeader('sec-websocket-extensions'), context); - } catch (e: unknown) { + } catch (e) { if (e instanceof Error) { console.warn(e.message); res.writeStatus("401 Unauthorized").end(e.message); From 074398c4e09b46f978337e9f6515556fdb85a7e0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20N=C3=A9grier?= Date: Wed, 30 Sep 2020 12:12:24 +0200 Subject: [PATCH 202/313] Fixing benchmark initialization --- benchmark/index.ts | 2 +- front/src/Connexion/ConnectionManager.ts | 4 ++++ front/src/Connexion/RoomConnection.ts | 1 - 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/benchmark/index.ts b/benchmark/index.ts index af209581..df1a69dd 100644 --- a/benchmark/index.ts +++ b/benchmark/index.ts @@ -45,8 +45,8 @@ async function startOneUser(): Promise { } (async () => { + connectionManager.initBenchmark(); - //await connectionManager.init(); for (let userNo = 0; userNo < 40; userNo++) { startOneUser(); diff --git a/front/src/Connexion/ConnectionManager.ts b/front/src/Connexion/ConnectionManager.ts index 311f0351..4df45099 100644 --- a/front/src/Connexion/ConnectionManager.ts +++ b/front/src/Connexion/ConnectionManager.ts @@ -31,6 +31,10 @@ class ConnectionManager { } } + public initBenchmark(): void { + this.authToken = 'test'; + } + public connectToRoomSocket(): Promise { return new Promise((resolve, reject) => { const connection = new RoomConnection(this.authToken as string); diff --git a/front/src/Connexion/RoomConnection.ts b/front/src/Connexion/RoomConnection.ts index 526ce54c..f96d2eed 100644 --- a/front/src/Connexion/RoomConnection.ts +++ b/front/src/Connexion/RoomConnection.ts @@ -120,7 +120,6 @@ export class RoomConnection implements RoomConnection { } else if (message.hasWebrtcscreensharingsignaltoclientmessage()) { this.dispatch(EventMessage.WEBRTC_SCREEN_SHARING_SIGNAL, message.getWebrtcscreensharingsignaltoclientmessage()); } else if (message.hasWebrtcstartmessage()) { - console.log('Received WebRtcStartMessage'); this.dispatch(EventMessage.WEBRTC_START, message.getWebrtcstartmessage()); } else if (message.hasWebrtcdisconnectmessage()) { this.dispatch(EventMessage.WEBRTC_DISCONNECT, message.getWebrtcdisconnectmessage()); From d9c910cfca2cf1c236fbac2b6c86939d568dae0f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20N=C3=A9grier?= Date: Wed, 30 Sep 2020 12:16:39 +0200 Subject: [PATCH 203/313] Removing useless code --- back/src/App.ts | 12 ----- back/src/Controller/IoSocketController.ts | 62 ++++++++++++++--------- 2 files changed, 38 insertions(+), 36 deletions(-) diff --git a/back/src/App.ts b/back/src/App.ts index b251290c..155ed450 100644 --- a/back/src/App.ts +++ b/back/src/App.ts @@ -20,18 +20,6 @@ class App { this.config(); this.crossOrigin(); - //TODO add middleware with access token to secure api - - // STUPID CORS IMPLEMENTATION. - // TODO: SECURE THIS - this.app.any('/*', (res, req) => { - res.writeHeader('access-control-allow-headers', 'Origin, X-Requested-With, Content-Type, Accept'); - res.writeHeader('access-control-allow-methods', 'GET, POST, OPTIONS, PUT, PATCH, DELETE'); - res.writeHeader('access-control-allow-origin', '*'); - - req.setYield(true); - }); - //create socket controllers this.ioSocketController = new IoSocketController(this.app); this.authenticateController = new AuthenticateController(this.app); diff --git a/back/src/Controller/IoSocketController.ts b/back/src/Controller/IoSocketController.ts index 6248372c..511a171e 100644 --- a/back/src/Controller/IoSocketController.ts +++ b/back/src/Controller/IoSocketController.ts @@ -50,27 +50,6 @@ import {ProtobufUtils} from "../Model/Websocket/ProtobufUtils"; import {App, HttpRequest, TemplatedApp, WebSocket} from "uWebSockets.js" import {parse} from "query-string"; -enum SocketIoEvent { - CONNECTION = "connection", - DISCONNECT = "disconnect", - JOIN_ROOM = "join-room", // bi-directional - USER_POSITION = "user-position", // From client to server - USER_MOVED = "user-moved", // From server to client - USER_LEFT = "user-left", // From server to client - WEBRTC_SIGNAL = "webrtc-signal", - WEBRTC_SCREEN_SHARING_SIGNAL = "webrtc-screen-sharing-signal", - WEBRTC_START = "webrtc-start", - WEBRTC_DISCONNECT = "webrtc-disconect", - MESSAGE_ERROR = "message-error", - GROUP_CREATE_UPDATE = "group-create-update", - GROUP_DELETE = "group-delete", - SET_PLAYER_DETAILS = "set-player-details", - ITEM_EVENT = 'item-event', - SET_SILENT = "set_silent", // Set or unset the silent mode for this user. - SET_VIEWPORT = "set-viewport", - BATCH = "batch", -} - function emitInBatch(socket: ExSocketInterface, payload: SubMessage): void { socket.batchedMessages.addPayload(payload); @@ -111,6 +90,41 @@ export class IoSocketController { }); this.ioConnection(); + + + + + let time = process.hrtime.bigint() + let usage = process.cpuUsage() + + + function secNSec2ms(secNSec) { + if (Array.isArray(secNSec)) { + return secNSec[0] * 1000 + secNSec[1] / 1000000; + } + return secNSec / 1000; + } + + let oldCpuUsage = process.cpuUsage(); + setInterval(() => { + let elapTime = process.hrtime.bigint(); + let elapUsage = process.cpuUsage(usage) + usage = process.cpuUsage() + + let elapTimeMS = elapTime - time; + let elapUserMS = secNSec2ms(elapUsage.user) + let elapSystMS = secNSec2ms(elapUsage.system) + let cpuPercent = Math.round(100 * (elapUserMS + elapSystMS) / Number(elapTimeMS) * 1000000) + + time = elapTime; + //usage = elapUsage; + console.log('elapsed time ms: ', elapTimeMS) + console.log('elapsed user ms: ', elapUserMS) + console.log('elapsed system ms:', elapSystMS) + console.log('cpu percent: ', cpuPercent) + + + }, 500); } private isValidToken(token: object): token is TokenInterface { @@ -142,7 +156,6 @@ export class IoSocketController { const query = parse(req.getQuery()); if (!query.token) { - console.error('An authentication error happened, a user tried to connect without a token.'); throw new Error('An authentication error happened, a user tried to connect without a token.'); } @@ -152,7 +165,7 @@ export class IoSocketController { } - if(token === 'test'){ + if(token === 'test') { if (ALLOW_ARTILLERY) { return { token, @@ -198,9 +211,10 @@ export class IoSocketController { /* Options */ //compression: uWS.SHARED_COMPRESSOR, maxPayloadLength: 16 * 1024 * 1024, + maxBackpressure: 65536, // Maximum 64kB of data in the buffer. //idleTimeout: 10, upgrade: (res, req, context) => { - console.log('An Http connection wants to become WebSocket, URL: ' + req.getUrl() + '!'); + //console.log('An Http connection wants to become WebSocket, URL: ' + req.getUrl() + '!'); (async () => { /* Keep track of abortions */ From 27871641aa2e7d708542040dbb777f9a0a790522 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20N=C3=A9grier?= Date: Wed, 30 Sep 2020 12:17:27 +0200 Subject: [PATCH 204/313] Removing dead code --- back/src/App.ts | 20 -------------------- 1 file changed, 20 deletions(-) diff --git a/back/src/App.ts b/back/src/App.ts index 155ed450..c575279c 100644 --- a/back/src/App.ts +++ b/back/src/App.ts @@ -17,9 +17,6 @@ class App { constructor() { this.app = new uwsApp(); - this.config(); - this.crossOrigin(); - //create socket controllers this.ioSocketController = new IoSocketController(this.app); this.authenticateController = new AuthenticateController(this.app); @@ -27,23 +24,6 @@ class App { this.prometheusController = new PrometheusController(this.app, this.ioSocketController); this.debugController = new DebugController(this.app, this.ioSocketController); } - - // TODO add session user - private config(): void { - /*this.app.use(bodyParser.json()); - this.app.use(bodyParser.urlencoded({extended: false}));*/ - } - - private crossOrigin(){ - /*this.app.use((req: Request, res: Response, next) => { - res.setHeader("Access-Control-Allow-Origin", "*"); // update to match the domain you will make the request from - // Request methods you wish to allow - res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, PATCH, DELETE'); - // Request headers you wish to allow - res.setHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept"); - next(); - });*/ - } } export default new App().app; From a87cdc543bf5cbfa78c51c0c0642425441f1179e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20N=C3=A9grier?= Date: Wed, 30 Sep 2020 12:50:34 +0200 Subject: [PATCH 205/313] Adding CPU tracking: if CPU > 80%, ignore position of moving players --- back/src/Controller/IoSocketController.ts | 41 ++++------------------- back/src/Services/CpuTracker.ts | 40 ++++++++++++++++++++++ benchmark/index.ts | 2 +- 3 files changed, 47 insertions(+), 36 deletions(-) create mode 100644 back/src/Services/CpuTracker.ts diff --git a/back/src/Controller/IoSocketController.ts b/back/src/Controller/IoSocketController.ts index 511a171e..87a8c5e2 100644 --- a/back/src/Controller/IoSocketController.ts +++ b/back/src/Controller/IoSocketController.ts @@ -49,6 +49,7 @@ import Direction = PositionMessage.Direction; import {ProtobufUtils} from "../Model/Websocket/ProtobufUtils"; import {App, HttpRequest, TemplatedApp, WebSocket} from "uWebSockets.js" import {parse} from "query-string"; +import {cpuTracker} from "../Services/CpuTracker"; function emitInBatch(socket: ExSocketInterface, payload: SubMessage): void { socket.batchedMessages.addPayload(payload); @@ -90,41 +91,6 @@ export class IoSocketController { }); this.ioConnection(); - - - - - let time = process.hrtime.bigint() - let usage = process.cpuUsage() - - - function secNSec2ms(secNSec) { - if (Array.isArray(secNSec)) { - return secNSec[0] * 1000 + secNSec[1] / 1000000; - } - return secNSec / 1000; - } - - let oldCpuUsage = process.cpuUsage(); - setInterval(() => { - let elapTime = process.hrtime.bigint(); - let elapUsage = process.cpuUsage(usage) - usage = process.cpuUsage() - - let elapTimeMS = elapTime - time; - let elapUserMS = secNSec2ms(elapUsage.user) - let elapSystMS = secNSec2ms(elapUsage.system) - let cpuPercent = Math.round(100 * (elapUserMS + elapSystMS) / Number(elapTimeMS) * 1000000) - - time = elapTime; - //usage = elapUsage; - console.log('elapsed time ms: ', elapTimeMS) - console.log('elapsed user ms: ', elapUserMS) - console.log('elapsed system ms:', elapSystMS) - console.log('cpu percent: ', cpuPercent) - - - }, 500); } private isValidToken(token: object): token is TokenInterface { @@ -452,6 +418,11 @@ export class IoSocketController { try { const userMoves = userMovesMessage.toObject(); + // If CPU is high, let's drop messages of users moving (we will only dispatch the final position) + if (cpuTracker.getCpuPercent() > 80 && userMoves.position?.moving === true) { + return; + } + const position = userMoves.position; if (position === undefined) { throw new Error('Position not found in message'); diff --git a/back/src/Services/CpuTracker.ts b/back/src/Services/CpuTracker.ts new file mode 100644 index 00000000..69eac8b9 --- /dev/null +++ b/back/src/Services/CpuTracker.ts @@ -0,0 +1,40 @@ + +function secNSec2ms(secNSec: Array|number) { + if (Array.isArray(secNSec)) { + return secNSec[0] * 1000 + secNSec[1] / 1000000; + } + return secNSec / 1000; +} + +class CpuTracker { + private cpuPercent: number = 0; + + constructor() { + let time = process.hrtime.bigint() + let usage = process.cpuUsage() + setInterval(() => { + let elapTime = process.hrtime.bigint(); + let elapUsage = process.cpuUsage(usage) + usage = process.cpuUsage() + + let elapTimeMS = elapTime - time; + let elapUserMS = secNSec2ms(elapUsage.user) + let elapSystMS = secNSec2ms(elapUsage.system) + this.cpuPercent = Math.round(100 * (elapUserMS + elapSystMS) / Number(elapTimeMS) * 1000000) + + time = elapTime; + /*console.log('elapsed time ms: ', elapTimeMS) + console.log('elapsed user ms: ', elapUserMS) + console.log('elapsed system ms:', elapSystMS) + console.log('cpu percent: ', this.cpuPercent)*/ + }, 500); + } + + public getCpuPercent(): number { + return this.cpuPercent; + } +} + +const cpuTracker = new CpuTracker(); + +export { cpuTracker }; diff --git a/benchmark/index.ts b/benchmark/index.ts index df1a69dd..420223cc 100644 --- a/benchmark/index.ts +++ b/benchmark/index.ts @@ -14,7 +14,7 @@ async function startOneUser(): Promise { const connection = await connectionManager.connectToRoomSocket(); connection.emitPlayerDetailsMessage('foo', ['male3']); - await connection.joinARoom('global__maps.workadventure.localhost/Floor0/floor0', 783, 170, 'down', false, { + await connection.joinARoom('global__maps.workadventure.localhost/Floor0/floor0', 783, 170, 'down', true, { top: 0, bottom: 200, left: 500, From 57262de1bf1aa8adeac98000bb1246a43f9d43b4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20N=C3=A9grier?= Date: Wed, 30 Sep 2020 13:49:23 +0200 Subject: [PATCH 206/313] Fixing CI + lowering extrapolation time --- back/src/Services/CpuTracker.ts | 12 ++++++------ front/src/Enum/EnvironmentVariable.ts | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/back/src/Services/CpuTracker.ts b/back/src/Services/CpuTracker.ts index 69eac8b9..abc0a17b 100644 --- a/back/src/Services/CpuTracker.ts +++ b/back/src/Services/CpuTracker.ts @@ -13,13 +13,13 @@ class CpuTracker { let time = process.hrtime.bigint() let usage = process.cpuUsage() setInterval(() => { - let elapTime = process.hrtime.bigint(); - let elapUsage = process.cpuUsage(usage) + const elapTime = process.hrtime.bigint(); + const elapUsage = process.cpuUsage(usage) usage = process.cpuUsage() - let elapTimeMS = elapTime - time; - let elapUserMS = secNSec2ms(elapUsage.user) - let elapSystMS = secNSec2ms(elapUsage.system) + const elapTimeMS = elapTime - time; + const elapUserMS = secNSec2ms(elapUsage.user) + const elapSystMS = secNSec2ms(elapUsage.system) this.cpuPercent = Math.round(100 * (elapUserMS + elapSystMS) / Number(elapTimeMS) * 1000000) time = elapTime; @@ -27,7 +27,7 @@ class CpuTracker { console.log('elapsed user ms: ', elapUserMS) console.log('elapsed system ms:', elapSystMS) console.log('cpu percent: ', this.cpuPercent)*/ - }, 500); + }, 100); } public getCpuPercent(): number { diff --git a/front/src/Enum/EnvironmentVariable.ts b/front/src/Enum/EnvironmentVariable.ts index 59c8b50f..0479d252 100644 --- a/front/src/Enum/EnvironmentVariable.ts +++ b/front/src/Enum/EnvironmentVariable.ts @@ -7,7 +7,7 @@ const JITSI_URL : string|undefined = (process.env.JITSI_URL === '') ? undefined const RESOLUTION = 3; const ZOOM_LEVEL = 1/*3/4*/; const POSITION_DELAY = 200; // Wait 200ms between sending position events -const MAX_EXTRAPOLATION_TIME = 250; // Extrapolate a maximum of 250ms if no new movement is sent by the player +const MAX_EXTRAPOLATION_TIME = 100; // Extrapolate a maximum of 250ms if no new movement is sent by the player export { DEBUG_MODE, From a8bbe04caef82df44b6e2dfa4ad92b9966c42113 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20N=C3=A9grier?= Date: Wed, 30 Sep 2020 14:42:35 +0200 Subject: [PATCH 207/313] Adding logs to track overheating --- back/src/Controller/IoSocketController.ts | 2 +- back/src/Enum/EnvironmentVariable.ts | 4 +++- back/src/Services/CpuTracker.ts | 15 +++++++++++++++ 3 files changed, 19 insertions(+), 2 deletions(-) diff --git a/back/src/Controller/IoSocketController.ts b/back/src/Controller/IoSocketController.ts index 87a8c5e2..42be1e1d 100644 --- a/back/src/Controller/IoSocketController.ts +++ b/back/src/Controller/IoSocketController.ts @@ -419,7 +419,7 @@ export class IoSocketController { const userMoves = userMovesMessage.toObject(); // If CPU is high, let's drop messages of users moving (we will only dispatch the final position) - if (cpuTracker.getCpuPercent() > 80 && userMoves.position?.moving === true) { + if (cpuTracker.isOverHeating() && userMoves.position?.moving === true) { return; } diff --git a/back/src/Enum/EnvironmentVariable.ts b/back/src/Enum/EnvironmentVariable.ts index c910bb66..b69ba00c 100644 --- a/back/src/Enum/EnvironmentVariable.ts +++ b/back/src/Enum/EnvironmentVariable.ts @@ -5,6 +5,7 @@ const GROUP_RADIUS = process.env.GROUP_RADIUS ? Number(process.env.GROUP_RADIUS) const ALLOW_ARTILLERY = process.env.ALLOW_ARTILLERY ? process.env.ALLOW_ARTILLERY == 'true' : false; const ADMIN_API_URL = process.env.ADMIN_API_URL || null; const ADMIN_API_TOKEN = process.env.ADMIN_API_TOKEN || null; +const CPU_OVERHEAT_THRESHOLD = Number(process.env.CPU_OVERHEAT_THRESHOLD) || 80; export { SECRET_KEY, @@ -14,4 +15,5 @@ export { ADMIN_API_TOKEN, GROUP_RADIUS, ALLOW_ARTILLERY, -} \ No newline at end of file + CPU_OVERHEAT_THRESHOLD, +} diff --git a/back/src/Services/CpuTracker.ts b/back/src/Services/CpuTracker.ts index abc0a17b..c7d57f3d 100644 --- a/back/src/Services/CpuTracker.ts +++ b/back/src/Services/CpuTracker.ts @@ -1,3 +1,4 @@ +import {CPU_OVERHEAT_THRESHOLD} from "../Enum/EnvironmentVariable"; function secNSec2ms(secNSec: Array|number) { if (Array.isArray(secNSec)) { @@ -8,6 +9,7 @@ function secNSec2ms(secNSec: Array|number) { class CpuTracker { private cpuPercent: number = 0; + private overHeating: boolean = false; constructor() { let time = process.hrtime.bigint() @@ -23,6 +25,15 @@ class CpuTracker { this.cpuPercent = Math.round(100 * (elapUserMS + elapSystMS) / Number(elapTimeMS) * 1000000) time = elapTime; + + if (!this.overHeating && this.cpuPercent > CPU_OVERHEAT_THRESHOLD) { + this.overHeating = true; + console.warn('CPU high threshold alert. Going in "overheat" mode'); + } else if (this.overHeating && this.cpuPercent <= CPU_OVERHEAT_THRESHOLD) { + this.overHeating = false; + console.log('CPU is back to normal. Canceling "overheat" mode'); + } + /*console.log('elapsed time ms: ', elapTimeMS) console.log('elapsed user ms: ', elapUserMS) console.log('elapsed system ms:', elapSystMS) @@ -33,6 +44,10 @@ class CpuTracker { public getCpuPercent(): number { return this.cpuPercent; } + + public isOverHeating(): boolean { + return this.overHeating; + } } const cpuTracker = new CpuTracker(); From e4872c6f9d29df5294b3ee1d1cbdec4e73c216ee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20N=C3=A9grier?= Date: Thu, 1 Oct 2020 15:55:23 +0200 Subject: [PATCH 208/313] Fix CI --- back/src/Controller/FileController.ts | 101 +++++++++++++------------- back/src/Server/server/baseapp.ts | 2 +- back/src/Server/server/formdata.ts | 8 +- benchmark/index.ts | 4 +- 4 files changed, 56 insertions(+), 59 deletions(-) diff --git a/back/src/Controller/FileController.ts b/back/src/Controller/FileController.ts index fa0c5f24..889cfa61 100644 --- a/back/src/Controller/FileController.ts +++ b/back/src/Controller/FileController.ts @@ -63,7 +63,7 @@ export class FileController extends BaseController { console.log('READING FILE', fieldname) const chunks: Buffer[] = [] - for await (let chunk of file) { + for await (const chunk of file) { if (!(chunk instanceof Buffer)) { throw new Error('Unexpected chunk'); } @@ -101,61 +101,58 @@ export class FileController extends BaseController { }); this.App.get("/download-audio-message/:id", (res: HttpResponse, req: HttpRequest) => { - (async () => { - this.addCorsHeaders(res); + this.addCorsHeaders(res); - res.onAborted(() => { - console.warn('upload-audio-message request was aborted'); - }) + res.onAborted(() => { + console.warn('upload-audio-message request was aborted'); + }) - const id = req.getParameter(0); + const id = req.getParameter(0); - const file = this.uploadedFileBuffers.get(id); - if (file === undefined) { - res.writeStatus("404 Not found").end("Cannot find file"); - return; + const file = this.uploadedFileBuffers.get(id); + if (file === undefined) { + res.writeStatus("404 Not found").end("Cannot find file"); + return; + } + + const readable = new Readable() + readable._read = () => {} // _read is required but you can noop it + readable.push(file.buffer); + readable.push(null); + + const size = file.buffer.byteLength; + + res.writeStatus("200 OK"); + + readable.on('data', buffer => { + const chunk = buffer.buffer.slice(buffer.byteOffset, buffer.byteOffset + buffer.byteLength), + lastOffset = res.getWriteOffset(); + + // First try + const [ok, done] = res.tryEnd(chunk, size); + + if (done) { + readable.destroy(); + } else if (!ok) { + // pause because backpressure + readable.pause(); + + // Save unsent chunk for later + res.ab = chunk; + res.abOffset = lastOffset; + + // Register async handlers for drainage + res.onWritable(offset => { + const [ok, done] = res.tryEnd(res.ab.slice(offset - res.abOffset), size); + if (done) { + readable.destroy(); + } else if (ok) { + readable.resume(); + } + return ok; + }); } - - const readable = new Readable() - readable._read = () => {} // _read is required but you can noop it - readable.push(file.buffer); - readable.push(null); - - const size = file.buffer.byteLength; - - res.writeStatus("200 OK"); - - readable.on('data', buffer => { - const chunk = buffer.buffer.slice(buffer.byteOffset, buffer.byteOffset + buffer.byteLength), - lastOffset = res.getWriteOffset(); - - // First try - const [ok, done] = res.tryEnd(chunk, size); - - if (done) { - readable.destroy(); - } else if (!ok) { - // pause because backpressure - readable.pause(); - - // Save unsent chunk for later - res.ab = chunk; - res.abOffset = lastOffset; - - // Register async handlers for drainage - res.onWritable(offset => { - const [ok, done] = res.tryEnd(res.ab.slice(offset - res.abOffset), size); - if (done) { - readable.destroy(); - } else if (ok) { - readable.resume(); - } - return ok; - }); - } - }); - - })(); + }); }); } } diff --git a/back/src/Server/server/baseapp.ts b/back/src/Server/server/baseapp.ts index 9831c860..accd8a99 100644 --- a/back/src/Server/server/baseapp.ts +++ b/back/src/Server/server/baseapp.ts @@ -31,7 +31,7 @@ const handleBody = (res: HttpResponse, req: HttpRequest) => { if (contType.includes('application/json')) res.json = async () => JSON.parse(await res.body()); - if (contTypes.map(t => contType.indexOf(t) > -1).indexOf(true) > -1) + if (contTypes.map(t => contType.includes(t)).includes(true)) res.formData = formData.bind(res, contType); }; diff --git a/back/src/Server/server/formdata.ts b/back/src/Server/server/formdata.ts index 7af70dda..9dd08440 100644 --- a/back/src/Server/server/formdata.ts +++ b/back/src/Server/server/formdata.ts @@ -15,7 +15,7 @@ function formData( encoding: string, mimetype: string ) => string; - onField?: (fieldname: string, value: any) => void; + onField?: (fieldname: string, value: any) => void; // eslint-disable-line @typescript-eslint/no-explicit-any filename?: (oldName: string) => string; } = {} ) { @@ -75,11 +75,11 @@ function formData( } function setRetValue( - ret: { [x: string]: any }, + ret: { [x: string]: any }, // eslint-disable-line @typescript-eslint/no-explicit-any fieldname: string, - value: { filename: string; encoding: string; mimetype: string; filePath?: string } | any + value: { filename: string; encoding: string; mimetype: string; filePath?: string } | any // eslint-disable-line @typescript-eslint/no-explicit-any ) { - if (fieldname.slice(-2) === '[]') { + if (fieldname.endsWith('[]')) { fieldname = fieldname.slice(0, fieldname.length - 2); if (Array.isArray(ret[fieldname])) { ret[fieldname].push(value); diff --git a/benchmark/index.ts b/benchmark/index.ts index 420223cc..c4bda8fc 100644 --- a/benchmark/index.ts +++ b/benchmark/index.ts @@ -48,9 +48,9 @@ async function startOneUser(): Promise { connectionManager.initBenchmark(); - for (let userNo = 0; userNo < 40; userNo++) { + for (let userNo = 0; userNo < 160; userNo++) { startOneUser(); // Wait 0.5s between adding users - await sleep(500); + await sleep(125); } })(); From 9563013f480cf63baae697cccf076afbdabd899f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20N=C3=A9grier?= Date: Thu, 1 Oct 2020 16:02:45 +0200 Subject: [PATCH 209/313] Removing useless file --- front/dist/resources/logos/music-file.svg.back | 1 - 1 file changed, 1 deletion(-) delete mode 100644 front/dist/resources/logos/music-file.svg.back diff --git a/front/dist/resources/logos/music-file.svg.back b/front/dist/resources/logos/music-file.svg.back deleted file mode 100644 index 185bff28..00000000 --- a/front/dist/resources/logos/music-file.svg.back +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file From f06abfae4c8edafee31304d3d9ef37823481cc60 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20N=C3=A9grier?= Date: Thu, 1 Oct 2020 16:51:51 +0200 Subject: [PATCH 210/313] Migrating to uuid v4 --- back/src/Controller/AuthenticateController.ts | 4 ++-- back/src/Controller/FileController.ts | 4 ++-- back/src/Controller/IoSocketController.ts | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/back/src/Controller/AuthenticateController.ts b/back/src/Controller/AuthenticateController.ts index aa27a468..84cfd97f 100644 --- a/back/src/Controller/AuthenticateController.ts +++ b/back/src/Controller/AuthenticateController.ts @@ -1,6 +1,6 @@ import Jwt from "jsonwebtoken"; import {ADMIN_API_TOKEN, ADMIN_API_URL, SECRET_KEY, URL_ROOM_STARTED} from "../Enum/EnvironmentVariable"; //TODO fix import by "_Enum/..." -import { uuid } from 'uuidv4'; +import { v4 } from 'uuid'; import {HttpRequest, HttpResponse, TemplatedApp} from "uWebSockets.js"; import {BaseController} from "./BaseController"; import Axios from "axios"; @@ -63,7 +63,7 @@ export class AuthenticateController extends BaseController { mapUrlStart = data.mapUrlStart; newUrl = this.getNewUrlOnAdminAuth(data) } else { - userUuid = uuid(); + userUuid = v4(); mapUrlStart = host.replace('api.', 'maps.') + URL_ROOM_STARTED; newUrl = null; } diff --git a/back/src/Controller/FileController.ts b/back/src/Controller/FileController.ts index 889cfa61..87b72b80 100644 --- a/back/src/Controller/FileController.ts +++ b/back/src/Controller/FileController.ts @@ -1,6 +1,6 @@ import {App} from "../Server/sifrr.server"; -import {uuid} from "uuidv4"; +import {v4} from "uuid"; import {HttpRequest, HttpResponse} from "uWebSockets.js"; import {BaseController} from "./BaseController"; import { Readable } from 'stream' @@ -51,7 +51,7 @@ export class FileController extends BaseController { }) try { - const audioMessageId = uuid(); + const audioMessageId = v4(); const params = await res.formData({ onFile: (fieldname: string, diff --git a/back/src/Controller/IoSocketController.ts b/back/src/Controller/IoSocketController.ts index 9696748a..e9f97ea6 100644 --- a/back/src/Controller/IoSocketController.ts +++ b/back/src/Controller/IoSocketController.ts @@ -16,7 +16,7 @@ import {PointInterface} from "../Model/Websocket/PointInterface"; import {isWebRtcSignalMessageInterface} from "../Model/Websocket/WebRtcSignalMessage"; import {UserInGroupInterface} from "../Model/Websocket/UserInGroupInterface"; import {isItemEventMessageInterface} from "../Model/Websocket/ItemEventMessage"; -import {uuid} from 'uuidv4'; +import { v4 as uuidv4 } from 'uuid'; import {GroupUpdateInterface} from "_Model/Websocket/GroupUpdateInterface"; import {Movable} from "../Model/Movable"; import { @@ -135,7 +135,7 @@ export class IoSocketController { if (ALLOW_ARTILLERY) { return { token, - userUuid: uuid() + userUuid: uuidv4() } } else { throw new Error("In order to perform a load-testing test on this environment, you must set the ALLOW_ARTILLERY environment variable to 'true'"); From 8bc5832eac2651f2ca2a27c2393971edcb802296 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20N=C3=A9grier?= Date: Thu, 1 Oct 2020 17:15:33 +0200 Subject: [PATCH 211/313] Removing warning on startup --- front/src/Connexion/ConnectionManager.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/front/src/Connexion/ConnectionManager.ts b/front/src/Connexion/ConnectionManager.ts index 4df45099..59a54510 100644 --- a/front/src/Connexion/ConnectionManager.ts +++ b/front/src/Connexion/ConnectionManager.ts @@ -10,7 +10,7 @@ interface LoginApiData { } class ConnectionManager { - private initPromise: Promise = Promise.reject(); + private initPromise!: Promise; private mapUrlStart: string|null = null; private authToken:string|null = null; From e1193ad95aa3c072ac4f45fa39f02d3d1cd637f9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20N=C3=A9grier?= Date: Thu, 1 Oct 2020 17:16:36 +0200 Subject: [PATCH 212/313] Fixing console removal --- back/src/Model/Group.ts | 3 +-- front/src/Administration/ConsoleGlobalMessageManager.ts | 6 ++---- 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/back/src/Model/Group.ts b/back/src/Model/Group.ts index 16dd6cd5..a67383f0 100644 --- a/back/src/Model/Group.ts +++ b/back/src/Model/Group.ts @@ -1,7 +1,6 @@ -import { World, ConnectCallback, DisconnectCallback } from "./World"; +import { ConnectCallback, DisconnectCallback } from "./World"; import { User } from "./User"; import {PositionInterface} from "_Model/PositionInterface"; -import {uuid} from "uuidv4"; import {Movable} from "_Model/Movable"; import {PositionNotifier} from "_Model/PositionNotifier"; diff --git a/front/src/Administration/ConsoleGlobalMessageManager.ts b/front/src/Administration/ConsoleGlobalMessageManager.ts index e60b8a3d..135f1799 100644 --- a/front/src/Administration/ConsoleGlobalMessageManager.ts +++ b/front/src/Administration/ConsoleGlobalMessageManager.ts @@ -36,10 +36,8 @@ export class ConsoleGlobalMessageManager { } initialise() { - try { - HtmlUtils.removeElementByIdOrFail(CLASS_CONSOLE_MESSAGE); - }catch (err){ - console.error(err); + for (const elem of document.getElementsByClassName(CLASS_CONSOLE_MESSAGE)) { + elem.remove(); } const typeConsole = document.createElement('input'); From 1061c80f1ff66e9a3b68d61b45e76d9f7e8ded6c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20N=C3=A9grier?= Date: Thu, 1 Oct 2020 17:16:49 +0200 Subject: [PATCH 213/313] Fixing connection closing --- front/src/Connexion/RoomConnection.ts | 5 +++++ front/src/Phaser/Game/GameScene.ts | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/front/src/Connexion/RoomConnection.ts b/front/src/Connexion/RoomConnection.ts index 3492f0f9..a27bd323 100644 --- a/front/src/Connexion/RoomConnection.ts +++ b/front/src/Connexion/RoomConnection.ts @@ -43,6 +43,7 @@ export class RoomConnection implements RoomConnection { private userId: number|null = null; private listeners: Map = new Map(); private static websocketFactory: null|((url: string)=>any) = null; // eslint-disable-line @typescript-eslint/no-explicit-any + private closed: boolean = false; public static setWebsocketFactory(websocketFactory: (url: string)=>any): void { // eslint-disable-line @typescript-eslint/no-explicit-any RoomConnection.websocketFactory = websocketFactory; @@ -157,6 +158,7 @@ export class RoomConnection implements RoomConnection { public closeConnection(): void { this.socket?.close(); + this.closed = true; } private resolveJoinRoom!: (value?: (RoomJoinedMessageInterface | PromiseLike | undefined)) => void; @@ -389,6 +391,9 @@ export class RoomConnection implements RoomConnection { public onServerDisconnected(callback: (event: CloseEvent) => void): void { this.socket.addEventListener('close', (event) => { + if (this.closed === true) { + return; + } console.log('Socket closed with code '+event.code+". Reason: "+event.reason); if (event.code === 1000) { // Normal closure case diff --git a/front/src/Phaser/Game/GameScene.ts b/front/src/Phaser/Game/GameScene.ts index bdaf3ac6..608d920b 100644 --- a/front/src/Phaser/Game/GameScene.ts +++ b/front/src/Phaser/Game/GameScene.ts @@ -951,7 +951,7 @@ export class GameScene extends Phaser.Scene implements CenterListener { }); const nextSceneKey = this.checkToExit(); - if(nextSceneKey){ + if (nextSceneKey) { // We are completely destroying the current scene to avoid using a half-backed instance when coming back to the same map. this.connection.closeConnection(); this.simplePeer.unregister(); From 0b78eb62772129ab9df8f9e8ff97aeaa015af1be Mon Sep 17 00:00:00 2001 From: arp Date: Tue, 6 Oct 2020 15:37:00 +0200 Subject: [PATCH 214/313] temp --- back/src/Controller/AuthenticateController.ts | 18 +-- back/src/Controller/IoSocketController.ts | 136 +++++++----------- back/src/Model/{World.ts => GameRoom.ts} | 107 +------------- back/src/Model/Group.ts | 3 +- back/src/Services/AdminApi.ts | 36 +++++ back/tests/PositionNotifierTest.ts | 2 +- back/tests/WorldTest.ts | 8 +- 7 files changed, 102 insertions(+), 208 deletions(-) rename back/src/Model/{World.ts => GameRoom.ts} (68%) create mode 100644 back/src/Services/AdminApi.ts diff --git a/back/src/Controller/AuthenticateController.ts b/back/src/Controller/AuthenticateController.ts index aa27a468..7a8a95dd 100644 --- a/back/src/Controller/AuthenticateController.ts +++ b/back/src/Controller/AuthenticateController.ts @@ -3,20 +3,12 @@ import {ADMIN_API_TOKEN, ADMIN_API_URL, SECRET_KEY, URL_ROOM_STARTED} from "../E import { uuid } from 'uuidv4'; import {HttpRequest, HttpResponse, TemplatedApp} from "uWebSockets.js"; import {BaseController} from "./BaseController"; -import Axios from "axios"; +import {adminApi, AdminApiData} from "../Services/AdminApi"; export interface TokenInterface { userUuid: string } -interface AdminApiData { - organizationSlug: string - worldSlug: string - roomSlug: string - mapUrlStart: string - userUuid: string -} - export class AuthenticateController extends BaseController { constructor(private App : TemplatedApp) { @@ -51,13 +43,7 @@ export class AuthenticateController extends BaseController { let newUrl: string|null = null; if (organizationMemberToken) { - if (!ADMIN_API_URL) { - return res.status(401).send('No admin backoffice set!'); - } - //todo: this call can fail if the corresponding world is not activated or if the token is invalid. Handle that case. - const data = await Axios.get(ADMIN_API_URL+'/api/login-url/'+organizationMemberToken, - { headers: {"Authorization" : `${ADMIN_API_TOKEN}`} } - ).then((res): AdminApiData => res.data); + const data = await adminApi.fetchMemberDataByToken(organizationMemberToken); userUuid = data.userUuid; mapUrlStart = data.mapUrlStart; diff --git a/back/src/Controller/IoSocketController.ts b/back/src/Controller/IoSocketController.ts index 9696748a..1591a5f1 100644 --- a/back/src/Controller/IoSocketController.ts +++ b/back/src/Controller/IoSocketController.ts @@ -1,23 +1,14 @@ -import * as http from "http"; -import {MessageUserPosition, Point} from "../Model/Websocket/MessageUserPosition"; //TODO fix import by "_Model/.." import {ExSocketInterface} from "../Model/Websocket/ExSocketInterface"; //TODO fix import by "_Model/.." -import Jwt, {JsonWebTokenError} from "jsonwebtoken"; +import Jwt from "jsonwebtoken"; import {SECRET_KEY, MINIMUM_DISTANCE, GROUP_RADIUS, ALLOW_ARTILLERY} from "../Enum/EnvironmentVariable"; //TODO fix import by "_Enum/..." -import {World} from "../Model/World"; +import {GameRoom} from "../Model/GameRoom"; import {Group} from "../Model/Group"; import {User} from "../Model/User"; import {isSetPlayerDetailsMessage,} from "../Model/Websocket/SetPlayerDetailsMessage"; -import {MessageUserJoined} from "../Model/Websocket/MessageUserJoined"; -import si from "systeminformation"; import {Gauge} from "prom-client"; import {TokenInterface} from "../Controller/AuthenticateController"; -import {isJoinRoomMessageInterface} from "../Model/Websocket/JoinRoomMessage"; import {PointInterface} from "../Model/Websocket/PointInterface"; -import {isWebRtcSignalMessageInterface} from "../Model/Websocket/WebRtcSignalMessage"; -import {UserInGroupInterface} from "../Model/Websocket/UserInGroupInterface"; -import {isItemEventMessageInterface} from "../Model/Websocket/ItemEventMessage"; import {uuid} from 'uuidv4'; -import {GroupUpdateInterface} from "_Model/Websocket/GroupUpdateInterface"; import {Movable} from "../Model/Movable"; import { PositionMessage, @@ -42,14 +33,17 @@ import { SilentMessage, WebRtcSignalToClientMessage, WebRtcSignalToServerMessage, - WebRtcStartMessage, WebRtcDisconnectMessage, PlayGlobalMessage + WebRtcStartMessage, + WebRtcDisconnectMessage, + PlayGlobalMessage, } from "../Messages/generated/messages_pb"; import {UserMovesMessage} from "../Messages/generated/messages_pb"; import Direction = PositionMessage.Direction; import {ProtobufUtils} from "../Model/Websocket/ProtobufUtils"; -import {App, HttpRequest, TemplatedApp, WebSocket} from "uWebSockets.js" +import {HttpRequest, TemplatedApp} from "uWebSockets.js" import {parse} from "query-string"; import {cpuTracker} from "../Services/CpuTracker"; +import {adminApi} from "../Services/AdminApi"; function emitInBatch(socket: ExSocketInterface, payload: SubMessage): void { socket.batchedMessages.addPayload(payload); @@ -71,7 +65,7 @@ function emitInBatch(socket: ExSocketInterface, payload: SubMessage): void { } export class IoSocketController { - private Worlds: Map = new Map(); + private Worlds: Map = new Map(); private sockets: Map = new Map(); private nbClientsGauge: Gauge; private nbClientsPerRoomGauge: Gauge; @@ -100,32 +94,11 @@ export class IoSocketController { return true; } - /** - * - * @param token - */ -/* searchClientByToken(token: string): ExSocketInterface | null { - const clients: ExSocketInterface[] = Object.values(this.Io.sockets.sockets) as ExSocketInterface[]; - for (let i = 0; i < clients.length; i++) { - const client = clients[i]; - if (client.token !== token) { - continue - } - return client; - } - return null; - }*/ - - private async authenticate(req: HttpRequest): Promise<{ token: string, userUuid: string }> { - //console.log(socket.handshake.query.token); - - const query = parse(req.getQuery()); - - if (!query.token) { + private async getUserUuidFromToken(token: unknown): Promise { + + if (!token) { throw new Error('An authentication error happened, a user tried to connect without a token.'); } - - const token = query.token; if (typeof(token) !== "string") { throw new Error('Token is expected to be a string'); } @@ -133,22 +106,15 @@ export class IoSocketController { if(token === 'test') { if (ALLOW_ARTILLERY) { - return { - token, - userUuid: uuid() - } + return uuid(); } else { throw new Error("In order to perform a load-testing test on this environment, you must set the ALLOW_ARTILLERY environment variable to 'true'"); } } - /*if(this.searchClientByToken(socket.handshake.query.token)){ - console.error('An authentication error happened, a user tried to connect while its token is already connected.'); - return next(new Error('Authentication error')); - }*/ - - const promise = new Promise<{ token: string, userUuid: string }>((resolve, reject) => { + return new Promise((resolve, reject) => { Jwt.verify(token, SECRET_KEY, {},(err, tokenDecoded) => { + const tokenInterface = tokenDecoded as TokenInterface; if (err) { console.error('An authentication error happened, invalid JsonWebToken.', err); reject(new Error('An authentication error happened, invalid JsonWebToken. '+err.message)); @@ -159,25 +125,19 @@ export class IoSocketController { reject(new Error('Empty token found.')); return; } - const tokenInterface = tokenDecoded as TokenInterface; if (!this.isValidToken(tokenInterface)) { reject(new Error('Authentication error, invalid token structure.')); return; } - resolve({ - token, - userUuid: tokenInterface.userUuid - }); + resolve(tokenInterface.userUuid); }); }); - - return promise; } ioConnection() { - this.app.ws('/*', { + this.app.ws('/room', { /* Options */ //compression: uWS.SHARED_COMPRESSOR, @@ -197,7 +157,21 @@ export class IoSocketController { }); try { - const result = await this.authenticate(req); + const query = parse(req.getQuery()); + + const moderated = query.moderated || false; + const roomId = query.roomId || null; + const token = query.token; + + + const userUuid = await this.getUserUuidFromToken(token); + + this.handleJoinRoom(client, message.getJoinroommessage() as JoinRoomMessage); + + const isGranted = await adminApi.memberIsGrantedAccessToRoom(client.userUuid, roomId); + if (!isGranted) { + throw Error('Client cannot acces this ressource.'); + } if (upgradeAborted.aborted) { console.log("Ouch! Client disconnected before we could upgrade it!"); @@ -209,8 +183,8 @@ export class IoSocketController { res.upgrade({ // Data passed here is accessible on the "websocket" socket object. url: req.getUrl(), - token: result.token, - userUuid: result.userUuid + token, + userUuid }, /* Spell these correctly */ req.getHeader('sec-websocket-key'), @@ -250,13 +224,11 @@ export class IoSocketController { console.log(new Date().toISOString() + ' A user joined (', this.sockets.size, ' connected users)'); }, - message: (ws, arrayBuffer, isBinary) => { + message: (ws, arrayBuffer, isBinary): void => { const client = ws as ExSocketInterface; const message = ClientToServerMessage.deserializeBinary(new Uint8Array(arrayBuffer)); - if (message.hasJoinroommessage()) { - this.handleJoinRoom(client, message.getJoinroommessage() as JoinRoomMessage); - } else if (message.hasViewportmessage()) { + if (message.hasViewportmessage()) { this.handleViewport(client, message.getViewportmessage() as ViewportMessage); } else if (message.hasUsermovesmessage()) { this.handleUserMovesMessage(client, message.getUsermovesmessage() as UserMovesMessage); @@ -333,26 +305,22 @@ export class IoSocketController { console.warn(message); } - private handleJoinRoom(Client: ExSocketInterface, message: JoinRoomMessage): void { + private async handleJoinRoom(client: ExSocketInterface, message: JoinRoomMessage): Promise { try { - /*if (!isJoinRoomMessageInterface(message.toObject())) { - console.log(message.toObject()) - this.emitError(Client, 'Invalid JOIN_ROOM message received: ' + message.toObject().toString()); - return; - }*/ const roomId = message.getRoomid(); - if (Client.roomId === roomId) { + if (client.roomId === roomId) { return; } + //leave previous room //this.leaveRoom(Client); // Useless now, there is only one room per connection //join new previous room - const world = this.joinRoom(Client, roomId, ProtobufUtils.toPointInterface(message.getPosition() as PositionMessage)); + const gameRoom = await this.joinRoom(client, roomId, ProtobufUtils.toPointInterface(message.getPosition() as PositionMessage)); - const things = world.setViewport(Client, (message.getViewport() as ViewportMessage).toObject()); + const things = gameRoom.setViewport(client, (message.getViewport() as ViewportMessage).toObject()); const roomJoinedMessage = new RoomJoinedMessage(); @@ -382,7 +350,7 @@ export class IoSocketController { } } - for (const [itemId, item] of world.getItemsState().entries()) { + for (const [itemId, item] of gameRoom.getItemsState().entries()) { const itemStateMessage = new ItemStateMessage(); itemStateMessage.setItemid(itemId); itemStateMessage.setStatejson(JSON.stringify(item)); @@ -393,8 +361,8 @@ export class IoSocketController { const serverToClientMessage = new ServerToClientMessage(); serverToClientMessage.setRoomjoinedmessage(roomJoinedMessage); - if (!Client.disconnecting) { - Client.send(serverToClientMessage.serializeBinary().buffer, true); + if (!client.disconnecting) { + client.send(serverToClientMessage.serializeBinary().buffer, true); } } catch (e) { console.error('An error occurred on "join_room" event'); @@ -600,7 +568,7 @@ export class IoSocketController { if(Client.roomId){ try { //user leave previous world - const world: World | undefined = this.Worlds.get(Client.roomId); + const world: GameRoom | undefined = this.Worlds.get(Client.roomId); if (world) { world.leave(Client); if (world.isEmpty()) { @@ -616,17 +584,17 @@ export class IoSocketController { } } - private joinRoom(Client : ExSocketInterface, roomId: string, position: PointInterface): World { + private joinRoom(client : ExSocketInterface, roomId: string, position: PointInterface): GameRoom { + //join user in room - //Client.join(roomId); this.nbClientsPerRoomGauge.inc({ room: roomId }); - Client.roomId = roomId; - Client.position = position; + client.roomId = roomId; + client.position = position; //check and create new world for a room let world = this.Worlds.get(roomId) if(world === undefined){ - world = new World((user1: User, group: Group) => { + world = new GameRoom((user1: User, group: Group) => { this.joinWebRtcRoom(user1, group); }, (user1: User, group: Group) => { this.disConnectedUser(user1, group); @@ -689,10 +657,10 @@ export class IoSocketController { // Dispatch groups position to newly connected user world.getGroups().forEach((group: Group) => { - this.emitCreateUpdateGroupEvent(Client, group); + this.emitCreateUpdateGroupEvent(client, group); }); //join world - world.join(Client, Client.position); + world.join(client, client.position); return world; } @@ -882,7 +850,7 @@ export class IoSocketController { } - public getWorlds(): Map { + public getWorlds(): Map { return this.Worlds; } } diff --git a/back/src/Model/World.ts b/back/src/Model/GameRoom.ts similarity index 68% rename from back/src/Model/World.ts rename to back/src/Model/GameRoom.ts index c276d04e..1f438e61 100644 --- a/back/src/Model/World.ts +++ b/back/src/Model/GameRoom.ts @@ -1,12 +1,10 @@ -import {MessageUserPosition, Point} from "./Websocket/MessageUserPosition"; import {PointInterface} from "./Websocket/PointInterface"; import {Group} from "./Group"; -import {Distance} from "./Distance"; import {User} from "./User"; import {ExSocketInterface} from "_Model/Websocket/ExSocketInterface"; import {PositionInterface} from "_Model/PositionInterface"; import {Identificable} from "_Model/Websocket/Identificable"; -import {EntersCallback, LeavesCallback, MovesCallback, Zone} from "_Model/Zone"; +import {EntersCallback, LeavesCallback, MovesCallback} from "_Model/Zone"; import {PositionNotifier} from "./PositionNotifier"; import {ViewportInterface} from "_Model/Websocket/ViewportMessage"; import {Movable} from "_Model/Movable"; @@ -14,7 +12,7 @@ import {Movable} from "_Model/Movable"; export type ConnectCallback = (user: User, group: Group) => void; export type DisconnectCallback = (user: User, group: Group) => void; -export class World { +export class GameRoom { private readonly minDistance: number; private readonly groupRadius: number; @@ -123,7 +121,7 @@ export class World { } else { // If the user is part of a group: // should he leave the group? - const distance = World.computeDistanceBetweenPositions(user.getPosition(), user.group.getPosition()); + const distance = GameRoom.computeDistanceBetweenPositions(user.getPosition(), user.group.getPosition()); if (distance > this.groupRadius) { this.leaveGroup(user); } @@ -199,53 +197,19 @@ export class World { return; } - const distance = World.computeDistance(user, currentUser); // compute distance between peers. + const distance = GameRoom.computeDistance(user, currentUser); // compute distance between peers. if(distance <= minimumDistanceFound && distance <= this.minDistance) { minimumDistanceFound = distance; matchingItem = currentUser; } - /*if (typeof currentUser.group === 'undefined' || !currentUser.group.isFull()) { - // We found a user we can bind to. - return; - }*/ - /* - if(context.groups.length > 0) { - - context.groups.forEach(group => { - if(group.isPartOfGroup(userPosition)) { // Is the user in a group ? - if(group.isStillIn(userPosition)) { // Is the user leaving the group ? (is the user at more than max distance of each player) - - // Should we split the group? (is each player reachable from the current player?) - // This is needed if - // A <==> B <==> C <===> D - // becomes A <==> B <=====> C <> D - // If C moves right, the distance between B and C is too great and we must form 2 groups - - } - } else { - // If the user is in no group - // Is there someone in a group close enough and with room in the group ? - } - }); - - } else { - // Aucun groupe n'existe donc je stock les users assez proches de moi - let dist: Distance = { - distance: distance, - first: userPosition, - second: user // TODO: convertir en messageUserPosition - } - usersToBeGroupedWith.push(dist); - } - */ }); this.groups.forEach((group: Group) => { if (group.isFull()) { return; } - const distance = World.computeDistanceBetweenPositions(user.getPosition(), group.getPosition()); + const distance = GameRoom.computeDistanceBetweenPositions(user.getPosition(), group.getPosition()); if(distance <= minimumDistanceFound && distance <= this.groupRadius) { minimumDistanceFound = distance; matchingItem = group; @@ -275,66 +239,7 @@ export class World { return this.itemsState; } - /*getDistancesBetweenGroupUsers(group: Group): Distance[] - { - let i = 0; - let users = group.getUsers(); - let distances: Distance[] = []; - users.forEach(function(user1, key1) { - users.forEach(function(user2, key2) { - if(key1 < key2) { - distances[i] = { - distance: World.computeDistance(user1, user2), - first: user1, - second: user2 - }; - i++; - } - }); - }); - - distances.sort(World.compareDistances); - - return distances; - } - - filterGroup(distances: Distance[], group: Group): void - { - let users = group.getUsers(); - let usersToRemove = false; - let groupTmp: MessageUserPosition[] = []; - distances.forEach(dist => { - if(dist.distance <= World.MIN_DISTANCE) { - let users = [dist.first]; - let usersbis = [dist.second] - groupTmp.push(dist.first); - groupTmp.push(dist.second); - } else { - usersToRemove = true; - } - }); - - if(usersToRemove) { - // Detecte le ou les users qui se sont fait sortir du groupe - let difference = users.filter(x => !groupTmp.includes(x)); - - // TODO : Notify users un difference that they have left the group - } - - let newgroup = new Group(groupTmp); - this.groups.push(newgroup); - } - - private static compareDistances(distA: Distance, distB: Distance): number - { - if (distA.distance < distB.distance) { - return -1; - } - if (distA.distance > distB.distance) { - return 1; - } - return 0; - }*/ + setViewport(socket : Identificable, viewport: ViewportInterface): Movable[] { const user = this.users.get(socket.userId); if(typeof user === 'undefined') { diff --git a/back/src/Model/Group.ts b/back/src/Model/Group.ts index 16dd6cd5..9afa9764 100644 --- a/back/src/Model/Group.ts +++ b/back/src/Model/Group.ts @@ -1,7 +1,6 @@ -import { World, ConnectCallback, DisconnectCallback } from "./World"; +import { ConnectCallback, DisconnectCallback } from "./GameRoom"; import { User } from "./User"; import {PositionInterface} from "_Model/PositionInterface"; -import {uuid} from "uuidv4"; import {Movable} from "_Model/Movable"; import {PositionNotifier} from "_Model/PositionNotifier"; diff --git a/back/src/Services/AdminApi.ts b/back/src/Services/AdminApi.ts new file mode 100644 index 00000000..de28e4ef --- /dev/null +++ b/back/src/Services/AdminApi.ts @@ -0,0 +1,36 @@ +import {ADMIN_API_TOKEN, ADMIN_API_URL} from "../Enum/EnvironmentVariable"; +import Axios from "axios"; + +export interface AdminApiData { + organizationSlug: string + worldSlug: string + roomSlug: string + mapUrlStart: string + userUuid: string +} + +class AdminApi { + + async fetchMemberDataByToken(organizationMemberToken: string): Promise { + if (!ADMIN_API_URL) { + return Promise.reject('No admin backoffice set!'); + } + //todo: this call can fail if the corresponding world is not activated or if the token is invalid. Handle that case. + const res = await Axios.get(ADMIN_API_URL+'/api/login-url/'+organizationMemberToken, + { headers: {"Authorization" : `${ADMIN_API_TOKEN}`} } + ) + return res.data; + } + + async memberIsGrantedAccessToRoom(memberId: string, roomId: string): Promise { + if (!ADMIN_API_URL) { + return Promise.reject('No admin backoffice set!'); + } + const res = await Axios.get(ADMIN_API_URL+'/api/member/'+memberId+'/is-granted-access/'+roomId, + { headers: {"Authorization" : `${ADMIN_API_TOKEN}`} } + ) + return res.data === true; + } +} + +export const adminApi = new AdminApi(); \ No newline at end of file diff --git a/back/tests/PositionNotifierTest.ts b/back/tests/PositionNotifierTest.ts index 253283af..0f556866 100644 --- a/back/tests/PositionNotifierTest.ts +++ b/back/tests/PositionNotifierTest.ts @@ -1,5 +1,5 @@ import "jasmine"; -import {World, ConnectCallback, DisconnectCallback } from "../src/Model/World"; +import {GameRoom, ConnectCallback, DisconnectCallback } from "_Model/GameRoom"; import {Point} from "../src/Model/Websocket/MessageUserPosition"; import { Group } from "../src/Model/Group"; import {PositionNotifier} from "../src/Model/PositionNotifier"; diff --git a/back/tests/WorldTest.ts b/back/tests/WorldTest.ts index 8d3b1a2d..5ab421bb 100644 --- a/back/tests/WorldTest.ts +++ b/back/tests/WorldTest.ts @@ -1,5 +1,5 @@ import "jasmine"; -import {World, ConnectCallback, DisconnectCallback } from "../src/Model/World"; +import {GameRoom, ConnectCallback, DisconnectCallback } from "_Model/GameRoom"; import {Point} from "../src/Model/Websocket/MessageUserPosition"; import { Group } from "../src/Model/Group"; import {ExSocketInterface} from "_Model/Websocket/ExSocketInterface"; @@ -21,7 +21,7 @@ describe("World", () => { } - const world = new World(connect, disconnect, 160, 160, () => {}, () => {}, () => {}); + const world = new GameRoom(connect, disconnect, 160, 160, () => {}, () => {}, () => {}); world.join(createMockUser(1), new Point(100, 100)); @@ -48,7 +48,7 @@ describe("World", () => { } - const world = new World(connect, disconnect, 160, 160, () => {}, () => {}, () => {}); + const world = new GameRoom(connect, disconnect, 160, 160, () => {}, () => {}, () => {}); world.join(createMockUser(1), new Point(100, 100)); @@ -77,7 +77,7 @@ describe("World", () => { disconnectCallNumber++; } - const world = new World(connect, disconnect, 160, 160, () => {}, () => {}, () => {}); + const world = new GameRoom(connect, disconnect, 160, 160, () => {}, () => {}, () => {}); world.join(createMockUser(1), new Point(100, 100)); From f542b117a8686254a43841ffd7b33de6623a6f2f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20N=C3=A9grier?= Date: Tue, 6 Oct 2020 18:09:23 +0200 Subject: [PATCH 215/313] Refactoring connection to pass room info on connect --- back/src/Controller/IoSocketController.ts | 114 ++++++---- front/package.json | 2 +- front/src/Connexion/ConnectionManager.ts | 7 +- front/src/Connexion/ConnexionModels.ts | 1 + front/src/Connexion/RoomConnection.ts | 58 ++--- front/src/Phaser/Game/GameScene.ts | 255 +++++++++++----------- front/yarn.lock | 12 +- messages/messages.proto | 7 - 8 files changed, 239 insertions(+), 217 deletions(-) diff --git a/back/src/Controller/IoSocketController.ts b/back/src/Controller/IoSocketController.ts index 1591a5f1..943f949c 100644 --- a/back/src/Controller/IoSocketController.ts +++ b/back/src/Controller/IoSocketController.ts @@ -24,7 +24,6 @@ import { ItemEventMessage, ViewportMessage, ClientToServerMessage, - JoinRoomMessage, ErrorMessage, RoomJoinedMessage, ItemStateMessage, @@ -33,17 +32,17 @@ import { SilentMessage, WebRtcSignalToClientMessage, WebRtcSignalToServerMessage, - WebRtcStartMessage, - WebRtcDisconnectMessage, + WebRtcStartMessage, + WebRtcDisconnectMessage, PlayGlobalMessage, } from "../Messages/generated/messages_pb"; import {UserMovesMessage} from "../Messages/generated/messages_pb"; import Direction = PositionMessage.Direction; import {ProtobufUtils} from "../Model/Websocket/ProtobufUtils"; -import {HttpRequest, TemplatedApp} from "uWebSockets.js" +import {TemplatedApp} from "uWebSockets.js" import {parse} from "query-string"; import {cpuTracker} from "../Services/CpuTracker"; -import {adminApi} from "../Services/AdminApi"; +import {ViewportInterface} from "../Model/Websocket/ViewportMessage"; function emitInBatch(socket: ExSocketInterface, payload: SubMessage): void { socket.batchedMessages.addPayload(payload); @@ -95,7 +94,7 @@ export class IoSocketController { } private async getUserUuidFromToken(token: unknown): Promise { - + if (!token) { throw new Error('An authentication error happened, a user tried to connect without a token.'); } @@ -137,8 +136,7 @@ export class IoSocketController { } ioConnection() { - this.app.ws('/room', { - + this.app.ws('/room/*', { /* Options */ //compression: uWS.SHARED_COMPRESSOR, maxPayloadLength: 16 * 1024 * 1024, @@ -147,7 +145,6 @@ export class IoSocketController { upgrade: (res, req, context) => { //console.log('An Http connection wants to become WebSocket, URL: ' + req.getUrl() + '!'); (async () => { - /* Keep track of abortions */ const upgradeAborted = {aborted: false}; @@ -159,19 +156,32 @@ export class IoSocketController { try { const query = parse(req.getQuery()); - const moderated = query.moderated || false; - const roomId = query.roomId || null; + const roomId = req.getUrl().substr(6); + const token = query.token; + const x = Number(query.x); + const y = Number(query.y); + const top = Number(query.top); + const bottom = Number(query.bottom); + const left = Number(query.left); + const right = Number(query.right); + const name = query.name; + if (typeof name !== 'string') { + throw new Error('Expecting name'); + } + if (name === '') { + throw new Error('No empty name'); + } + let characterLayers = query.characterLayers; + if (characterLayers === null) { + throw new Error('Expecting skin'); + } + if (typeof characterLayers === 'string') { + characterLayers = [ characterLayers ]; + } const userUuid = await this.getUserUuidFromToken(token); - - this.handleJoinRoom(client, message.getJoinroommessage() as JoinRoomMessage); - - const isGranted = await adminApi.memberIsGrantedAccessToRoom(client.userUuid, roomId); - if (!isGranted) { - throw Error('Client cannot acces this ressource.'); - } if (upgradeAborted.aborted) { console.log("Ouch! Client disconnected before we could upgrade it!"); @@ -184,7 +194,22 @@ export class IoSocketController { // Data passed here is accessible on the "websocket" socket object. url: req.getUrl(), token, - userUuid + userUuid, + roomId, + name, + characterLayers, + position: { + x: x, + y: y, + direction: 'down', + moving: false + } as PointInterface, + viewport: { + top, + right, + bottom, + left + } }, /* Spell these correctly */ req.getHeader('sec-websocket-key'), @@ -217,12 +242,34 @@ export class IoSocketController { emitInBatch(client, payload); } client.disconnecting = false; + + client.name = ws.name; + client.characterLayers = ws.characterLayers; + client.roomId = ws.roomId; + this.sockets.set(client.userId, client); // Let's log server load when a user joins this.nbClientsGauge.inc(); console.log(new Date().toISOString() + ' A user joined (', this.sockets.size, ' connected users)'); + // Let's join the room + this.handleJoinRoom(client, client.roomId, client.position, client.viewport, client.name, client.characterLayers); + + /*const isGranted = await adminApi.memberIsGrantedAccessToRoom(client.userUuid, roomId); + if (!isGranted) { + throw Error('Client cannot acces this ressource.'); + }*/ + + const setUserIdMessage = new SetUserIdMessage(); + setUserIdMessage.setUserid(client.userId); + + const serverToClientMessage = new ServerToClientMessage(); + serverToClientMessage.setSetuseridmessage(setUserIdMessage); + + if (!client.disconnecting) { + client.send(serverToClientMessage.serializeBinary().buffer, true); + } }, message: (ws, arrayBuffer, isBinary): void => { const client = ws as ExSocketInterface; @@ -305,22 +352,12 @@ export class IoSocketController { console.warn(message); } - private async handleJoinRoom(client: ExSocketInterface, message: JoinRoomMessage): Promise { + private async handleJoinRoom(client: ExSocketInterface, roomId: string, position: PointInterface, viewport: ViewportInterface, name: string, characterLayers: string[]): Promise { try { - const roomId = message.getRoomid(); - - if (client.roomId === roomId) { - return; - } - - - //leave previous room - //this.leaveRoom(Client); // Useless now, there is only one room per connection - //join new previous room - const gameRoom = await this.joinRoom(client, roomId, ProtobufUtils.toPointInterface(message.getPosition() as PositionMessage)); + const gameRoom = await this.joinRoom(client, roomId, position); - const things = gameRoom.setViewport(client, (message.getViewport() as ViewportMessage).toObject()); + const things = gameRoom.setViewport(client, viewport); const roomJoinedMessage = new RoomJoinedMessage(); @@ -448,6 +485,7 @@ export class IoSocketController { } } + // Useless now, will be useful again if we allow editing details in game private handleSetPlayerDetails(client: ExSocketInterface, playerDetailsMessage: SetPlayerDetailsMessage) { const playerDetails = { name: playerDetailsMessage.getName(), @@ -461,16 +499,6 @@ export class IoSocketController { client.name = playerDetails.name; client.characterLayers = playerDetails.characterLayers; - - const setUserIdMessage = new SetUserIdMessage(); - setUserIdMessage.setUserid(client.userId); - - const serverToClientMessage = new ServerToClientMessage(); - serverToClientMessage.setSetuseridmessage(setUserIdMessage); - - if (!client.disconnecting) { - client.send(serverToClientMessage.serializeBinary().buffer, true); - } } private handleSilentMessage(client: ExSocketInterface, silentMessage: SilentMessage) { @@ -585,7 +613,7 @@ export class IoSocketController { } private joinRoom(client : ExSocketInterface, roomId: string, position: PointInterface): GameRoom { - + //join user in room this.nbClientsPerRoomGauge.inc({ room: roomId }); client.roomId = roomId; diff --git a/front/package.json b/front/package.json index c3b9f880..76e71f35 100644 --- a/front/package.json +++ b/front/package.json @@ -27,7 +27,7 @@ "google-protobuf": "^3.13.0", "phaser": "^3.22.0", "queue-typescript": "^1.0.1", - "quill": "1.3.6", + "quill": "^1.3.7", "simple-peer": "^9.6.2", "socket.io-client": "^2.3.0", "webpack-require-http": "^0.4.3" diff --git a/front/src/Connexion/ConnectionManager.ts b/front/src/Connexion/ConnectionManager.ts index 4df45099..217f9e8d 100644 --- a/front/src/Connexion/ConnectionManager.ts +++ b/front/src/Connexion/ConnectionManager.ts @@ -1,6 +1,7 @@ import Axios from "axios"; import {API_URL} from "../Enum/EnvironmentVariable"; import {RoomConnection} from "./RoomConnection"; +import {PositionInterface, ViewportInterface} from "./ConnexionModels"; interface LoginApiData { authToken: string @@ -35,9 +36,9 @@ class ConnectionManager { this.authToken = 'test'; } - public connectToRoomSocket(): Promise { + public connectToRoomSocket(roomId: string, name: string, characterLayers: string[], position: PositionInterface, viewport: ViewportInterface): Promise { return new Promise((resolve, reject) => { - const connection = new RoomConnection(this.authToken as string); + const connection = new RoomConnection(this.authToken as string, roomId, name, characterLayers, position, viewport); connection.onConnectError((error: object) => { console.log('An error occurred while connecting to socket server. Retrying'); reject(error); @@ -50,7 +51,7 @@ class ConnectionManager { return new Promise((resolve, reject) => { setTimeout(() => { //todo: allow a way to break recurrsion? - this.connectToRoomSocket().then((connection) => resolve(connection)); + this.connectToRoomSocket(roomId, name, characterLayers, position, viewport).then((connection) => resolve(connection)); }, 4000 + Math.floor(Math.random() * 2000) ); }); }); diff --git a/front/src/Connexion/ConnexionModels.ts b/front/src/Connexion/ConnexionModels.ts index 4ec76198..3df32331 100644 --- a/front/src/Connexion/ConnexionModels.ts +++ b/front/src/Connexion/ConnexionModels.ts @@ -6,6 +6,7 @@ export enum EventMessage{ WEBRTC_SIGNAL = "webrtc-signal", WEBRTC_SCREEN_SHARING_SIGNAL = "webrtc-screen-sharing-signal", WEBRTC_START = "webrtc-start", + START_ROOM = "start-room", // From server to client: list of all room users/groups/items JOIN_ROOM = "join-room", // bi-directional USER_POSITION = "user-position", // From client to server USER_MOVED = "user-moved", // From server to client diff --git a/front/src/Connexion/RoomConnection.ts b/front/src/Connexion/RoomConnection.ts index 3492f0f9..8799f977 100644 --- a/front/src/Connexion/RoomConnection.ts +++ b/front/src/Connexion/RoomConnection.ts @@ -6,7 +6,7 @@ import { GroupDeleteMessage, GroupUpdateMessage, ItemEventMessage, - JoinRoomMessage, PlayGlobalMessage, + PlayGlobalMessage, PositionMessage, RoomJoinedMessage, ServerToClientMessage, @@ -30,7 +30,7 @@ import {ProtobufClientUtils} from "../Network/ProtobufClientUtils"; import { EventMessage, GroupCreatedUpdatedMessageInterface, ItemEventMessageInterface, - MessageUserJoined, PlayGlobalMessageInterface, + MessageUserJoined, PlayGlobalMessageInterface, PositionInterface, RoomJoinedMessageInterface, ViewportInterface, WebRtcDisconnectMessageInterface, WebRtcSignalReceivedMessageInterface, @@ -48,9 +48,25 @@ export class RoomConnection implements RoomConnection { RoomConnection.websocketFactory = websocketFactory; } - public constructor(token: string) { + /** + * + * @param token A JWT token containing the UUID of the user + * @param roomId The ID of the room in the form "_/[instance]/[map_url]" or "@/[org]/[event]/[map]" + */ + public constructor(token: string, roomId: string, name: string, characterLayers: string[], position: PositionInterface, viewport: ViewportInterface) { let url = API_URL.replace('http://', 'ws://').replace('https://', 'wss://'); - url += '?token='+token; + url += '/room/'+roomId + url += '?token='+encodeURIComponent(token); + url += '&name='+encodeURIComponent(name); + for (let layer of characterLayers) { + url += '&characterLayers='+encodeURIComponent(layer); + } + url += '&x='+Math.floor(position.x); + url += '&y='+Math.floor(position.y); + url += '&top='+Math.floor(viewport.top); + url += '&bottom='+Math.floor(viewport.bottom); + url += '&left='+Math.floor(viewport.left); + url += '&right='+Math.floor(viewport.right); if (RoomConnection.websocketFactory) { this.socket = RoomConnection.websocketFactory(url); @@ -106,11 +122,11 @@ export class RoomConnection implements RoomConnection { items[item.getItemid()] = JSON.parse(item.getStatejson()); } - this.resolveJoinRoom({ + this.dispatch(EventMessage.START_ROOM, { users, groups, items - }) + }); } else if (message.hasSetuseridmessage()) { this.userId = (message.getSetuseridmessage() as SetUserIdMessage).getUserid(); } else if (message.hasErrormessage()) { @@ -159,29 +175,6 @@ export class RoomConnection implements RoomConnection { this.socket?.close(); } - private resolveJoinRoom!: (value?: (RoomJoinedMessageInterface | PromiseLike | undefined)) => void; - - public joinARoom(roomId: string, startX: number, startY: number, direction: string, moving: boolean, viewport: ViewportInterface): Promise { - const promise = new Promise((resolve, reject) => { - this.resolveJoinRoom = resolve; - - const positionMessage = this.toPositionMessage(startX, startY, direction, moving); - const viewportMessage = this.toViewportMessage(viewport); - - const joinRoomMessage = new JoinRoomMessage(); - joinRoomMessage.setRoomid(roomId); - joinRoomMessage.setPosition(positionMessage); - joinRoomMessage.setViewport(viewportMessage); - - //console.log('Sending position ', positionMessage.getX(), positionMessage.getY()); - const clientToServerMessage = new ClientToServerMessage(); - clientToServerMessage.setJoinroommessage(joinRoomMessage); - - this.socket.send(clientToServerMessage.serializeBinary().buffer); - }) - return promise; - } - private toPositionMessage(x : number, y : number, direction : string, moving: boolean): PositionMessage { const positionMessage = new PositionMessage(); positionMessage.setX(Math.floor(x)); @@ -337,6 +330,13 @@ export class RoomConnection implements RoomConnection { this.socket.addEventListener('open', callback) } + /** + * Triggered when we receive all the details of a room (users, groups, ...) + */ + public onStartRoom(callback: (event: RoomJoinedMessageInterface) => void): void { + this.onMessage(EventMessage.START_ROOM, callback); + } + public sendWebrtcSignal(signal: unknown, receiverId: number) { const webRtcSignal = new WebRtcSignalToServerMessage(); webRtcSignal.setReceiverid(receiverId); diff --git a/front/src/Phaser/Game/GameScene.ts b/front/src/Phaser/Game/GameScene.ts index bdaf3ac6..b3a5f104 100644 --- a/front/src/Phaser/Game/GameScene.ts +++ b/front/src/Phaser/Game/GameScene.ts @@ -107,7 +107,6 @@ export class GameScene extends Phaser.Scene implements CenterListener { private simplePeer!: SimplePeer; private GlobalMessageManager!: GlobalMessageManager; private ConsoleGlobalMessageManager!: ConsoleGlobalMessageManager; - private connectionPromise!: Promise private connectionAnswerPromise: Promise; private connectionAnswerPromiseResolve!: (value?: RoomJoinedMessageInterface | PromiseLike) => void; // A promise that will resolve when the "create" method is called (signaling loading is ended) @@ -206,106 +205,6 @@ export class GameScene extends Phaser.Scene implements CenterListener { loadAllLayers(this.load); this.load.bitmapFont('main_font', 'resources/fonts/arcade.png', 'resources/fonts/arcade.xml'); - - this.connectionPromise = connectionManager.connectToRoomSocket().then((connection : RoomConnection) => { - this.connection = connection; - - this.connection.emitPlayerDetailsMessage(gameManager.getPlayerName(), gameManager.getCharacterSelected()) - - connection.onUserJoins((message: MessageUserJoined) => { - const userMessage: AddPlayerInterface = { - userId: message.userId, - characterLayers: message.characterLayers, - name: message.name, - position: message.position - } - this.addPlayer(userMessage); - }); - - connection.onUserMoved((message: UserMovedMessage) => { - const position = message.getPosition(); - if (position === undefined) { - throw new Error('Position missing from UserMovedMessage'); - } - //console.log('Received position ', position.getX(), position.getY(), "from user", message.getUserid()); - - const messageUserMoved: MessageUserMovedInterface = { - userId: message.getUserid(), - position: ProtobufClientUtils.toPointInterface(position) - } - - this.updatePlayerPosition(messageUserMoved); - }); - - connection.onUserLeft((userId: number) => { - this.removePlayer(userId); - }); - - connection.onGroupUpdatedOrCreated((groupPositionMessage: GroupCreatedUpdatedMessageInterface) => { - this.shareGroupPosition(groupPositionMessage); - }) - - connection.onGroupDeleted((groupId: number) => { - try { - this.deleteGroup(groupId); - } catch (e) { - console.error(e); - } - }) - - connection.onServerDisconnected(() => { - console.log('Player disconnected from server. Reloading scene.'); - - this.simplePeer.closeAllConnections(); - this.simplePeer.unregister(); - - const key = 'somekey'+Math.round(Math.random()*10000); - const game : Phaser.Scene = GameScene.createFromUrl(this.MapUrlFile, this.instance, key); - this.scene.add(key, game, true, - { - initPosition: { - x: this.CurrentPlayer.x, - y: this.CurrentPlayer.y - } - }); - - this.scene.stop(this.scene.key); - this.scene.remove(this.scene.key); - window.removeEventListener('resize', this.onResizeCallback); - }) - - connection.onActionableEvent((message => { - const item = this.actionableItems.get(message.itemId); - if (item === undefined) { - console.warn('Received an event about object "'+message.itemId+'" but cannot find this item on the map.'); - return; - } - item.fire(message.event, message.state, message.parameters); - })); - - // When connection is performed, let's connect SimplePeer - this.simplePeer = new SimplePeer(this.connection); - this.GlobalMessageManager = new GlobalMessageManager(this.connection); - - const self = this; - this.simplePeer.registerPeerConnectionListener({ - onConnect(user: UserSimplePeerInterface) { - self.presentationModeSprite.setVisible(true); - self.chatModeSprite.setVisible(true); - }, - onDisconnect(userId: number) { - if (self.simplePeer.getNbConnections() === 0) { - self.presentationModeSprite.setVisible(false); - self.chatModeSprite.setVisible(false); - } - } - }) - - this.scene.wake(); - this.scene.sleep(ReconnectingSceneName); - - return connection; - }); } // FIXME: we need to put a "unknown" instead of a "any" and validate the structure of the JSON we are receiving. @@ -617,6 +516,133 @@ export class GameScene extends Phaser.Scene implements CenterListener { this.connection.setSilent(true); } }); + + const camera = this.cameras.main; + + connectionManager.connectToRoomSocket( + this.RoomId, + gameManager.getPlayerName(), + gameManager.getCharacterSelected(), + { + x: this.startX, + y: this.startY + }, + { + left: camera.scrollX, + top: camera.scrollY, + right: camera.scrollX + camera.width, + bottom: camera.scrollY + camera.height, + }).then((connection : RoomConnection) => { + this.connection = connection; + + //this.connection.emitPlayerDetailsMessage(gameManager.getPlayerName(), gameManager.getCharacterSelected()) + connection.onStartRoom((roomJoinedMessage: RoomJoinedMessageInterface) => { + this.initUsersPosition(roomJoinedMessage.users); + this.connectionAnswerPromiseResolve(roomJoinedMessage); + }); + + connection.onUserJoins((message: MessageUserJoined) => { + const userMessage: AddPlayerInterface = { + userId: message.userId, + characterLayers: message.characterLayers, + name: message.name, + position: message.position + } + this.addPlayer(userMessage); + }); + + connection.onUserMoved((message: UserMovedMessage) => { + const position = message.getPosition(); + if (position === undefined) { + throw new Error('Position missing from UserMovedMessage'); + } + //console.log('Received position ', position.getX(), position.getY(), "from user", message.getUserid()); + + const messageUserMoved: MessageUserMovedInterface = { + userId: message.getUserid(), + position: ProtobufClientUtils.toPointInterface(position) + } + + this.updatePlayerPosition(messageUserMoved); + }); + + connection.onUserLeft((userId: number) => { + this.removePlayer(userId); + }); + + connection.onGroupUpdatedOrCreated((groupPositionMessage: GroupCreatedUpdatedMessageInterface) => { + this.shareGroupPosition(groupPositionMessage); + }) + + connection.onGroupDeleted((groupId: number) => { + try { + this.deleteGroup(groupId); + } catch (e) { + console.error(e); + } + }) + + connection.onServerDisconnected(() => { + console.log('Player disconnected from server. Reloading scene.'); + + this.simplePeer.closeAllConnections(); + this.simplePeer.unregister(); + + const key = 'somekey'+Math.round(Math.random()*10000); + const game : Phaser.Scene = GameScene.createFromUrl(this.MapUrlFile, this.instance, key); + this.scene.add(key, game, true, + { + initPosition: { + x: this.CurrentPlayer.x, + y: this.CurrentPlayer.y + } + }); + + this.scene.stop(this.scene.key); + this.scene.remove(this.scene.key); + window.removeEventListener('resize', this.onResizeCallback); + }) + + connection.onActionableEvent((message => { + const item = this.actionableItems.get(message.itemId); + if (item === undefined) { + console.warn('Received an event about object "'+message.itemId+'" but cannot find this item on the map.'); + return; + } + item.fire(message.event, message.state, message.parameters); + })); + + // When connection is performed, let's connect SimplePeer + this.simplePeer = new SimplePeer(this.connection); + this.GlobalMessageManager = new GlobalMessageManager(this.connection); + + const self = this; + this.simplePeer.registerPeerConnectionListener({ + onConnect(user: UserSimplePeerInterface) { + self.presentationModeSprite.setVisible(true); + self.chatModeSprite.setVisible(true); + }, + onDisconnect(userId: number) { + if (self.simplePeer.getNbConnections() === 0) { + self.presentationModeSprite.setVisible(false); + self.chatModeSprite.setVisible(false); + } + } + }) + + //listen event to share position of user + this.CurrentPlayer.on(hasMovedEventName, this.pushPlayerPosition.bind(this)) + this.CurrentPlayer.on(hasMovedEventName, this.outlineItem.bind(this)) + this.CurrentPlayer.on(hasMovedEventName, (event: HasMovedEvent) => { + this.gameMap.setPosition(event.x, event.y); + }) + + + this.scene.wake(); + this.scene.sleep(ReconnectingSceneName); + + return connection; + }); } private switchLayoutMode(): void { @@ -787,32 +813,6 @@ export class GameScene extends Phaser.Scene implements CenterListener { //create collision this.createCollisionWithPlayer(); this.createCollisionObject(); - - //join room - this.connectionPromise.then((connection: RoomConnection) => { - const camera = this.cameras.main; - connection.joinARoom(this.RoomId, - this.startX, - this.startY, - PlayerAnimationNames.WalkDown, - false, { - left: camera.scrollX, - top: camera.scrollY, - right: camera.scrollX + camera.width, - bottom: camera.scrollY + camera.height, - }).then((roomJoinedMessage: RoomJoinedMessageInterface) => { - this.initUsersPosition(roomJoinedMessage.users); - this.connectionAnswerPromiseResolve(roomJoinedMessage); - }); - // FIXME: weirdly enough we don't use the result of joinARoom !!!!!! - - //listen event to share position of user - this.CurrentPlayer.on(hasMovedEventName, this.pushPlayerPosition.bind(this)) - this.CurrentPlayer.on(hasMovedEventName, this.outlineItem.bind(this)) - this.CurrentPlayer.on(hasMovedEventName, (event: HasMovedEvent) => { - this.gameMap.setPosition(event.x, event.y); - }) - }); } pushPlayerPosition(event: HasMovedEvent) { @@ -983,7 +983,6 @@ export class GameScene extends Phaser.Scene implements CenterListener { type: "InitUserPositionEvent", event: usersPosition }); - } /** diff --git a/front/yarn.lock b/front/yarn.lock index c014d18d..5d235a82 100644 --- a/front/yarn.lock +++ b/front/yarn.lock @@ -1893,7 +1893,7 @@ extend-shallow@^3.0.0, extend-shallow@^3.0.2: assign-symbols "^1.0.0" is-extendable "^1.0.1" -extend@^3.0.1, extend@^3.0.2: +extend@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== @@ -3871,15 +3871,15 @@ quill-delta@^3.6.2: extend "^3.0.2" fast-diff "1.1.2" -quill@1.3.6: - version "1.3.6" - resolved "https://registry.yarnpkg.com/quill/-/quill-1.3.6.tgz#99f4de1fee85925a0d7d4163b6d8328f23317a4d" - integrity sha512-K0mvhimWZN6s+9OQ249CH2IEPZ9JmkFuCQeHAOQax3EZ2nDJ3wfGh59mnlQaZV2i7u8eFarx6wAtvQKgShojug== +quill@^1.3.7: + version "1.3.7" + resolved "https://registry.yarnpkg.com/quill/-/quill-1.3.7.tgz#da5b2f3a2c470e932340cdbf3668c9f21f9286e8" + integrity sha512-hG/DVzh/TiknWtE6QmWAF/pxoZKYxfe3J/d/+ShUWkDvvkZQVTPeVmUJVu1uE6DDooC4fWTiCLh84ul89oNz5g== dependencies: clone "^2.1.1" deep-equal "^1.0.1" eventemitter3 "^2.0.3" - extend "^3.0.1" + extend "^3.0.2" parchment "^1.1.4" quill-delta "^3.6.2" diff --git a/messages/messages.proto b/messages/messages.proto index 87cf2231..63c3ddaf 100644 --- a/messages/messages.proto +++ b/messages/messages.proto @@ -38,12 +38,6 @@ message SetPlayerDetailsMessage { repeated string characterLayers = 2; } -message JoinRoomMessage { - string roomId = 1; - PositionMessage position = 2; - ViewportMessage viewport = 3; -} - message UserMovesMessage { PositionMessage position = 1; ViewportMessage viewport = 2; @@ -56,7 +50,6 @@ message WebRtcSignalToServerMessage { message ClientToServerMessage { oneof message { - JoinRoomMessage joinRoomMessage = 1; UserMovesMessage userMovesMessage = 2; SilentMessage silentMessage = 3; ViewportMessage viewportMessage = 4; From c63fb6ed6fc59756fadbc571ee137eb5528fbec1 Mon Sep 17 00:00:00 2001 From: Gregoire Parant Date: Tue, 6 Oct 2020 23:56:27 +0200 Subject: [PATCH 216/313] Add image to report and to teleport player --- front/dist/resources/objects/report_flag.png | Bin 0 -> 447 bytes .../dist/resources/objects/teleportation.png | Bin 0 -> 555 bytes front/src/Phaser/Entity/Character.ts | 29 ++++++++++++++++++ front/src/Phaser/Entity/body_character.ts | 27 ++++++++++++++++ front/src/Phaser/Game/GameScene.ts | 19 ++---------- 5 files changed, 59 insertions(+), 16 deletions(-) create mode 100644 front/dist/resources/objects/report_flag.png create mode 100644 front/dist/resources/objects/teleportation.png diff --git a/front/dist/resources/objects/report_flag.png b/front/dist/resources/objects/report_flag.png new file mode 100644 index 0000000000000000000000000000000000000000..57b99126dd322fc798db9765fa10dfdd2195eb9d GIT binary patch literal 447 zcmV;w0YLtVP)amQ`_F&}{9*Y0jS*xDGAQ$%bc^@RcU8sb$MET8c=wBoVZrmC^I5P- z^0EG4uo8QKQ}d6%EDTN8RZm`G*pkJB*BUGU z%O7@zm*06A_I!N3`1}7)FF?wOHb9=|1DMtpc*(%bq*x}wsCMYZ|64n;dg1L)ZidZ| zwHU5`5N9~_Qjy`yZ#EQpJF)vLIif}@_!z}Cu)5&ezki>efBSj+$~PV`|L6x<3^o7$ z|7K8Tu*k=1!1KRv&Mf`7&Y2jmksJ$y+yFDK;29sE{FY$(#;2pl?%qnY0c?z%{6_44 zQ#53Z;{_GDc_p<(#5Bas)AU)rdYKtnQR5H|Fe)=x=14GThN@Yp*s=1WhUt&je;ICF pxVH5f!?l$U|DRiop__q$0Ra6sqZ;yv3L^jj002ovPDHLkV1hgX*C7A^ literal 0 HcmV?d00001 diff --git a/front/dist/resources/objects/teleportation.png b/front/dist/resources/objects/teleportation.png new file mode 100644 index 0000000000000000000000000000000000000000..e13826f9ae2b2c095008601ef503ee1161ce4e49 GIT binary patch literal 555 zcmV+`0@VG9P)JF|xzXlxY<5lU$r8cgr3H$_G8wvQlU zuPXF`3iYb`4ql6R(S)iG5L!Gm7(B$(cC*>@$R^DuO`7~+mibPq$GTGnViUC+Z0 z1EMJ6aDRX2)6voE#IFw$e4$4TV;(dhVY-YdgQq0}9Q1GyO93t0Is13}E~bbn&v~5M zCi6x_H--~ivYhv+wJf?qaCXuCKByDpeV#7bv^+_r;PNL>{PYy1IhU`F!Ivw)nx1PV_FY_RmC!;Bvt}z|Z4isTv6GwttLm)4*J%3aX++XdW%b34`H68HV zhw5dPZmbdd0{2HhSm7 zht2v*e!WOOSMw=K0io($;Nj8=Cg#Rc-!R7yZ>SWoSzg=TaK7B!ZS-9zSSYV<10Svd tDy5Z2_e>8>o3Y-cUMW;*<#Epd{sUbnu8Sxqu5|za002ovPDHLkV1f$k^0xp0 literal 0 HcmV?d00001 diff --git a/front/src/Phaser/Entity/Character.ts b/front/src/Phaser/Entity/Character.ts index 6edb0e36..74a4d99d 100644 --- a/front/src/Phaser/Entity/Character.ts +++ b/front/src/Phaser/Entity/Character.ts @@ -46,6 +46,8 @@ export abstract class Character extends Container { public PlayerValue: string; public sprites: Map; private lastDirection: string = PlayerAnimationNames.WalkDown; + private report: Sprite; + private teleportation: Sprite; constructor(scene: Phaser.Scene, x: number, @@ -62,6 +64,15 @@ export abstract class Character extends Container { for (const texture of textures) { const sprite = new Sprite(scene, 0, 0, texture, frame); + sprite.setInteractive({useHandCursor: true}); + sprite.on('pointerover', () => { + this.report.visible = true; + this.teleportation.visible = true; + }); + sprite.on('pointerup', () => { + this.report.visible = true; + this.teleportation.visible = true; + }); this.add(sprite); this.getPlayerAnimations(texture).forEach(d => { this.scene.anims.create({ @@ -76,6 +87,24 @@ export abstract class Character extends Container { this.sprites.set(texture, sprite); } + this.report = new Sprite(scene, 20, -10, 'report_flag', 3); + this.report.setInteractive(); + this.report.visible = false; + this.report.on('pointerup', () => { + this.report.visible = false; + this.teleportation.visible = false; + }); + this.add(this.report); + + this.teleportation = new Sprite(scene, -20, -10, 'teleportation', 3); + this.teleportation.setInteractive(); + this.teleportation.visible = false; + this.teleportation.on('pointerup', () => { + this.report.visible = false; + this.teleportation.visible = false; + }); + this.add(this.teleportation); + this.PlayerValue = name; this.playerName = new BitmapText(scene, x, y - 25, 'main_font', name, 8); this.playerName.setOrigin(0.5).setCenterAlign().setDepth(99999); diff --git a/front/src/Phaser/Entity/body_character.ts b/front/src/Phaser/Entity/body_character.ts index 3d9d5a5f..50f1eea6 100644 --- a/front/src/Phaser/Entity/body_character.ts +++ b/front/src/Phaser/Entity/body_character.ts @@ -1,4 +1,5 @@ import LoaderPlugin = Phaser.Loader.LoaderPlugin; +import {PLAYER_RESOURCES, PlayerResourceDescriptionInterface} from "./Character"; export interface BodyResourceDescriptionInterface { name: string, @@ -310,3 +311,29 @@ export const loadAllLayers = (load: LoaderPlugin) => { } } } + +export const OBJECTS: Array = [ + {name:'report_flag', img:'resources/objects/report_flag.png'}, + {name:'layout_modes', img:'resources/objects/layout_modes.png'}, + {name:'teleportation', img:'resources/objects/teleportation.png'}, +]; + +export const loadObject = (load: LoaderPlugin) => { + for (let j = 0; j < OBJECTS.length; j++) { + load.spritesheet( + OBJECTS[j].name, + OBJECTS[j].img, + {frameWidth: 32, frameHeight: 32} + ) + } +} + +export const loadPlayerCharacters = (load: LoaderPlugin) => { + PLAYER_RESOURCES.forEach((playerResource: PlayerResourceDescriptionInterface) => { + load.spritesheet( + playerResource.name, + playerResource.img, + {frameWidth: 32, frameHeight: 32} + ); + }); +} diff --git a/front/src/Phaser/Game/GameScene.ts b/front/src/Phaser/Game/GameScene.ts index 608d920b..ed98d9b9 100644 --- a/front/src/Phaser/Game/GameScene.ts +++ b/front/src/Phaser/Game/GameScene.ts @@ -16,7 +16,6 @@ import { ITiledMapLayerProperty, ITiledMapObject, ITiledTileSet } from "../Map/ITiledMap"; -import {PLAYER_RESOURCES, PlayerResourceDescriptionInterface} from "../Entity/Character"; import {AddPlayerInterface} from "./AddPlayerInterface"; import {PlayerAnimationNames} from "../Player/Animation"; import {PlayerMovement} from "./PlayerMovement"; @@ -25,7 +24,7 @@ import {RemotePlayer} from "../Entity/RemotePlayer"; import {Queue} from 'queue-typescript'; import {SimplePeer, UserSimplePeerInterface} from "../../WebRtc/SimplePeer"; import {ReconnectingSceneName} from "../Reconnecting/ReconnectingScene"; -import {loadAllLayers} from "../Entity/body_character"; +import {loadAllLayers, loadObject, loadPlayerCharacters} from "../Entity/body_character"; import {CenterListener, layoutManager, LayoutMode} from "../../WebRtc/LayoutManager"; import Texture = Phaser.Textures.Texture; import Sprite = Phaser.GameObjects.Sprite; @@ -189,21 +188,9 @@ export class GameScene extends Phaser.Scene implements CenterListener { } //add player png - PLAYER_RESOURCES.forEach((playerResource: PlayerResourceDescriptionInterface) => { - this.load.spritesheet( - playerResource.name, - playerResource.img, - {frameWidth: 32, frameHeight: 32} - ); - }); - - this.load.spritesheet( - 'layout_modes', - 'resources/objects/layout_modes.png', - {frameWidth: 32, frameHeight: 32} - ); - + loadPlayerCharacters(this.load); loadAllLayers(this.load); + loadObject(this.load); this.load.bitmapFont('main_font', 'resources/fonts/arcade.png', 'resources/fonts/arcade.xml'); From 79b5c5de93cd5e9e3d47da2403dd29638514b5ed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20N=C3=A9grier?= Date: Wed, 7 Oct 2020 18:03:34 +0200 Subject: [PATCH 217/313] Making login scene responsive --- front/src/Phaser/Components/TextInput.ts | 12 ++++++++++++ front/src/Phaser/Login/LoginScene.ts | 23 +++++++++++++++++------ front/src/Phaser/Login/ResizableScene.ts | 5 +++++ front/src/index.ts | 8 ++++++++ 4 files changed, 42 insertions(+), 6 deletions(-) create mode 100644 front/src/Phaser/Login/ResizableScene.ts diff --git a/front/src/Phaser/Components/TextInput.ts b/front/src/Phaser/Components/TextInput.ts index 7a549d1f..47f713e0 100644 --- a/front/src/Phaser/Components/TextInput.ts +++ b/front/src/Phaser/Components/TextInput.ts @@ -38,4 +38,16 @@ export class TextInput extends Phaser.GameObjects.BitmapText { getText(): string { return this.text; } + + setX(x: number): this { + super.setX(x); + this.underLine.x = x; + return this; + } + + setY(y: number): this { + super.setY(y); + this.underLine.y = y+1; + return this; + } } diff --git a/front/src/Phaser/Login/LoginScene.ts b/front/src/Phaser/Login/LoginScene.ts index 308ba3ae..6e6bf291 100644 --- a/front/src/Phaser/Login/LoginScene.ts +++ b/front/src/Phaser/Login/LoginScene.ts @@ -7,6 +7,7 @@ import Rectangle = Phaser.GameObjects.Rectangle; import {PLAYER_RESOURCES, PlayerResourceDescriptionInterface} from "../Entity/Character"; import {cypressAsserter} from "../../Cypress/CypressAsserter"; import {SelectCharacterSceneName} from "./SelectCharacterScene"; +import {ResizableScene} from "./ResizableScene"; //todo: put this constants in a dedicated file export const LoginSceneName = "LoginScene"; @@ -15,12 +16,12 @@ enum LoginTextures { mainFont = "main_font" } -export class LoginScene extends Phaser.Scene { - private nameInput: TextInput|null = null; - private textField: TextField|null = null; - private infoTextField: TextField|null = null; - private pressReturnField: TextField|null = null; - private logo: Image|null = null; +export class LoginScene extends ResizableScene { + private nameInput!: TextInput; + private textField!: TextField; + private infoTextField!: TextField; + private pressReturnField!: TextField; + private logo!: Image; private name: string = ''; constructor() { @@ -93,4 +94,14 @@ export class LoginScene extends Phaser.Scene { this.scene.start(SelectCharacterSceneName); } + + public onResize(ev: UIEvent): void { + this.textField.x = this.game.renderer.width / 2; + this.nameInput.setX(this.game.renderer.width / 2 - 64); + this.pressReturnField.x = this.game.renderer.width / 2; + this.logo.x = this.game.renderer.width - 30; + this.logo.y = this.game.renderer.height - 20; + this.infoTextField.y = this.game.renderer.height - 35; + } + } diff --git a/front/src/Phaser/Login/ResizableScene.ts b/front/src/Phaser/Login/ResizableScene.ts new file mode 100644 index 00000000..82123e2b --- /dev/null +++ b/front/src/Phaser/Login/ResizableScene.ts @@ -0,0 +1,5 @@ +import {Scene} from "phaser"; + +export abstract class ResizableScene extends Scene { + public abstract onResize(ev: UIEvent): void; +} diff --git a/front/src/index.ts b/front/src/index.ts index 8e235c7a..177c56c0 100644 --- a/front/src/index.ts +++ b/front/src/index.ts @@ -12,6 +12,7 @@ import {OutlinePipeline} from "./Phaser/Shaders/OutlinePipeline"; import {CustomizeScene} from "./Phaser/Login/CustomizeScene"; import {CoWebsiteManager} from "./WebRtc/CoWebsiteManager"; import {connectionManager} from "./Connexion/ConnectionManager"; +import {ResizableScene} from "./Phaser/Login/ResizableScene"; //CoWebsiteManager.loadCoWebsite('https://thecodingmachine.com'); connectionManager.init(); @@ -55,6 +56,13 @@ window.addEventListener('resize', function (event) { const {width, height} = CoWebsiteManager.getGameSize(); game.scale.resize(width / RESOLUTION, height / RESOLUTION); + + // Let's trigger the onResize method of any active scene that is a ResizableScene + for (const scene of game.scene.getScenes(true)) { + if (scene instanceof ResizableScene) { + scene.onResize(event); + } + } }); CoWebsiteManager.onStateChange(() => { const {width, height} = CoWebsiteManager.getGameSize(); From 5ac208399507c63499f1fdfde101c6e3f9831872 Mon Sep 17 00:00:00 2001 From: arp Date: Thu, 8 Oct 2020 11:48:49 +0200 Subject: [PATCH 218/313] updated quill in front to 1.3.7 --- front/package.json | 2 +- front/yarn.lock | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/front/package.json b/front/package.json index c3b9f880..4892eba1 100644 --- a/front/package.json +++ b/front/package.json @@ -27,7 +27,7 @@ "google-protobuf": "^3.13.0", "phaser": "^3.22.0", "queue-typescript": "^1.0.1", - "quill": "1.3.6", + "quill": "1.3.7", "simple-peer": "^9.6.2", "socket.io-client": "^2.3.0", "webpack-require-http": "^0.4.3" diff --git a/front/yarn.lock b/front/yarn.lock index c014d18d..933a02b4 100644 --- a/front/yarn.lock +++ b/front/yarn.lock @@ -1893,7 +1893,7 @@ extend-shallow@^3.0.0, extend-shallow@^3.0.2: assign-symbols "^1.0.0" is-extendable "^1.0.1" -extend@^3.0.1, extend@^3.0.2: +extend@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== @@ -3871,15 +3871,15 @@ quill-delta@^3.6.2: extend "^3.0.2" fast-diff "1.1.2" -quill@1.3.6: - version "1.3.6" - resolved "https://registry.yarnpkg.com/quill/-/quill-1.3.6.tgz#99f4de1fee85925a0d7d4163b6d8328f23317a4d" - integrity sha512-K0mvhimWZN6s+9OQ249CH2IEPZ9JmkFuCQeHAOQax3EZ2nDJ3wfGh59mnlQaZV2i7u8eFarx6wAtvQKgShojug== +quill@1.3.7: + version "1.3.7" + resolved "https://registry.yarnpkg.com/quill/-/quill-1.3.7.tgz#da5b2f3a2c470e932340cdbf3668c9f21f9286e8" + integrity sha512-hG/DVzh/TiknWtE6QmWAF/pxoZKYxfe3J/d/+ShUWkDvvkZQVTPeVmUJVu1uE6DDooC4fWTiCLh84ul89oNz5g== dependencies: clone "^2.1.1" deep-equal "^1.0.1" eventemitter3 "^2.0.3" - extend "^3.0.1" + extend "^3.0.2" parchment "^1.1.4" quill-delta "^3.6.2" From 78e7f481d559207046b7aa07ec0984557cb4c45c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 8 Oct 2020 10:04:29 +0000 Subject: [PATCH 219/313] Bump elliptic from 6.4.1 to 6.5.3 in /website Bumps [elliptic](https://github.com/indutny/elliptic) from 6.4.1 to 6.5.3. - [Release notes](https://github.com/indutny/elliptic/releases) - [Commits](https://github.com/indutny/elliptic/compare/v6.4.1...v6.5.3) Signed-off-by: dependabot[bot] --- website/package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/website/package-lock.json b/website/package-lock.json index 96ba750a..aec58f00 100644 --- a/website/package-lock.json +++ b/website/package-lock.json @@ -2287,9 +2287,9 @@ "dev": true }, "elliptic": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.1.tgz", - "integrity": "sha512-BsXLz5sqX8OHcsh7CqBMztyXARmGQ3LWPtGjJi6DiJHq5C/qvi9P3OqgswKSDftbu8+IoI/QDTAm2fFnQ9SZSQ==", + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.3.tgz", + "integrity": "sha512-IMqzv5wNQf+E6aHeIqATs0tOLeOTwj1QKbRcS3jBbYkl5oLAserA8yJTT7/VyHUYG91PRmPyeQDObKLPpeS4dw==", "dev": true, "requires": { "bn.js": "^4.4.0", From 607b495644d054460efe592a8918fb0a7cfaf94c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 8 Oct 2020 10:04:31 +0000 Subject: [PATCH 220/313] Bump lodash from 4.17.15 to 4.17.20 in /website Bumps [lodash](https://github.com/lodash/lodash) from 4.17.15 to 4.17.20. - [Release notes](https://github.com/lodash/lodash/releases) - [Commits](https://github.com/lodash/lodash/compare/4.17.15...4.17.20) Signed-off-by: dependabot[bot] --- website/package-lock.json | 18 +++--------------- 1 file changed, 3 insertions(+), 15 deletions(-) diff --git a/website/package-lock.json b/website/package-lock.json index 96ba750a..5d2a4c71 100644 --- a/website/package-lock.json +++ b/website/package-lock.json @@ -3487,13 +3487,6 @@ "glob": "~7.1.1", "lodash": "~4.17.12", "minimatch": "~3.0.2" - }, - "dependencies": { - "lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==" - } } }, "graceful-fs": { @@ -4234,9 +4227,9 @@ } }, "lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==" + "version": "4.17.20", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", + "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==" }, "lodash.get": { "version": "4.4.2", @@ -4721,11 +4714,6 @@ "which": "^1.2.9" } }, - "lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==" - }, "lru-cache": { "version": "4.1.5", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", From 66f33458617a99a51848731f4cd7695beb535a9a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20N=C3=A9grier?= Date: Thu, 8 Oct 2020 15:10:46 +0200 Subject: [PATCH 221/313] Adding responsive to SelectCharacterScene --- .../src/Phaser/Login/SelectCharacterScene.ts | 24 ++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/front/src/Phaser/Login/SelectCharacterScene.ts b/front/src/Phaser/Login/SelectCharacterScene.ts index 8d3c7ab1..71b433b3 100644 --- a/front/src/Phaser/Login/SelectCharacterScene.ts +++ b/front/src/Phaser/Login/SelectCharacterScene.ts @@ -5,6 +5,7 @@ import Rectangle = Phaser.GameObjects.Rectangle; import {PLAYER_RESOURCES, PlayerResourceDescriptionInterface} from "../Entity/Character"; import {EnableCameraSceneName} from "./EnableCameraScene"; import {CustomizeSceneName} from "./CustomizeScene"; +import {ResizableScene} from "./ResizableScene"; //todo: put this constants in a dedicated file @@ -17,7 +18,7 @@ enum LoginTextures { customizeButtonSelected = "customize_button_selected" } -export class SelectCharacterScene extends Phaser.Scene { +export class SelectCharacterScene extends ResizableScene { private readonly nbCharactersPerRow = 4; private textField!: TextField; private pressReturnField!: TextField; @@ -242,4 +243,25 @@ export class SelectCharacterScene extends Phaser.Scene { window.localStorage.setItem('selectedPlayer', String(playerNumber)); } } + + public onResize(ev: UIEvent): void { + this.textField.x = this.game.renderer.width / 2; + this.pressReturnField.x = this.game.renderer.width / 2; + this.logo.x = this.game.renderer.width - 30; + this.logo.y = this.game.renderer.height - 20; + this.customizeButton.x = this.game.renderer.width / 2; + + for (let i = 0; i Date: Thu, 8 Oct 2020 16:00:29 +0200 Subject: [PATCH 222/313] Switching customizeScene and gameScene to new ResizableScene --- front/src/Phaser/Game/GameScene.ts | 10 +++------- front/src/Phaser/Login/CustomizeScene.ts | 11 +++-------- front/src/Phaser/Login/SelectCharacterScene.ts | 1 + 3 files changed, 7 insertions(+), 15 deletions(-) diff --git a/front/src/Phaser/Game/GameScene.ts b/front/src/Phaser/Game/GameScene.ts index 608d920b..f3381d5f 100644 --- a/front/src/Phaser/Game/GameScene.ts +++ b/front/src/Phaser/Game/GameScene.ts @@ -45,6 +45,7 @@ import {connectionManager} from "../../Connexion/ConnectionManager"; import {RoomConnection} from "../../Connexion/RoomConnection"; import {GlobalMessageManager} from "../../Administration/GlobalMessageManager"; import {ConsoleGlobalMessageManager} from "../../Administration/ConsoleGlobalMessageManager"; +import {ResizableScene} from "../Login/ResizableScene"; export enum Textures { @@ -86,7 +87,7 @@ interface DeleteGroupEventInterface { groupId: number } -export class GameScene extends Phaser.Scene implements CenterListener { +export class GameScene extends ResizableScene implements CenterListener { GameManager : GameManager; Terrains : Array; CurrentPlayer!: CurrentGamerInterface; @@ -132,7 +133,6 @@ export class GameScene extends Phaser.Scene implements CenterListener { private startLayerName: string|undefined; private presentationModeSprite!: Sprite; private chatModeSprite!: Sprite; - private onResizeCallback!: (this: Window, ev: UIEvent) => void; private gameMap!: GameMap; private actionableItems: Map = new Map(); // The item that can be selected by pressing the space key. @@ -271,7 +271,6 @@ export class GameScene extends Phaser.Scene implements CenterListener { this.scene.stop(this.scene.key); this.scene.remove(this.scene.key); - window.removeEventListener('resize', this.onResizeCallback); }) connection.onActionableEvent((message => { @@ -565,8 +564,6 @@ export class GameScene extends Phaser.Scene implements CenterListener { this.switchLayoutMode(); }); - this.onResizeCallback = this.onResize.bind(this); - window.addEventListener('resize', this.onResizeCallback); this.reposition(); // From now, this game scene will be notified of reposition events @@ -957,7 +954,6 @@ export class GameScene extends Phaser.Scene implements CenterListener { this.simplePeer.unregister(); this.scene.stop(); this.scene.remove(this.scene.key); - window.removeEventListener('resize', this.onResizeCallback); this.scene.start(nextSceneKey.key, { startLayerName: nextSceneKey.hash }); @@ -1156,7 +1152,7 @@ export class GameScene extends Phaser.Scene implements CenterListener { this.connection.emitActionableEvent(itemId, eventName, state, parameters); } - private onResize(): void { + public onResize(): void { this.reposition(); // Send new viewport to server diff --git a/front/src/Phaser/Login/CustomizeScene.ts b/front/src/Phaser/Login/CustomizeScene.ts index 50834bd1..4ada5026 100644 --- a/front/src/Phaser/Login/CustomizeScene.ts +++ b/front/src/Phaser/Login/CustomizeScene.ts @@ -6,6 +6,7 @@ import {LAYERS, loadAllLayers} from "../Entity/body_character"; import Sprite = Phaser.GameObjects.Sprite; import Container = Phaser.GameObjects.Container; import {gameManager} from "../Game/GameManager"; +import {ResizableScene} from "./ResizableScene"; export const CustomizeSceneName = "CustomizeScene"; @@ -16,7 +17,7 @@ enum CustomizeTextures{ arrowUp = "arrow_up", } -export class CustomizeScene extends Phaser.Scene { +export class CustomizeScene extends ResizableScene { private textField!: TextField; private enterField!: TextField; @@ -35,8 +36,6 @@ export class CustomizeScene extends Phaser.Scene { private containersRow: Array> = new Array>(); private activeRow = 0; - private repositionCallback!: (this: Window, ev: UIEvent) => void; - constructor() { super({ key: CustomizeSceneName @@ -144,10 +143,6 @@ export class CustomizeScene extends Phaser.Scene { this.moveLayers(); } }); - - this.repositionCallback = this.reposition.bind(this); - window.addEventListener('resize', this.repositionCallback); - } update(time: number, delta: number): void { super.update(time, delta); @@ -249,7 +244,7 @@ export class CustomizeScene extends Phaser.Scene { } } - private reposition() { + public onResize(): void { this.moveLayers(); this.Rectangle.x = this.cameras.main.worldView.x + this.cameras.main.width / 2; diff --git a/front/src/Phaser/Login/SelectCharacterScene.ts b/front/src/Phaser/Login/SelectCharacterScene.ts index 71b433b3..e5df0a0d 100644 --- a/front/src/Phaser/Login/SelectCharacterScene.ts +++ b/front/src/Phaser/Login/SelectCharacterScene.ts @@ -250,6 +250,7 @@ export class SelectCharacterScene extends ResizableScene { this.logo.x = this.game.renderer.width - 30; this.logo.y = this.game.renderer.height - 20; this.customizeButton.x = this.game.renderer.width / 2; + this.customizeButtonSelected.x = this.game.renderer.width / 2; for (let i = 0; i Date: Thu, 8 Oct 2020 18:51:24 +0200 Subject: [PATCH 223/313] simplified mapUrl parsing --- back/src/Controller/AuthenticateController.ts | 7 +- front/src/Connexion/ConnectionManager.ts | 14 +++- .../src/Phaser/Entity/GameSceneDescriptor.ts | 6 ++ front/src/Phaser/Game/GameManager.ts | 66 +++++++++++++++---- front/src/Phaser/Game/GameScene.ts | 27 ++++---- front/src/Phaser/Login/EnableCameraScene.ts | 46 ++----------- 6 files changed, 93 insertions(+), 73 deletions(-) create mode 100644 front/src/Phaser/Entity/GameSceneDescriptor.ts diff --git a/back/src/Controller/AuthenticateController.ts b/back/src/Controller/AuthenticateController.ts index 7a8a95dd..a178b530 100644 --- a/back/src/Controller/AuthenticateController.ts +++ b/back/src/Controller/AuthenticateController.ts @@ -36,6 +36,7 @@ export class AuthenticateController extends BaseController { //todo: what to do if the organizationMemberToken is already used? const organizationMemberToken:string|null = param.organizationMemberToken; + const mapSlug:string|null = param.mapSlug; try { let userUuid; @@ -48,10 +49,14 @@ export class AuthenticateController extends BaseController { userUuid = data.userUuid; mapUrlStart = data.mapUrlStart; newUrl = this.getNewUrlOnAdminAuth(data) + } else if (mapSlug !== null) { + userUuid = uuid(); + mapUrlStart = mapSlug; + newUrl = null; } else { userUuid = uuid(); mapUrlStart = host.replace('api.', 'maps.') + URL_ROOM_STARTED; - newUrl = null; + newUrl = '_/global/'+mapUrlStart; } const authToken = Jwt.sign({userUuid: userUuid}, SECRET_KEY, {expiresIn: '24h'}); diff --git a/front/src/Connexion/ConnectionManager.ts b/front/src/Connexion/ConnectionManager.ts index 217f9e8d..a9d15dd9 100644 --- a/front/src/Connexion/ConnectionManager.ts +++ b/front/src/Connexion/ConnectionManager.ts @@ -17,10 +17,20 @@ class ConnectionManager { private authToken:string|null = null; private userUuid: string|null = null; + //todo: get map infos from url in anonym case public async init(): Promise { + let organizationMemberToken = null; + let teamSlug = null; + let mapSlug = null; const match = /\/register\/(.+)/.exec(window.location.toString()); - const organizationMemberToken = match ? match[1] : null; - this.initPromise = Axios.post(`${API_URL}/login`, {organizationMemberToken}).then(res => res.data); + if (match) { + organizationMemberToken = match[1]; + } else { + const match = /\/_\/(.+)\/(.+)/.exec(window.location.toString()); + teamSlug = match ? match[1] : null; + mapSlug = match ? match[2] : null; + } + this.initPromise = Axios.post(`${API_URL}/login`, {organizationMemberToken, teamSlug, mapSlug}).then(res => res.data); const data = await this.initPromise this.authToken = data.authToken; this.userUuid = data.userUuid; diff --git a/front/src/Phaser/Entity/GameSceneDescriptor.ts b/front/src/Phaser/Entity/GameSceneDescriptor.ts new file mode 100644 index 00000000..df114c28 --- /dev/null +++ b/front/src/Phaser/Entity/GameSceneDescriptor.ts @@ -0,0 +1,6 @@ +export class GameSceneDescriptor { + + constructor(MapKey : string, MapUrlFile: string, instance: string, key: string) { + this.roomId = '';// + } +} \ No newline at end of file diff --git a/front/src/Phaser/Game/GameManager.ts b/front/src/Phaser/Game/GameManager.ts index 960ce7e2..5188d2fe 100644 --- a/front/src/Phaser/Game/GameManager.ts +++ b/front/src/Phaser/Game/GameManager.ts @@ -1,4 +1,4 @@ -import {GameScene} from "./GameScene"; +import {GameScene, GameSceneInitInterface} from "./GameScene"; import { StartMapInterface } from "../../Connexion/ConnexionModels"; @@ -13,6 +13,11 @@ export interface HasMovedEvent { y: number; } +export interface loadMapResponseInterface { + key: string, + startLayerName: string; +} + export class GameManager { private playerName!: string; private characterLayers!: string[]; @@ -29,15 +34,6 @@ export class GameManager { this.characterLayers = layers; } - loadStartMap() : Promise { - return connectionManager.getMapUrlStart().then(mapUrlStart => { - return { - mapUrlStart: mapUrlStart, - startInstance: "global", //todo: is this property still usefull? - } - }); - } - getPlayerName(): string { return this.playerName; } @@ -46,8 +42,47 @@ export class GameManager { return this.characterLayers; } - loadMap(mapUrl: string, scene: Phaser.Scenes.ScenePlugin, instance: string): string { - const sceneKey = GameScene.getMapKeyByUrl(mapUrl); + /** + * Returns the map URL and the instance from the current URL + */ + private findMapUrl(): [string, string]|null { + const path = window.location.pathname; + if (!path.startsWith('/_/')) { + return null; + } + const instanceAndMap = path.substr(3); + const firstSlash = instanceAndMap.indexOf('/'); + if (firstSlash === -1) { + return null; + } + const instance = instanceAndMap.substr(0, firstSlash); + return [window.location.protocol+'//'+instanceAndMap.substr(firstSlash+1), instance]; + } + + public loadStartingMap(scene: Phaser.Scenes.ScenePlugin): Promise { + // Do we have a start URL in the address bar? If so, let's redirect to this address + const instanceAndMapUrl = this.findMapUrl(); + if (instanceAndMapUrl !== null) { + const [mapUrl, instance] = instanceAndMapUrl; + const key = gameManager.loadMap(mapUrl, scene, instance); + const startLayerName = window.location.hash ? window.location.hash.substr(1) : ''; + return Promise.resolve({key, startLayerName}); + + } else { + // If we do not have a map address in the URL, let's ask the server for a start map. + return connectionManager.getMapUrlStart().then((mapUrlStart: string) => { + const key = gameManager.loadMap(window.location.protocol + "//" + mapUrlStart, scene, 'global'); + return {key, startLayerName: ''} + }).catch((err) => { + console.error(err); + throw err; + }); + } + + } + + public loadMap(mapUrl: string, scene: Phaser.Scenes.ScenePlugin, instance: string): string { + const sceneKey = this.getMapKeyByUrl(mapUrl); const gameIndex = scene.getIndex(sceneKey); if(gameIndex === -1){ @@ -56,6 +91,13 @@ export class GameManager { } return sceneKey; } + + public getMapKeyByUrl(mapUrlStart: string) : string { + // FIXME: the key should be computed from the full URL of the map. + const startPos = mapUrlStart.indexOf('://')+3; + const endPos = mapUrlStart.indexOf(".json"); + return mapUrlStart.substring(startPos, endPos); + } } export const gameManager = new GameManager(); diff --git a/front/src/Phaser/Game/GameScene.ts b/front/src/Phaser/Game/GameScene.ts index b3a5f104..a9591f21 100644 --- a/front/src/Phaser/Game/GameScene.ts +++ b/front/src/Phaser/Game/GameScene.ts @@ -138,17 +138,17 @@ export class GameScene extends Phaser.Scene implements CenterListener { private outlinedItem: ActionableItem|null = null; private userInputManager!: UserInputManager; - static createFromUrl(mapUrlFile: string, instance: string, key: string|null = null): GameScene { - const mapKey = GameScene.getMapKeyByUrl(mapUrlFile); - if (key === null) { - key = mapKey; + static createFromUrl(mapUrlFile: string, instance: string, gameSceneKey: string|null = null): GameScene { + const mapKey = gameManager.getMapKeyByUrl(mapUrlFile); + if (gameSceneKey === null) { + gameSceneKey = mapKey; } - return new GameScene(mapKey, mapUrlFile, instance, key); + return new GameScene(mapKey, mapUrlFile, instance, gameSceneKey); } - constructor(MapKey : string, MapUrlFile: string, instance: string, key: string) { + constructor(MapKey : string, MapUrlFile: string, instance: string, gameSceneKey: string) { super({ - key: key + key: gameSceneKey }); this.GameManager = gameManager; @@ -588,9 +588,9 @@ export class GameScene extends Phaser.Scene implements CenterListener { this.simplePeer.closeAllConnections(); this.simplePeer.unregister(); - const key = 'somekey'+Math.round(Math.random()*10000); - const game : Phaser.Scene = GameScene.createFromUrl(this.MapUrlFile, this.instance, key); - this.scene.add(key, game, true, + const gameSceneKey = 'somekey'+Math.round(Math.random()*10000); + const game : Phaser.Scene = GameScene.createFromUrl(this.MapUrlFile, this.instance, gameSceneKey); + this.scene.add(gameSceneKey, game, true, { initPosition: { x: this.CurrentPlayer.x, @@ -1136,12 +1136,7 @@ export class GameScene extends Phaser.Scene implements CenterListener { this.groups.delete(groupId); } - public static getMapKeyByUrl(mapUrlStart: string) : string { - // FIXME: the key should be computed from the full URL of the map. - const startPos = mapUrlStart.indexOf('://')+3; - const endPos = mapUrlStart.indexOf(".json"); - return mapUrlStart.substring(startPos, endPos); - } + /** * Sends to the server an event emitted by one of the ActionableItems. diff --git a/front/src/Phaser/Login/EnableCameraScene.ts b/front/src/Phaser/Login/EnableCameraScene.ts index 6ac1ad47..672facbb 100644 --- a/front/src/Phaser/Login/EnableCameraScene.ts +++ b/front/src/Phaser/Login/EnableCameraScene.ts @@ -94,7 +94,7 @@ export class EnableCameraScene extends Phaser.Scene { this.add.existing(this.logo); this.input.keyboard.on('keyup-ENTER', () => { - return this.login(); + this.login(); }); this.getElementByIdOrFail('webRtcSetup').classList.add('active'); @@ -258,7 +258,7 @@ export class EnableCameraScene extends Phaser.Scene { this.soundMeterSprite.setVolume(this.soundMeter.getVolume()); } - private async login(): Promise { + private async login(): Promise { this.getElementByIdOrFail('webRtcSetup').style.display = 'none'; this.soundMeter.stop(); window.removeEventListener('resize', this.repositionCallback); @@ -266,46 +266,8 @@ export class EnableCameraScene extends Phaser.Scene { mediaManager.stopCamera(); mediaManager.stopMicrophone(); - // Do we have a start URL in the address bar? If so, let's redirect to this address - const instanceAndMapUrl = this.findMapUrl(); - if (instanceAndMapUrl !== null) { - const [mapUrl, instance] = instanceAndMapUrl; - const key = gameManager.loadMap(mapUrl, this.scene, instance); - this.scene.start(key, { - startLayerName: window.location.hash ? window.location.hash.substr(1) : undefined - } as GameSceneInitInterface); - return { - mapUrlStart: mapUrl, - startInstance: instance - }; - } else { - // If we do not have a map address in the URL, let's ask the server for a start map. - return gameManager.loadStartMap().then((startMap: StartMapInterface) => { - const key = gameManager.loadMap(window.location.protocol + "//" + startMap.mapUrlStart, this.scene, startMap.startInstance); - this.scene.start(key); - return startMap; - }).catch((err) => { - console.error(err); - throw err; - }); - } - } - - /** - * Returns the map URL and the instance from the current URL - */ - private findMapUrl(): [string, string]|null { - const path = window.location.pathname; - if (!path.startsWith('/_/')) { - return null; - } - const instanceAndMap = path.substr(3); - const firstSlash = instanceAndMap.indexOf('/'); - if (firstSlash === -1) { - return null; - } - const instance = instanceAndMap.substr(0, firstSlash); - return [window.location.protocol+'//'+instanceAndMap.substr(firstSlash+1), instance]; + let {key, startLayerName} = await gameManager.loadStartingMap(this.scene); + this.scene.start(key, {startLayerName}); } private async getDevices() { From 5e54fc2c26901810572842fbeea66bb10e983e18 Mon Sep 17 00:00:00 2001 From: arp Date: Fri, 9 Oct 2020 14:53:18 +0200 Subject: [PATCH 224/313] some fixes --- back/src/Controller/AuthenticateController.ts | 6 +- back/src/Controller/IoSocketController.ts | 68 +++---------------- back/src/Services/JWTTokenManager.ts | 60 ++++++++++++++++ front/src/Connexion/ConnectionManager.ts | 2 +- front/src/Connexion/RoomConnection.ts | 4 +- .../src/Phaser/Entity/GameSceneDescriptor.ts | 6 -- 6 files changed, 76 insertions(+), 70 deletions(-) create mode 100644 back/src/Services/JWTTokenManager.ts delete mode 100644 front/src/Phaser/Entity/GameSceneDescriptor.ts diff --git a/back/src/Controller/AuthenticateController.ts b/back/src/Controller/AuthenticateController.ts index a178b530..d84ccb56 100644 --- a/back/src/Controller/AuthenticateController.ts +++ b/back/src/Controller/AuthenticateController.ts @@ -1,9 +1,9 @@ -import Jwt from "jsonwebtoken"; -import {ADMIN_API_TOKEN, ADMIN_API_URL, SECRET_KEY, URL_ROOM_STARTED} from "../Enum/EnvironmentVariable"; //TODO fix import by "_Enum/..." +import {URL_ROOM_STARTED} from "../Enum/EnvironmentVariable"; //TODO fix import by "_Enum/..." import { uuid } from 'uuidv4'; import {HttpRequest, HttpResponse, TemplatedApp} from "uWebSockets.js"; import {BaseController} from "./BaseController"; import {adminApi, AdminApiData} from "../Services/AdminApi"; +import {jwtTokenManager} from "../Services/JWTTokenManager"; export interface TokenInterface { userUuid: string @@ -59,7 +59,7 @@ export class AuthenticateController extends BaseController { newUrl = '_/global/'+mapUrlStart; } - const authToken = Jwt.sign({userUuid: userUuid}, SECRET_KEY, {expiresIn: '24h'}); + const authToken = jwtTokenManager.createJWTToken(userUuid); res.writeStatus("200 OK").end(JSON.stringify({ authToken, userUuid, diff --git a/back/src/Controller/IoSocketController.ts b/back/src/Controller/IoSocketController.ts index 943f949c..30f14134 100644 --- a/back/src/Controller/IoSocketController.ts +++ b/back/src/Controller/IoSocketController.ts @@ -1,14 +1,11 @@ import {ExSocketInterface} from "../Model/Websocket/ExSocketInterface"; //TODO fix import by "_Model/.." -import Jwt from "jsonwebtoken"; -import {SECRET_KEY, MINIMUM_DISTANCE, GROUP_RADIUS, ALLOW_ARTILLERY} from "../Enum/EnvironmentVariable"; //TODO fix import by "_Enum/..." +import {MINIMUM_DISTANCE, GROUP_RADIUS} from "../Enum/EnvironmentVariable"; //TODO fix import by "_Enum/..." import {GameRoom} from "../Model/GameRoom"; import {Group} from "../Model/Group"; import {User} from "../Model/User"; import {isSetPlayerDetailsMessage,} from "../Model/Websocket/SetPlayerDetailsMessage"; import {Gauge} from "prom-client"; -import {TokenInterface} from "../Controller/AuthenticateController"; import {PointInterface} from "../Model/Websocket/PointInterface"; -import {uuid} from 'uuidv4'; import {Movable} from "../Model/Movable"; import { PositionMessage, @@ -43,6 +40,8 @@ import {TemplatedApp} from "uWebSockets.js" import {parse} from "query-string"; import {cpuTracker} from "../Services/CpuTracker"; import {ViewportInterface} from "../Model/Websocket/ViewportMessage"; +import {jwtTokenManager} from "../Services/JWTTokenManager"; +import {adminApi} from "../Services/AdminApi"; function emitInBatch(socket: ExSocketInterface, payload: SubMessage): void { socket.batchedMessages.addPayload(payload); @@ -86,54 +85,7 @@ export class IoSocketController { this.ioConnection(); } - private isValidToken(token: object): token is TokenInterface { - if (typeof((token as TokenInterface).userUuid) !== 'string') { - return false; - } - return true; - } - - private async getUserUuidFromToken(token: unknown): Promise { - - if (!token) { - throw new Error('An authentication error happened, a user tried to connect without a token.'); - } - if (typeof(token) !== "string") { - throw new Error('Token is expected to be a string'); - } - - - if(token === 'test') { - if (ALLOW_ARTILLERY) { - return uuid(); - } else { - throw new Error("In order to perform a load-testing test on this environment, you must set the ALLOW_ARTILLERY environment variable to 'true'"); - } - } - - return new Promise((resolve, reject) => { - Jwt.verify(token, SECRET_KEY, {},(err, tokenDecoded) => { - const tokenInterface = tokenDecoded as TokenInterface; - if (err) { - console.error('An authentication error happened, invalid JsonWebToken.', err); - reject(new Error('An authentication error happened, invalid JsonWebToken. '+err.message)); - return; - } - if (tokenDecoded === undefined) { - console.error('Empty token found.'); - reject(new Error('Empty token found.')); - return; - } - - if (!this.isValidToken(tokenInterface)) { - reject(new Error('Authentication error, invalid token structure.')); - return; - } - - resolve(tokenInterface.userUuid); - }); - }); - } + ioConnection() { this.app.ws('/room/*', { @@ -181,7 +133,12 @@ export class IoSocketController { } - const userUuid = await this.getUserUuidFromToken(token); + const userUuid = await jwtTokenManager.getUserUuidFromToken(token); + + const isGranted = await adminApi.memberIsGrantedAccessToRoom(userUuid, roomId); + if (!isGranted) { + throw Error('Client cannot acces this ressource.'); + } if (upgradeAborted.aborted) { console.log("Ouch! Client disconnected before we could upgrade it!"); @@ -256,11 +213,6 @@ export class IoSocketController { // Let's join the room this.handleJoinRoom(client, client.roomId, client.position, client.viewport, client.name, client.characterLayers); - /*const isGranted = await adminApi.memberIsGrantedAccessToRoom(client.userUuid, roomId); - if (!isGranted) { - throw Error('Client cannot acces this ressource.'); - }*/ - const setUserIdMessage = new SetUserIdMessage(); setUserIdMessage.setUserid(client.userId); diff --git a/back/src/Services/JWTTokenManager.ts b/back/src/Services/JWTTokenManager.ts new file mode 100644 index 00000000..905e0ac6 --- /dev/null +++ b/back/src/Services/JWTTokenManager.ts @@ -0,0 +1,60 @@ +import {ALLOW_ARTILLERY, SECRET_KEY} from "../Enum/EnvironmentVariable"; +import {uuid} from "uuidv4"; +import Jwt from "jsonwebtoken"; +import {TokenInterface} from "../Controller/AuthenticateController"; + +class JWTTokenManager { + + public createJWTToken(userUuid: string) { + return Jwt.sign({userUuid: userUuid}, SECRET_KEY, {expiresIn: '24h'}); + } + + public async getUserUuidFromToken(token: unknown): Promise { + + if (!token) { + throw new Error('An authentication error happened, a user tried to connect without a token.'); + } + if (typeof(token) !== "string") { + throw new Error('Token is expected to be a string'); + } + + + if(token === 'test') { + if (ALLOW_ARTILLERY) { + return uuid(); + } else { + throw new Error("In order to perform a load-testing test on this environment, you must set the ALLOW_ARTILLERY environment variable to 'true'"); + } + } + + return new Promise((resolve, reject) => { + Jwt.verify(token, SECRET_KEY, {},(err, tokenDecoded) => { + const tokenInterface = tokenDecoded as TokenInterface; + if (err) { + console.error('An authentication error happened, invalid JsonWebToken.', err); + reject(new Error('An authentication error happened, invalid JsonWebToken. '+err.message)); + return; + } + if (tokenDecoded === undefined) { + console.error('Empty token found.'); + reject(new Error('Empty token found.')); + return; + } + + if (!this.isValidToken(tokenInterface)) { + reject(new Error('Authentication error, invalid token structure.')); + return; + } + + resolve(tokenInterface.userUuid); + }); + }); + } + + private isValidToken(token: object): token is TokenInterface { + return !(typeof((token as TokenInterface).userUuid) !== 'string'); + } + +} + +export const jwtTokenManager = new JWTTokenManager(); \ No newline at end of file diff --git a/front/src/Connexion/ConnectionManager.ts b/front/src/Connexion/ConnectionManager.ts index a9d15dd9..06f8fe03 100644 --- a/front/src/Connexion/ConnectionManager.ts +++ b/front/src/Connexion/ConnectionManager.ts @@ -48,7 +48,7 @@ class ConnectionManager { public connectToRoomSocket(roomId: string, name: string, characterLayers: string[], position: PositionInterface, viewport: ViewportInterface): Promise { return new Promise((resolve, reject) => { - const connection = new RoomConnection(this.authToken as string, roomId, name, characterLayers, position, viewport); + const connection = new RoomConnection(this.authToken, roomId, name, characterLayers, position, viewport); connection.onConnectError((error: object) => { console.log('An error occurred while connecting to socket server. Retrying'); reject(error); diff --git a/front/src/Connexion/RoomConnection.ts b/front/src/Connexion/RoomConnection.ts index 8799f977..f34197d3 100644 --- a/front/src/Connexion/RoomConnection.ts +++ b/front/src/Connexion/RoomConnection.ts @@ -53,10 +53,10 @@ export class RoomConnection implements RoomConnection { * @param token A JWT token containing the UUID of the user * @param roomId The ID of the room in the form "_/[instance]/[map_url]" or "@/[org]/[event]/[map]" */ - public constructor(token: string, roomId: string, name: string, characterLayers: string[], position: PositionInterface, viewport: ViewportInterface) { + public constructor(token: string|null, roomId: string, name: string, characterLayers: string[], position: PositionInterface, viewport: ViewportInterface) { let url = API_URL.replace('http://', 'ws://').replace('https://', 'wss://'); url += '/room/'+roomId - url += '?token='+encodeURIComponent(token); + url += '?token='+(token ?encodeURIComponent(token):''); url += '&name='+encodeURIComponent(name); for (let layer of characterLayers) { url += '&characterLayers='+encodeURIComponent(layer); diff --git a/front/src/Phaser/Entity/GameSceneDescriptor.ts b/front/src/Phaser/Entity/GameSceneDescriptor.ts deleted file mode 100644 index df114c28..00000000 --- a/front/src/Phaser/Entity/GameSceneDescriptor.ts +++ /dev/null @@ -1,6 +0,0 @@ -export class GameSceneDescriptor { - - constructor(MapKey : string, MapUrlFile: string, instance: string, key: string) { - this.roomId = '';// - } -} \ No newline at end of file From c5f8b43fec79ac7f480b72acfdd8cd89530c103a Mon Sep 17 00:00:00 2001 From: arp Date: Fri, 9 Oct 2020 16:18:25 +0200 Subject: [PATCH 225/313] more fixes --- back/src/Controller/IoSocketController.ts | 22 +++++++++++++++------- back/src/Services/AdminApi.ts | 15 ++++++++++----- front/src/Connexion/ConnectionManager.ts | 1 + 3 files changed, 26 insertions(+), 12 deletions(-) diff --git a/back/src/Controller/IoSocketController.ts b/back/src/Controller/IoSocketController.ts index 30f14134..36a52e46 100644 --- a/back/src/Controller/IoSocketController.ts +++ b/back/src/Controller/IoSocketController.ts @@ -106,7 +106,11 @@ export class IoSocketController { }); try { + const url = req.getUrl(); const query = parse(req.getQuery()); + const websocketKey = req.getHeader('sec-websocket-key'); + const websocketProtocol = req.getHeader('sec-websocket-protocol'); + const websocketExtensions = req.getHeader('sec-websocket-extensions'); const roomId = req.getUrl().substr(6); @@ -134,10 +138,14 @@ export class IoSocketController { const userUuid = await jwtTokenManager.getUserUuidFromToken(token); + console.log('uuid', userUuid); const isGranted = await adminApi.memberIsGrantedAccessToRoom(userUuid, roomId); if (!isGranted) { - throw Error('Client cannot acces this ressource.'); + console.log('access not granted for user '+userUuid+' and room '+roomId); + throw new Error('Client cannot acces this ressource.') + } else { + console.log('access granted for user '+userUuid+' and room '+roomId); } if (upgradeAborted.aborted) { @@ -149,7 +157,7 @@ export class IoSocketController { /* This immediately calls open handler, you must not use res after this call */ res.upgrade({ // Data passed here is accessible on the "websocket" socket object. - url: req.getUrl(), + url, token, userUuid, roomId, @@ -169,17 +177,17 @@ export class IoSocketController { } }, /* Spell these correctly */ - req.getHeader('sec-websocket-key'), - req.getHeader('sec-websocket-protocol'), - req.getHeader('sec-websocket-extensions'), + websocketKey, + websocketProtocol, + websocketExtensions, context); } catch (e) { if (e instanceof Error) { - console.warn(e.message); + console.log(e.message); res.writeStatus("401 Unauthorized").end(e.message); } else { - console.warn(e); + console.log(e); res.writeStatus("500 Internal Server Error").end('An error occurred'); } return; diff --git a/back/src/Services/AdminApi.ts b/back/src/Services/AdminApi.ts index de28e4ef..79a68810 100644 --- a/back/src/Services/AdminApi.ts +++ b/back/src/Services/AdminApi.ts @@ -1,5 +1,5 @@ import {ADMIN_API_TOKEN, ADMIN_API_URL} from "../Enum/EnvironmentVariable"; -import Axios from "axios"; +import Axios, {AxiosError} from "axios"; export interface AdminApiData { organizationSlug: string @@ -26,10 +26,15 @@ class AdminApi { if (!ADMIN_API_URL) { return Promise.reject('No admin backoffice set!'); } - const res = await Axios.get(ADMIN_API_URL+'/api/member/'+memberId+'/is-granted-access/'+roomId, - { headers: {"Authorization" : `${ADMIN_API_TOKEN}`} } - ) - return res.data === true; + try { + const res = await Axios.get(ADMIN_API_URL+'/api/member/is-granted-access', + { headers: {"Authorization" : `${ADMIN_API_TOKEN}`}, params: {memberId, roomIdentifier: roomId} } + ) + return !!res.data; + } catch (e) { + console.log(e.message) + return false; + } } } diff --git a/front/src/Connexion/ConnectionManager.ts b/front/src/Connexion/ConnectionManager.ts index 06f8fe03..7863df2f 100644 --- a/front/src/Connexion/ConnectionManager.ts +++ b/front/src/Connexion/ConnectionManager.ts @@ -36,6 +36,7 @@ class ConnectionManager { this.userUuid = data.userUuid; this.mapUrlStart = data.mapUrlStart; const newUrl = data.newUrl; + console.log('u', this.userUuid) if (newUrl) { history.pushState({}, '', newUrl); From 032facb75fe5b1d10186b26f585534a1efbd5220 Mon Sep 17 00:00:00 2001 From: arp Date: Fri, 9 Oct 2020 17:14:03 +0200 Subject: [PATCH 226/313] lint fixes --- back/src/Controller/IoSocketController.ts | 4 ++-- back/tests/WorldTest.ts | 2 +- front/src/Connexion/RoomConnection.ts | 2 +- front/src/Phaser/Game/GameScene.ts | 1 - front/src/Phaser/Login/EnableCameraScene.ts | 2 +- front/yarn.lock | 2 +- 6 files changed, 6 insertions(+), 7 deletions(-) diff --git a/back/src/Controller/IoSocketController.ts b/back/src/Controller/IoSocketController.ts index 36a52e46..7ef0d811 100644 --- a/back/src/Controller/IoSocketController.ts +++ b/back/src/Controller/IoSocketController.ts @@ -312,10 +312,10 @@ export class IoSocketController { console.warn(message); } - private async handleJoinRoom(client: ExSocketInterface, roomId: string, position: PointInterface, viewport: ViewportInterface, name: string, characterLayers: string[]): Promise { + private handleJoinRoom(client: ExSocketInterface, roomId: string, position: PointInterface, viewport: ViewportInterface, name: string, characterLayers: string[]): void { try { //join new previous room - const gameRoom = await this.joinRoom(client, roomId, position); + const gameRoom = this.joinRoom(client, roomId, position); const things = gameRoom.setViewport(client, viewport); diff --git a/back/tests/WorldTest.ts b/back/tests/WorldTest.ts index 5ab421bb..5e06414c 100644 --- a/back/tests/WorldTest.ts +++ b/back/tests/WorldTest.ts @@ -1,5 +1,5 @@ import "jasmine"; -import {GameRoom, ConnectCallback, DisconnectCallback } from "_Model/GameRoom"; +import {GameRoom, ConnectCallback, DisconnectCallback } from "../src/Model/GameRoom"; import {Point} from "../src/Model/Websocket/MessageUserPosition"; import { Group } from "../src/Model/Group"; import {ExSocketInterface} from "_Model/Websocket/ExSocketInterface"; diff --git a/front/src/Connexion/RoomConnection.ts b/front/src/Connexion/RoomConnection.ts index f4290689..ed669fed 100644 --- a/front/src/Connexion/RoomConnection.ts +++ b/front/src/Connexion/RoomConnection.ts @@ -59,7 +59,7 @@ export class RoomConnection implements RoomConnection { url += '/room/'+roomId url += '?token='+(token ?encodeURIComponent(token):''); url += '&name='+encodeURIComponent(name); - for (let layer of characterLayers) { + for (const layer of characterLayers) { url += '&characterLayers='+encodeURIComponent(layer); } url += '&x='+Math.floor(position.x); diff --git a/front/src/Phaser/Game/GameScene.ts b/front/src/Phaser/Game/GameScene.ts index 9f041eab..ba1d75fa 100644 --- a/front/src/Phaser/Game/GameScene.ts +++ b/front/src/Phaser/Game/GameScene.ts @@ -598,7 +598,6 @@ export class GameScene extends ResizableScene implements CenterListener { this.scene.stop(this.scene.key); this.scene.remove(this.scene.key); - window.removeEventListener('resize', this.onResizeCallback); }) connection.onActionableEvent((message => { diff --git a/front/src/Phaser/Login/EnableCameraScene.ts b/front/src/Phaser/Login/EnableCameraScene.ts index 672facbb..5d5339d9 100644 --- a/front/src/Phaser/Login/EnableCameraScene.ts +++ b/front/src/Phaser/Login/EnableCameraScene.ts @@ -266,7 +266,7 @@ export class EnableCameraScene extends Phaser.Scene { mediaManager.stopCamera(); mediaManager.stopMicrophone(); - let {key, startLayerName} = await gameManager.loadStartingMap(this.scene); + const {key, startLayerName} = await gameManager.loadStartingMap(this.scene); this.scene.start(key, {startLayerName}); } diff --git a/front/yarn.lock b/front/yarn.lock index 933a02b4..5d235a82 100644 --- a/front/yarn.lock +++ b/front/yarn.lock @@ -3871,7 +3871,7 @@ quill-delta@^3.6.2: extend "^3.0.2" fast-diff "1.1.2" -quill@1.3.7: +quill@^1.3.7: version "1.3.7" resolved "https://registry.yarnpkg.com/quill/-/quill-1.3.7.tgz#da5b2f3a2c470e932340cdbf3668c9f21f9286e8" integrity sha512-hG/DVzh/TiknWtE6QmWAF/pxoZKYxfe3J/d/+ShUWkDvvkZQVTPeVmUJVu1uE6DDooC4fWTiCLh84ul89oNz5g== From aeced0c648fdcbd85949035a9e3185b38d5092c3 Mon Sep 17 00:00:00 2001 From: Gregoire Parant Date: Mon, 12 Oct 2020 11:22:41 +0200 Subject: [PATCH 227/313] create message to report --- back/src/Controller/IoSocketController.ts | 29 +++++++++++++++++++---- front/src/Connexion/RoomConnection.ts | 15 ++++++++++-- front/src/Phaser/Entity/Character.ts | 24 +++---------------- front/src/Phaser/Entity/RemotePlayer.ts | 21 ++++++++++++++++ front/src/Phaser/Game/GameScene.ts | 9 +++++++ messages/messages.proto | 6 +++++ 6 files changed, 77 insertions(+), 27 deletions(-) diff --git a/back/src/Controller/IoSocketController.ts b/back/src/Controller/IoSocketController.ts index e9f97ea6..b8d0d69a 100644 --- a/back/src/Controller/IoSocketController.ts +++ b/back/src/Controller/IoSocketController.ts @@ -42,7 +42,7 @@ import { SilentMessage, WebRtcSignalToClientMessage, WebRtcSignalToServerMessage, - WebRtcStartMessage, WebRtcDisconnectMessage, PlayGlobalMessage + WebRtcStartMessage, WebRtcDisconnectMessage, PlayGlobalMessage, ReportPlayerMessage } from "../Messages/generated/messages_pb"; import {UserMovesMessage} from "../Messages/generated/messages_pb"; import Direction = PositionMessage.Direction; @@ -50,6 +50,7 @@ import {ProtobufUtils} from "../Model/Websocket/ProtobufUtils"; import {App, HttpRequest, TemplatedApp, WebSocket} from "uWebSockets.js" import {parse} from "query-string"; import {cpuTracker} from "../Services/CpuTracker"; +import axios from "axios"; function emitInBatch(socket: ExSocketInterface, payload: SubMessage): void { socket.batchedMessages.addPayload(payload); @@ -267,11 +268,13 @@ export class IoSocketController { } else if (message.hasItemeventmessage()) { this.handleItemEvent(client, message.getItemeventmessage() as ItemEventMessage); } else if (message.hasWebrtcsignaltoservermessage()) { - this.emitVideo(client, message.getWebrtcsignaltoservermessage() as WebRtcSignalToServerMessage) + this.emitVideo(client, message.getWebrtcsignaltoservermessage() as WebRtcSignalToServerMessage); } else if (message.hasWebrtcscreensharingsignaltoservermessage()) { - this.emitScreenSharing(client, message.getWebrtcscreensharingsignaltoservermessage() as WebRtcSignalToServerMessage) + this.emitScreenSharing(client, message.getWebrtcscreensharingsignaltoservermessage() as WebRtcSignalToServerMessage); } else if (message.hasPlayglobalmessage()) { - this.emitPlayGlobalMessage(client, message.getPlayglobalmessage() as PlayGlobalMessage) + this.emitPlayGlobalMessage(client, message.getPlayglobalmessage() as PlayGlobalMessage); + } else if (message.hasReportplayermessage()){ + this.handleReportMessage(client, message.getReportplayermessage() as ReportPlayerMessage); } /* Ok is false if backpressure was built up, wait for drain */ @@ -547,6 +550,24 @@ export class IoSocketController { } } + private handleReportMessage(client: ExSocketInterface, reportPlayerMessage: ReportPlayerMessage) { + try { + let reportedSocket = this.sockets.get(reportPlayerMessage.getReporteduserid()); + if(!reportedSocket){ + throw 'reported socket user not found'; + } + //TODO report user on admin application + axios.post('/report', { + reportedUserId: reportPlayerMessage.getReporteduserid(), + reportedUserComment: reportPlayerMessage.getReportcomment(), + reporterUserId: client.userUuid, + }); + } catch (e) { + console.error('An error occurred on "handleReportMessage"'); + console.error(e); + } + } + emitVideo(socket: ExSocketInterface, data: WebRtcSignalToServerMessage): void { //send only at user const client = this.sockets.get(data.getReceiverid()); diff --git a/front/src/Connexion/RoomConnection.ts b/front/src/Connexion/RoomConnection.ts index a27bd323..282d830e 100644 --- a/front/src/Connexion/RoomConnection.ts +++ b/front/src/Connexion/RoomConnection.ts @@ -21,7 +21,8 @@ import { WebRtcDisconnectMessage, WebRtcSignalToClientMessage, WebRtcSignalToServerMessage, - WebRtcStartMessage + WebRtcStartMessage, + ReportPlayerMessage } from "../Messages/generated/messages_pb" import {UserSimplePeerInterface} from "../WebRtc/SimplePeer"; @@ -401,7 +402,6 @@ export class RoomConnection implements RoomConnection { } callback(event); }); - } public getUserId(): number|null { @@ -478,4 +478,15 @@ export class RoomConnection implements RoomConnection { this.socket.send(clientToServerMessage.serializeBinary().buffer); } + + public emitReportPlayerMessage(reportedUserId: number, reportComment: string ): void { + const reportPlayerMessage = new ReportPlayerMessage(); + reportPlayerMessage.setReporteduserid(reportedUserId); + reportPlayerMessage.setReportcomment(reportComment); + + const clientToServerMessage = new ClientToServerMessage(); + clientToServerMessage.setReportplayermessage(reportPlayerMessage); + + this.socket.send(clientToServerMessage.serializeBinary().buffer); + } } diff --git a/front/src/Phaser/Entity/Character.ts b/front/src/Phaser/Entity/Character.ts index 74a4d99d..4e899ec2 100644 --- a/front/src/Phaser/Entity/Character.ts +++ b/front/src/Phaser/Entity/Character.ts @@ -46,8 +46,7 @@ export abstract class Character extends Container { public PlayerValue: string; public sprites: Map; private lastDirection: string = PlayerAnimationNames.WalkDown; - private report: Sprite; - private teleportation: Sprite; + //private teleportation: Sprite; constructor(scene: Phaser.Scene, x: number, @@ -65,14 +64,6 @@ export abstract class Character extends Container { for (const texture of textures) { const sprite = new Sprite(scene, 0, 0, texture, frame); sprite.setInteractive({useHandCursor: true}); - sprite.on('pointerover', () => { - this.report.visible = true; - this.teleportation.visible = true; - }); - sprite.on('pointerup', () => { - this.report.visible = true; - this.teleportation.visible = true; - }); this.add(sprite); this.getPlayerAnimations(texture).forEach(d => { this.scene.anims.create({ @@ -87,23 +78,14 @@ export abstract class Character extends Container { this.sprites.set(texture, sprite); } - this.report = new Sprite(scene, 20, -10, 'report_flag', 3); - this.report.setInteractive(); - this.report.visible = false; - this.report.on('pointerup', () => { - this.report.visible = false; - this.teleportation.visible = false; - }); - this.add(this.report); - - this.teleportation = new Sprite(scene, -20, -10, 'teleportation', 3); + /*this.teleportation = new Sprite(scene, -20, -10, 'teleportation', 3); this.teleportation.setInteractive(); this.teleportation.visible = false; this.teleportation.on('pointerup', () => { this.report.visible = false; this.teleportation.visible = false; }); - this.add(this.teleportation); + this.add(this.teleportation);*/ this.PlayerValue = name; this.playerName = new BitmapText(scene, x, y - 25, 'main_font', name, 8); diff --git a/front/src/Phaser/Entity/RemotePlayer.ts b/front/src/Phaser/Entity/RemotePlayer.ts index ba0a74d2..f0d0baa5 100644 --- a/front/src/Phaser/Entity/RemotePlayer.ts +++ b/front/src/Phaser/Entity/RemotePlayer.ts @@ -1,12 +1,14 @@ import {GameScene} from "../Game/GameScene"; import {PointInterface} from "../../Connexion/ConnexionModels"; import {Character} from "../Entity/Character"; +import {Sprite} from "./Sprite"; /** * Class representing the sprite of a remote player (a player that plays on another computer) */ export class RemotePlayer extends Character { userId: number; + private report: Sprite; constructor( userId: number, @@ -23,6 +25,25 @@ export class RemotePlayer extends Character { //set data this.userId = userId; + this.report = new Sprite(Scene, 20, -10, 'report_flag', 3); + this.report.setInteractive(); + this.report.visible = false; + this.report.on('pointerup', () => { + //this.scene.events.emit('reportUser', {reportedUserId: userId, reportComment: comment}); + this.scene.events.emit('reportUser', {reportedUserId: this.userId, reportComment: 'test'}); + this.report.visible = false; + }); + this.add(this.report); + + this.sprites.forEach((sprite: Sprite) => { + sprite.on('pointerover', () => { + this.report.visible = true; + }); + sprite.on('pointerup', () => { + this.report.visible = true; + }); + }) + //the current player model should be push away by other players to prevent conflict //this.setImmovable(false); } diff --git a/front/src/Phaser/Game/GameScene.ts b/front/src/Phaser/Game/GameScene.ts index 0dc89a7b..ca936e65 100644 --- a/front/src/Phaser/Game/GameScene.ts +++ b/front/src/Phaser/Game/GameScene.ts @@ -601,6 +601,9 @@ export class GameScene extends ResizableScene implements CenterListener { this.connection.setSilent(true); } }); + + //lisen event to report user + this.onReportUser(); } private switchLayoutMode(): void { @@ -1181,4 +1184,10 @@ export class GameScene extends ResizableScene implements CenterListener { public onCenterChange(): void { this.updateCameraOffset(); } + + public onReportUser(){ + this.events.on('reportUser', (message: {reportedUserId: number, reportComment: string}) => { + this.connection.emitReportPlayerMessage(message.reportedUserId, message.reportComment); + }); + } } diff --git a/messages/messages.proto b/messages/messages.proto index 87cf2231..2d9b970a 100644 --- a/messages/messages.proto +++ b/messages/messages.proto @@ -54,6 +54,11 @@ message WebRtcSignalToServerMessage { string signal = 2; } +message ReportPlayerMessage { + int32 reportedUserId = 1; + string reportComment = 2; +} + message ClientToServerMessage { oneof message { JoinRoomMessage joinRoomMessage = 1; @@ -66,6 +71,7 @@ message ClientToServerMessage { WebRtcSignalToServerMessage webRtcScreenSharingSignalToServerMessage = 8; PlayGlobalMessage playGlobalMessage = 9; StopGlobalMessage stopGlobalMessage = 10; + ReportPlayerMessage reportPlayerMessage = 11; } } From 02c193a262422d2ac90442f00f390d13be5b4788 Mon Sep 17 00:00:00 2001 From: arp Date: Mon, 12 Oct 2020 16:23:07 +0200 Subject: [PATCH 228/313] rewrote the authorisation flow: give more responsability to gameManager and less to gameScene --- back/src/Controller/AuthenticateController.ts | 76 ++++++++------- back/src/Controller/IoSocketController.ts | 24 +++-- back/src/Model/RoomIdentifier.ts | 14 +++ back/src/Services/AdminApi.ts | 8 +- front/src/Connexion/ConnectionManager.ts | 94 ++++++++++--------- front/src/Connexion/LocalUser.ts | 9 ++ front/src/Connexion/LocalUserStore.ts | 16 ++++ front/src/Connexion/Room.ts | 10 ++ front/src/Connexion/RoomConnection.ts | 3 +- front/src/Phaser/Game/GameManager.ts | 77 ++++----------- front/src/Phaser/Game/GameScene.ts | 23 +---- front/src/Phaser/Login/EnableCameraScene.ts | 3 +- front/src/Url/UrlManager.ts | 52 ++++++++++ front/src/index.ts | 5 +- 14 files changed, 244 insertions(+), 170 deletions(-) create mode 100644 back/src/Model/RoomIdentifier.ts create mode 100644 front/src/Connexion/LocalUser.ts create mode 100644 front/src/Connexion/LocalUserStore.ts create mode 100644 front/src/Connexion/Room.ts create mode 100644 front/src/Url/UrlManager.ts diff --git a/back/src/Controller/AuthenticateController.ts b/back/src/Controller/AuthenticateController.ts index 984d7445..55036a0e 100644 --- a/back/src/Controller/AuthenticateController.ts +++ b/back/src/Controller/AuthenticateController.ts @@ -1,8 +1,7 @@ -import {URL_ROOM_STARTED} from "../Enum/EnvironmentVariable"; //TODO fix import by "_Enum/..." import { v4 } from 'uuid'; import {HttpRequest, HttpResponse, TemplatedApp} from "uWebSockets.js"; import {BaseController} from "./BaseController"; -import {adminApi, AdminApiData} from "../Services/AdminApi"; +import {adminApi} from "../Services/AdminApi"; import {jwtTokenManager} from "../Services/JWTTokenManager"; export interface TokenInterface { @@ -13,18 +12,19 @@ export class AuthenticateController extends BaseController { constructor(private App : TemplatedApp) { super(); - this.login(); + this.register(); + this.anonymLogin(); } - //permit to login on application. Return token to connect on Websocket IO. - login(){ - this.App.options("/login", (res: HttpResponse, req: HttpRequest) => { + //Try to login with an admin token + register(){ + this.App.options("/register", (res: HttpResponse, req: HttpRequest) => { this.addCorsHeaders(res); res.end(); }); - this.App.post("/login", (res: HttpResponse, req: HttpRequest) => { + this.App.post("/register", (res: HttpResponse, req: HttpRequest) => { (async () => { this.addCorsHeaders(res); @@ -36,35 +36,25 @@ export class AuthenticateController extends BaseController { //todo: what to do if the organizationMemberToken is already used? const organizationMemberToken:string|null = param.organizationMemberToken; - const mapSlug:string|null = param.mapSlug; - + try { - let userUuid; - let mapUrlStart; - let newUrl: string|null = null; + if (typeof organizationMemberToken != 'string') throw new Error('No organization token'); + const data = await adminApi.fetchMemberDataByToken(organizationMemberToken); - if (organizationMemberToken) { - const data = await adminApi.fetchMemberDataByToken(organizationMemberToken); - - userUuid = data.userUuid; - mapUrlStart = data.mapUrlStart; - newUrl = this.getNewUrlOnAdminAuth(data) - } else if (mapSlug !== null) { - userUuid = v4(); - mapUrlStart = mapSlug; - newUrl = null; - } else { - userUuid = v4(); - mapUrlStart = host.replace('api.', 'maps.') + URL_ROOM_STARTED; - newUrl = '_/global/'+mapUrlStart; - } + const userUuid = data.userUuid; + const organizationSlug = data.organizationSlug; + const worldSlug = data.worldSlug; + const roomSlug = data.roomSlug; + const mapUrlStart = data.mapUrlStart; const authToken = jwtTokenManager.createJWTToken(userUuid); res.writeStatus("200 OK").end(JSON.stringify({ authToken, userUuid, + organizationSlug, + worldSlug, + roomSlug, mapUrlStart, - newUrl, })); } catch (e) { @@ -75,12 +65,32 @@ export class AuthenticateController extends BaseController { })(); }); + } - private getNewUrlOnAdminAuth(data:AdminApiData): string { - const organizationSlug = data.organizationSlug; - const worldSlug = data.worldSlug; - const roomSlug = data.roomSlug; - return '/@/'+organizationSlug+'/'+worldSlug+'/'+roomSlug; + //permit to login on application. Return token to connect on Websocket IO. + anonymLogin(){ + this.App.options("/anonymLogin", (res: HttpResponse, req: HttpRequest) => { + this.addCorsHeaders(res); + + res.end(); + }); + + this.App.post("/anonymLogin", (res: HttpResponse, req: HttpRequest) => { + (async () => { + this.addCorsHeaders(res); + + res.onAborted(() => { + console.warn('Login request was aborted'); + }) + + const userUuid = v4(); + const authToken = jwtTokenManager.createJWTToken(userUuid); + res.writeStatus("200 OK").end(JSON.stringify({ + authToken, + userUuid, + })); + })(); + }); } } diff --git a/back/src/Controller/IoSocketController.ts b/back/src/Controller/IoSocketController.ts index 7ef0d811..306b874e 100644 --- a/back/src/Controller/IoSocketController.ts +++ b/back/src/Controller/IoSocketController.ts @@ -42,6 +42,7 @@ import {cpuTracker} from "../Services/CpuTracker"; import {ViewportInterface} from "../Model/Websocket/ViewportMessage"; import {jwtTokenManager} from "../Services/JWTTokenManager"; import {adminApi} from "../Services/AdminApi"; +import {RoomIdentifier} from "../Model/RoomIdentifier"; function emitInBatch(socket: ExSocketInterface, payload: SubMessage): void { socket.batchedMessages.addPayload(payload); @@ -88,7 +89,7 @@ export class IoSocketController { ioConnection() { - this.app.ws('/room/*', { + this.app.ws('/room', { /* Options */ //compression: uWS.SHARED_COMPRESSOR, maxPayloadLength: 16 * 1024 * 1024, @@ -112,7 +113,12 @@ export class IoSocketController { const websocketProtocol = req.getHeader('sec-websocket-protocol'); const websocketExtensions = req.getHeader('sec-websocket-extensions'); - const roomId = req.getUrl().substr(6); + const roomId = query.roomId; + //todo: better validation: /\/_\/.*\/.*/ or /\/@\/.*\/.*\/.*/ + if (typeof roomId !== 'string') { + throw new Error('Undefined room ID: '); + } + const roomIdentifier = new RoomIdentifier(roomId); const token = query.token; const x = Number(query.x); @@ -140,12 +146,14 @@ export class IoSocketController { const userUuid = await jwtTokenManager.getUserUuidFromToken(token); console.log('uuid', userUuid); - const isGranted = await adminApi.memberIsGrantedAccessToRoom(userUuid, roomId); - if (!isGranted) { - console.log('access not granted for user '+userUuid+' and room '+roomId); - throw new Error('Client cannot acces this ressource.') - } else { - console.log('access granted for user '+userUuid+' and room '+roomId); + if (roomIdentifier.anonymous === false) { + const isGranted = await adminApi.memberIsGrantedAccessToRoom(userUuid, roomIdentifier); + if (!isGranted) { + console.log('access not granted for user '+userUuid+' and room '+roomId); + throw new Error('Client cannot acces this ressource.') + } else { + console.log('access granted for user '+userUuid+' and room '+roomId); + } } if (upgradeAborted.aborted) { diff --git a/back/src/Model/RoomIdentifier.ts b/back/src/Model/RoomIdentifier.ts new file mode 100644 index 00000000..9bb58bb9 --- /dev/null +++ b/back/src/Model/RoomIdentifier.ts @@ -0,0 +1,14 @@ +export class RoomIdentifier { + public anonymous: boolean; + public id:string + constructor(roomID: string) { + if (roomID.indexOf('_/') === 0) { + this.anonymous = true; + } else if(roomID.indexOf('@/') === 0) { + this.anonymous = false; + } else { + throw new Error('Incorrect room ID: '+roomID); + } + this.id = roomID; //todo: extract more data from the id (like room slug, organization name, etc); + } +} \ No newline at end of file diff --git a/back/src/Services/AdminApi.ts b/back/src/Services/AdminApi.ts index 79a68810..2d03ee9d 100644 --- a/back/src/Services/AdminApi.ts +++ b/back/src/Services/AdminApi.ts @@ -1,5 +1,6 @@ import {ADMIN_API_TOKEN, ADMIN_API_URL} from "../Enum/EnvironmentVariable"; -import Axios, {AxiosError} from "axios"; +import Axios from "axios"; +import {RoomIdentifier} from "../Model/RoomIdentifier"; export interface AdminApiData { organizationSlug: string @@ -22,13 +23,14 @@ class AdminApi { return res.data; } - async memberIsGrantedAccessToRoom(memberId: string, roomId: string): Promise { + async memberIsGrantedAccessToRoom(memberId: string, roomIdentifier: RoomIdentifier): Promise { if (!ADMIN_API_URL) { return Promise.reject('No admin backoffice set!'); } try { + //todo: send more specialized data instead of the whole id const res = await Axios.get(ADMIN_API_URL+'/api/member/is-granted-access', - { headers: {"Authorization" : `${ADMIN_API_TOKEN}`}, params: {memberId, roomIdentifier: roomId} } + { headers: {"Authorization" : `${ADMIN_API_TOKEN}`}, params: {memberId, roomIdentifier: roomIdentifier.id} } ) return !!res.data; } catch (e) { diff --git a/front/src/Connexion/ConnectionManager.ts b/front/src/Connexion/ConnectionManager.ts index 91a42882..0fea50b5 100644 --- a/front/src/Connexion/ConnectionManager.ts +++ b/front/src/Connexion/ConnectionManager.ts @@ -2,54 +2,67 @@ import Axios from "axios"; import {API_URL} from "../Enum/EnvironmentVariable"; import {RoomConnection} from "./RoomConnection"; import {PositionInterface, ViewportInterface} from "./ConnexionModels"; - -interface LoginApiData { - authToken: string - userUuid: string - mapUrlStart: string - newUrl: string -} +import {GameConnexionTypes, urlManager} from "../Url/UrlManager"; +import {localUserStore} from "./LocalUserStore"; +import {LocalUser} from "./LocalUser"; +import {Room} from "./Room"; class ConnectionManager { - private initPromise!: Promise; - private mapUrlStart: string|null = null; + private localUser!:LocalUser; - private authToken:string|null = null; - private userUuid: string|null = null; + /** + * Tries to login to the node server and return the starting map url to be loaded + */ + public async initGameConnexion(): Promise { - //todo: get map infos from url in anonym case - public async init(): Promise { - let organizationMemberToken = null; - let teamSlug = null; - let mapSlug = null; - const match = /\/register\/(.+)/.exec(window.location.toString()); - if (match) { - organizationMemberToken = match[1]; - } else { - const match = /\/_\/(.+)\/(.+)/.exec(window.location.toString()); - teamSlug = match ? match[1] : null; - mapSlug = match ? match[2] : null; - } - this.initPromise = Axios.post(`${API_URL}/login`, {organizationMemberToken, teamSlug, mapSlug}).then(res => res.data); - const data = await this.initPromise - this.authToken = data.authToken; - this.userUuid = data.userUuid; - this.mapUrlStart = data.mapUrlStart; - const newUrl = data.newUrl; - console.log('u', this.userUuid) - - if (newUrl) { - history.pushState({}, '', newUrl); + const connexionType = urlManager.getGameConnexionType(); + if(connexionType === GameConnexionTypes.register) { + const organizationMemberToken = urlManager.getOrganizationToken(); + const data:any = await Axios.post(`${API_URL}/register`, {organizationMemberToken}).then(res => res.data); + this.localUser = new LocalUser(data.userUuid, data.authToken); + localUserStore.saveUser(this.localUser); + + const organizationSlug = data.organizationSlug; + const worldSlug = data.worldSlug; + const roomSlug = data.roomSlug; + urlManager.editUrlForRoom(roomSlug, organizationSlug, worldSlug); + + const room = new Room(window.location.pathname, data.mapUrlStart) + return Promise.resolve(room); + } else if (connexionType === GameConnexionTypes.anonymous) { + const localUser = localUserStore.getLocalUser(); + + if (localUser) { + this.localUser = localUser + } else { + const data:any = await Axios.post(`${API_URL}/anonymLogin`).then(res => res.data); + this.localUser = new LocalUser(data.userUuid, data.authToken); + localUserStore.saveUser(this.localUser); + } + const room = new Room(window.location.pathname, urlManager.getAnonymousMapUrlStart()) + return Promise.resolve(room); + } else if (connexionType == GameConnexionTypes.organization) { + const localUser = localUserStore.getLocalUser(); + + if (localUser) { + this.localUser = localUser + //todo: ask the node api for the correct starting map Url from its slug + return Promise.reject('Case not handled: need to get the map\'s url from its slug'); + } else { + //todo: find some kind of fallback? + return Promise.reject('Could not find a user in localstorage'); + } } + return Promise.reject('ConnexionManager initialization failed'); } public initBenchmark(): void { - this.authToken = 'test'; + this.localUser = new LocalUser('', 'test'); } public connectToRoomSocket(roomId: string, name: string, characterLayers: string[], position: PositionInterface, viewport: ViewportInterface): Promise { return new Promise((resolve, reject) => { - const connection = new RoomConnection(this.authToken, roomId, name, characterLayers, position, viewport); + const connection = new RoomConnection(this.localUser.jwtToken, roomId, name, characterLayers, position, viewport); connection.onConnectError((error: object) => { console.log('An error occurred while connecting to socket server. Retrying'); reject(error); @@ -67,15 +80,6 @@ class ConnectionManager { }); }); } - - public getMapUrlStart(): Promise { - return this.initPromise.then(() => { - if (!this.mapUrlStart) { - throw new Error('No map url set!'); - } - return this.mapUrlStart; - }) - } } export const connectionManager = new ConnectionManager(); diff --git a/front/src/Connexion/LocalUser.ts b/front/src/Connexion/LocalUser.ts new file mode 100644 index 00000000..1411f66c --- /dev/null +++ b/front/src/Connexion/LocalUser.ts @@ -0,0 +1,9 @@ +export class LocalUser { + public uuid: string; + public jwtToken: string; + + constructor(uuid:string, jwtToken: string) { + this.uuid = uuid; + this.jwtToken = jwtToken; + } +} \ No newline at end of file diff --git a/front/src/Connexion/LocalUserStore.ts b/front/src/Connexion/LocalUserStore.ts new file mode 100644 index 00000000..0976b5c9 --- /dev/null +++ b/front/src/Connexion/LocalUserStore.ts @@ -0,0 +1,16 @@ +import {LocalUser} from "./LocalUser"; + +class LocalUserStore { + + saveUser(localUser: LocalUser) { + localStorage.setItem('localUser', JSON.stringify(localUser)); + } + + getLocalUser(): LocalUser|null { + const data = localStorage.getItem('localUser'); + return data ? JSON.parse(data) : null; + } + +} + +export const localUserStore = new LocalUserStore(); \ No newline at end of file diff --git a/front/src/Connexion/Room.ts b/front/src/Connexion/Room.ts new file mode 100644 index 00000000..36a8072b --- /dev/null +++ b/front/src/Connexion/Room.ts @@ -0,0 +1,10 @@ +export class Room { + public ID: string; + public url: string + + constructor(ID: string, url: string) { + this.ID = ID; + this.url = url; + } + +} \ No newline at end of file diff --git a/front/src/Connexion/RoomConnection.ts b/front/src/Connexion/RoomConnection.ts index ed669fed..fd9410c4 100644 --- a/front/src/Connexion/RoomConnection.ts +++ b/front/src/Connexion/RoomConnection.ts @@ -56,7 +56,8 @@ export class RoomConnection implements RoomConnection { */ public constructor(token: string|null, roomId: string, name: string, characterLayers: string[], position: PositionInterface, viewport: ViewportInterface) { let url = API_URL.replace('http://', 'ws://').replace('https://', 'wss://'); - url += '/room/'+roomId + url += '/room'; + url += '?roomId='+(roomId ?encodeURIComponent(roomId):''); url += '?token='+(token ?encodeURIComponent(token):''); url += '&name='+encodeURIComponent(name); for (const layer of characterLayers) { diff --git a/front/src/Phaser/Game/GameManager.ts b/front/src/Phaser/Game/GameManager.ts index 5188d2fe..10277e20 100644 --- a/front/src/Phaser/Game/GameManager.ts +++ b/front/src/Phaser/Game/GameManager.ts @@ -1,10 +1,6 @@ -import {GameScene, GameSceneInitInterface} from "./GameScene"; -import { - StartMapInterface -} from "../../Connexion/ConnexionModels"; -import Axios from "axios"; -import {API_URL} from "../../Enum/EnvironmentVariable"; +import {GameScene} from "./GameScene"; import {connectionManager} from "../../Connexion/ConnectionManager"; +import {Room} from "../../Connexion/Room"; export interface HasMovedEvent { direction: string; @@ -13,14 +9,17 @@ export interface HasMovedEvent { y: number; } -export interface loadMapResponseInterface { - key: string, - startLayerName: string; -} - export class GameManager { private playerName!: string; private characterLayers!: string[]; + private startRoom!:Room; + private sceneManager!: Phaser.Scenes.SceneManager; + + public async init(sceneManager: Phaser.Scenes.SceneManager) { + this.sceneManager = sceneManager; + this.startRoom = await connectionManager.initGameConnexion(); + this.loadMap(this.startRoom.url, this.startRoom.ID); + } public setPlayerName(name: string): void { this.playerName = name; @@ -41,55 +40,15 @@ export class GameManager { getCharacterSelected(): string[] { return this.characterLayers; } - - /** - * Returns the map URL and the instance from the current URL - */ - private findMapUrl(): [string, string]|null { - const path = window.location.pathname; - if (!path.startsWith('/_/')) { - return null; - } - const instanceAndMap = path.substr(3); - const firstSlash = instanceAndMap.indexOf('/'); - if (firstSlash === -1) { - return null; - } - const instance = instanceAndMap.substr(0, firstSlash); - return [window.location.protocol+'//'+instanceAndMap.substr(firstSlash+1), instance]; - } - public loadStartingMap(scene: Phaser.Scenes.ScenePlugin): Promise { - // Do we have a start URL in the address bar? If so, let's redirect to this address - const instanceAndMapUrl = this.findMapUrl(); - if (instanceAndMapUrl !== null) { - const [mapUrl, instance] = instanceAndMapUrl; - const key = gameManager.loadMap(mapUrl, scene, instance); - const startLayerName = window.location.hash ? window.location.hash.substr(1) : ''; - return Promise.resolve({key, startLayerName}); - - } else { - // If we do not have a map address in the URL, let's ask the server for a start map. - return connectionManager.getMapUrlStart().then((mapUrlStart: string) => { - const key = gameManager.loadMap(window.location.protocol + "//" + mapUrlStart, scene, 'global'); - return {key, startLayerName: ''} - }).catch((err) => { - console.error(err); - throw err; - }); - } - - } - - public loadMap(mapUrl: string, scene: Phaser.Scenes.ScenePlugin, instance: string): string { - const sceneKey = this.getMapKeyByUrl(mapUrl); - - const gameIndex = scene.getIndex(sceneKey); + + public loadMap(mapUrl: string, roomID: string): void { + console.log('Loading map '+roomID+' at url '+mapUrl); + const gameIndex = this.sceneManager.getIndex(roomID); if(gameIndex === -1){ - const game : Phaser.Scene = GameScene.createFromUrl(mapUrl, instance); - scene.add(sceneKey, game, false); + const game : Phaser.Scene = GameScene.createFromUrl(mapUrl, roomID); + this.sceneManager.add(roomID, game, false); } - return sceneKey; } public getMapKeyByUrl(mapUrlStart: string) : string { @@ -98,6 +57,10 @@ export class GameManager { const endPos = mapUrlStart.indexOf(".json"); return mapUrlStart.substring(startPos, endPos); } + + public async goToStartingMap() { + this.sceneManager.start(this.startRoom.ID, {startLayerName: 'global'}); + } } export const gameManager = new GameManager(); diff --git a/front/src/Phaser/Game/GameScene.ts b/front/src/Phaser/Game/GameScene.ts index ba1d75fa..602f697e 100644 --- a/front/src/Phaser/Game/GameScene.ts +++ b/front/src/Phaser/Game/GameScene.ts @@ -418,15 +418,7 @@ export class GameScene extends ResizableScene implements CenterListener { context.strokeStyle = '#ffffff'; context.stroke(); this.circleTexture.refresh(); - - // Let's alter browser history - const url = new URL(this.MapUrlFile); - let path = '/_/'+this.instance+'/'+url.host+url.pathname; - if (this.startLayerName) { - path += '#'+this.startLayerName; - } - window.history.pushState({}, 'WorkAdventure', path); - + // Let's pause the scene if the connection is not established yet if (this.connection === undefined) { // Let's wait 0.5 seconds before printing the "connecting" screen to avoid blinking @@ -686,6 +678,7 @@ export class GameScene extends ResizableScene implements CenterListener { * @param tileWidth * @param tileHeight */ + //todo: push that into the gameManager private loadNextGame(layer: ITiledMapLayer, mapWidth: number, tileWidth: number, tileHeight: number){ const exitSceneUrl = this.getExitSceneUrl(layer); if (exitSceneUrl === undefined) { @@ -698,7 +691,8 @@ export class GameScene extends ResizableScene implements CenterListener { // TODO: eventually compute a relative URL const absoluteExitSceneUrl = new URL(exitSceneUrl, this.MapUrlFile).href; - const exitSceneKey = gameManager.loadMap(absoluteExitSceneUrl, this.scene, instance); + gameManager.loadMap(absoluteExitSceneUrl, instance); + const exitSceneKey = instance; const tiles : number[] = layer.data as number[]; for (let key=0; key < tiles.length; key++) { @@ -785,14 +779,6 @@ export class GameScene extends ResizableScene implements CenterListener { }); } - createCollisionObject(){ - /*this.Objects.forEach((Object : Phaser.Physics.Arcade.Sprite) => { - this.physics.add.collider(this.CurrentPlayer, Object, (object1, object2) => { - this.CurrentPlayer.say("Collision with object : " + (object2 as Phaser.Physics.Arcade.Sprite).texture.key) - }); - })*/ - } - createCurrentPlayer(){ //initialise player //TODO create animation moving between exit and start @@ -809,7 +795,6 @@ export class GameScene extends ResizableScene implements CenterListener { //create collision this.createCollisionWithPlayer(); - this.createCollisionObject(); } pushPlayerPosition(event: HasMovedEvent) { diff --git a/front/src/Phaser/Login/EnableCameraScene.ts b/front/src/Phaser/Login/EnableCameraScene.ts index 5d5339d9..8695464b 100644 --- a/front/src/Phaser/Login/EnableCameraScene.ts +++ b/front/src/Phaser/Login/EnableCameraScene.ts @@ -266,8 +266,7 @@ export class EnableCameraScene extends Phaser.Scene { mediaManager.stopCamera(); mediaManager.stopMicrophone(); - const {key, startLayerName} = await gameManager.loadStartingMap(this.scene); - this.scene.start(key, {startLayerName}); + gameManager.goToStartingMap(); } private async getDevices() { diff --git a/front/src/Url/UrlManager.ts b/front/src/Url/UrlManager.ts new file mode 100644 index 00000000..39f5667d --- /dev/null +++ b/front/src/Url/UrlManager.ts @@ -0,0 +1,52 @@ + +export enum GameConnexionTypes { + anonymous=1, + organization, + register, + unknown, +} + +//this class is responsible with analysing and editing the game's url +class UrlManager { + + //todo: use that to detect if we can find a token in localstorage + public getGameConnexionType(): GameConnexionTypes { + const url = window.location.pathname.toString(); + if (url.indexOf('_/') > -1) { + return GameConnexionTypes.anonymous; + } else if (url.indexOf('@/') > -1) { + return GameConnexionTypes.organization; + } else if(url.indexOf('register/')) { + return GameConnexionTypes.register + } else { + return GameConnexionTypes.unknown + } + } + + public getAnonymousMapUrlStart():string { + const match = /\/_\/global\/(.+)/.exec(window.location.pathname.toString()) + if (!match) throw new Error('Could not extract startmap url from'+window.location.pathname); + return match[1]; + + } + + public getOrganizationToken(): string|null { + const match = /\/register\/(.+)/.exec(window.location.pathname.toString()); + return match ? match [1] : null; + } + + + public editUrlForRoom(roomSlug: string, organizationSlug: string|null, worldSlug: string |null): string { + let newUrl:string; + if (organizationSlug) { + newUrl = '/@/'+organizationSlug+'/'+worldSlug+'/'+roomSlug; + } else { + newUrl = '/_/global/'+roomSlug; + } + history.pushState({}, 'WorkAdventure', newUrl); + return newUrl; + } + +} + +export const urlManager = new UrlManager(); \ No newline at end of file diff --git a/front/src/index.ts b/front/src/index.ts index 177c56c0..f57474d7 100644 --- a/front/src/index.ts +++ b/front/src/index.ts @@ -11,11 +11,10 @@ import WebGLRenderer = Phaser.Renderer.WebGL.WebGLRenderer; import {OutlinePipeline} from "./Phaser/Shaders/OutlinePipeline"; import {CustomizeScene} from "./Phaser/Login/CustomizeScene"; import {CoWebsiteManager} from "./WebRtc/CoWebsiteManager"; -import {connectionManager} from "./Connexion/ConnectionManager"; +import {gameManager} from "./Phaser/Game/GameManager"; import {ResizableScene} from "./Phaser/Login/ResizableScene"; //CoWebsiteManager.loadCoWebsite('https://thecodingmachine.com'); -connectionManager.init(); // Load Jitsi if the environment variable is set. if (JITSI_URL) { @@ -52,6 +51,8 @@ cypressAsserter.gameStarted(); const game = new Phaser.Game(config); +gameManager.init(game.scene); + window.addEventListener('resize', function (event) { const {width, height} = CoWebsiteManager.getGameSize(); From 2852f204f506caa38b438caeac7c92338c584840 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20N=C3=A9grier?= Date: Mon, 12 Oct 2020 17:42:37 +0200 Subject: [PATCH 229/313] Improving error handling upon unknown URL --- front/src/Connexion/ConnectionManager.ts | 2 +- front/src/Phaser/Game/GameManager.ts | 17 ++++++++++---- .../src/Phaser/Reconnecting/FourOFourScene.ts | 23 +++++++++++++++---- front/src/Url/UrlManager.ts | 2 +- 4 files changed, 32 insertions(+), 12 deletions(-) diff --git a/front/src/Connexion/ConnectionManager.ts b/front/src/Connexion/ConnectionManager.ts index 0fea50b5..615f75b9 100644 --- a/front/src/Connexion/ConnectionManager.ts +++ b/front/src/Connexion/ConnectionManager.ts @@ -53,7 +53,7 @@ class ConnectionManager { return Promise.reject('Could not find a user in localstorage'); } } - return Promise.reject('ConnexionManager initialization failed'); + return Promise.reject('ConnexionManager initialization failed: invalid URL'); } public initBenchmark(): void { diff --git a/front/src/Phaser/Game/GameManager.ts b/front/src/Phaser/Game/GameManager.ts index 10277e20..bed098ae 100644 --- a/front/src/Phaser/Game/GameManager.ts +++ b/front/src/Phaser/Game/GameManager.ts @@ -1,6 +1,7 @@ import {GameScene} from "./GameScene"; import {connectionManager} from "../../Connexion/ConnectionManager"; import {Room} from "../../Connexion/Room"; +import {FourOFourSceneName} from "../Reconnecting/FourOFourScene"; export interface HasMovedEvent { direction: string; @@ -14,10 +15,16 @@ export class GameManager { private characterLayers!: string[]; private startRoom!:Room; private sceneManager!: Phaser.Scenes.SceneManager; - + public async init(sceneManager: Phaser.Scenes.SceneManager) { this.sceneManager = sceneManager; - this.startRoom = await connectionManager.initGameConnexion(); + try { + this.startRoom = await connectionManager.initGameConnexion(); + } catch (e) { + this.sceneManager.start(FourOFourSceneName, { + url: window.location.pathname.toString() + }); + } this.loadMap(this.startRoom.url, this.startRoom.ID); } @@ -40,8 +47,8 @@ export class GameManager { getCharacterSelected(): string[] { return this.characterLayers; } - - + + public loadMap(mapUrl: string, roomID: string): void { console.log('Loading map '+roomID+' at url '+mapUrl); const gameIndex = this.sceneManager.getIndex(roomID); @@ -57,7 +64,7 @@ export class GameManager { const endPos = mapUrlStart.indexOf(".json"); return mapUrlStart.substring(startPos, endPos); } - + public async goToStartingMap() { this.sceneManager.start(this.startRoom.ID, {startLayerName: 'global'}); } diff --git a/front/src/Phaser/Reconnecting/FourOFourScene.ts b/front/src/Phaser/Reconnecting/FourOFourScene.ts index 0c91a5bc..3e84b7e9 100644 --- a/front/src/Phaser/Reconnecting/FourOFourScene.ts +++ b/front/src/Phaser/Reconnecting/FourOFourScene.ts @@ -15,7 +15,8 @@ export class FourOFourScene extends Phaser.Scene { private fileNameField!: Text; private logo!: Image; private cat!: Sprite; - private file!: string; + private file: string|undefined; + private url: string|undefined; constructor() { super({ @@ -23,8 +24,9 @@ export class FourOFourScene extends Phaser.Scene { }); } - init({ file }: { file: string }) { + init({ file, url }: { file?: string, url?: string }) { this.file = file; + this.url = url; } preload() { @@ -45,11 +47,22 @@ export class FourOFourScene extends Phaser.Scene { this.mapNotFoundField = new TextField(this, this.game.renderer.width / 2, this.game.renderer.height / 2, "404 - File not found"); this.mapNotFoundField.setOrigin(0.5, 0.5).setCenterAlign(); - this.couldNotFindField = new TextField(this, this.game.renderer.width / 2, this.game.renderer.height / 2 + 24, "Could not load file"); + let text: string = ''; + if (this.file !== undefined) { + text = "Could not load map" + } + if (this.url !== undefined) { + text = "Invalid URL" + } + + this.couldNotFindField = new TextField(this, this.game.renderer.width / 2, this.game.renderer.height / 2 + 24, text); this.couldNotFindField.setOrigin(0.5, 0.5).setCenterAlign(); - this.fileNameField = this.add.text(this.game.renderer.width / 2, this.game.renderer.height / 2 + 38, this.file, { fontFamily: 'Georgia, "Goudy Bookletter 1911", Times, serif', fontSize: '10px' }); - this.fileNameField.setOrigin(0.5, 0.5); + const url = this.file ? this.file : this.url; + if (url !== undefined) { + this.fileNameField = this.add.text(this.game.renderer.width / 2, this.game.renderer.height / 2 + 38, url, { fontFamily: 'Georgia, "Goudy Bookletter 1911", Times, serif', fontSize: '10px' }); + this.fileNameField.setOrigin(0.5, 0.5); + } this.cat = this.physics.add.sprite(this.game.renderer.width / 2, this.game.renderer.height / 2 - 32, 'cat', 6); this.cat.flipY=true; diff --git a/front/src/Url/UrlManager.ts b/front/src/Url/UrlManager.ts index 39f5667d..876e258e 100644 --- a/front/src/Url/UrlManager.ts +++ b/front/src/Url/UrlManager.ts @@ -16,7 +16,7 @@ class UrlManager { return GameConnexionTypes.anonymous; } else if (url.indexOf('@/') > -1) { return GameConnexionTypes.organization; - } else if(url.indexOf('register/')) { + } else if(url.indexOf('register/') > -1) { return GameConnexionTypes.register } else { return GameConnexionTypes.unknown From 0731bd39e500b181f527cceaae2f6ddaf0a295a9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20N=C3=A9grier?= Date: Mon, 12 Oct 2020 18:59:49 +0200 Subject: [PATCH 230/313] Moving back to using ScenePlugin and adding EntryScene --- front/src/Phaser/Game/GameManager.ts | 26 ++++++-------- front/src/Phaser/Game/GameScene.ts | 10 +++--- front/src/Phaser/Login/EnableCameraScene.ts | 2 +- front/src/Phaser/Login/EntryScene.ts | 40 +++++++++++++++++++++ front/src/Url/UrlManager.ts | 14 ++++---- front/src/index.ts | 5 ++- 6 files changed, 65 insertions(+), 32 deletions(-) create mode 100644 front/src/Phaser/Login/EntryScene.ts diff --git a/front/src/Phaser/Game/GameManager.ts b/front/src/Phaser/Game/GameManager.ts index bed098ae..22123d1c 100644 --- a/front/src/Phaser/Game/GameManager.ts +++ b/front/src/Phaser/Game/GameManager.ts @@ -14,18 +14,10 @@ export class GameManager { private playerName!: string; private characterLayers!: string[]; private startRoom!:Room; - private sceneManager!: Phaser.Scenes.SceneManager; - public async init(sceneManager: Phaser.Scenes.SceneManager) { - this.sceneManager = sceneManager; - try { - this.startRoom = await connectionManager.initGameConnexion(); - } catch (e) { - this.sceneManager.start(FourOFourSceneName, { - url: window.location.pathname.toString() - }); - } - this.loadMap(this.startRoom.url, this.startRoom.ID); + public async init(scenePlugin: Phaser.Scenes.ScenePlugin) { + this.startRoom = await connectionManager.initGameConnexion(); + this.loadMap(this.startRoom.url, this.startRoom.ID, scenePlugin); } public setPlayerName(name: string): void { @@ -49,12 +41,13 @@ export class GameManager { } - public loadMap(mapUrl: string, roomID: string): void { + public loadMap(mapUrl: string, roomID: string, scenePlugin: Phaser.Scenes.ScenePlugin): void { console.log('Loading map '+roomID+' at url '+mapUrl); - const gameIndex = this.sceneManager.getIndex(roomID); + const gameIndex = scenePlugin.getIndex(mapUrl); if(gameIndex === -1){ const game : Phaser.Scene = GameScene.createFromUrl(mapUrl, roomID); - this.sceneManager.add(roomID, game, false); + console.log('Adding scene '+mapUrl); + scenePlugin.add(mapUrl, game, false); } } @@ -65,8 +58,9 @@ export class GameManager { return mapUrlStart.substring(startPos, endPos); } - public async goToStartingMap() { - this.sceneManager.start(this.startRoom.ID, {startLayerName: 'global'}); + public async goToStartingMap(scenePlugin: Phaser.Scenes.ScenePlugin) { + console.log('Starting scene '+this.startRoom.url); + scenePlugin.start(this.startRoom.url, {startLayerName: 'global'}); } } diff --git a/front/src/Phaser/Game/GameScene.ts b/front/src/Phaser/Game/GameScene.ts index 602f697e..a22d973a 100644 --- a/front/src/Phaser/Game/GameScene.ts +++ b/front/src/Phaser/Game/GameScene.ts @@ -139,11 +139,11 @@ export class GameScene extends ResizableScene implements CenterListener { private userInputManager!: UserInputManager; static createFromUrl(mapUrlFile: string, instance: string, gameSceneKey: string|null = null): GameScene { - const mapKey = gameManager.getMapKeyByUrl(mapUrlFile); + // We use the map URL as a key if (gameSceneKey === null) { - gameSceneKey = mapKey; + gameSceneKey = mapUrlFile; } - return new GameScene(mapKey, mapUrlFile, instance, gameSceneKey); + return new GameScene(mapUrlFile, mapUrlFile, instance, gameSceneKey); } constructor(MapKey : string, MapUrlFile: string, instance: string, gameSceneKey: string) { @@ -418,7 +418,7 @@ export class GameScene extends ResizableScene implements CenterListener { context.strokeStyle = '#ffffff'; context.stroke(); this.circleTexture.refresh(); - + // Let's pause the scene if the connection is not established yet if (this.connection === undefined) { // Let's wait 0.5 seconds before printing the "connecting" screen to avoid blinking @@ -691,7 +691,7 @@ export class GameScene extends ResizableScene implements CenterListener { // TODO: eventually compute a relative URL const absoluteExitSceneUrl = new URL(exitSceneUrl, this.MapUrlFile).href; - gameManager.loadMap(absoluteExitSceneUrl, instance); + gameManager.loadMap(absoluteExitSceneUrl, instance, this.scene); const exitSceneKey = instance; const tiles : number[] = layer.data as number[]; diff --git a/front/src/Phaser/Login/EnableCameraScene.ts b/front/src/Phaser/Login/EnableCameraScene.ts index 8695464b..3916587a 100644 --- a/front/src/Phaser/Login/EnableCameraScene.ts +++ b/front/src/Phaser/Login/EnableCameraScene.ts @@ -266,7 +266,7 @@ export class EnableCameraScene extends Phaser.Scene { mediaManager.stopCamera(); mediaManager.stopMicrophone(); - gameManager.goToStartingMap(); + gameManager.goToStartingMap(this.scene); } private async getDevices() { diff --git a/front/src/Phaser/Login/EntryScene.ts b/front/src/Phaser/Login/EntryScene.ts new file mode 100644 index 00000000..fec4e880 --- /dev/null +++ b/front/src/Phaser/Login/EntryScene.ts @@ -0,0 +1,40 @@ +import {gameManager} from "../Game/GameManager"; +import {TextField} from "../Components/TextField"; +import {TextInput} from "../Components/TextInput"; +import {ClickButton} from "../Components/ClickButton"; +import Image = Phaser.GameObjects.Image; +import Rectangle = Phaser.GameObjects.Rectangle; +import {PLAYER_RESOURCES, PlayerResourceDescriptionInterface} from "../Entity/Character"; +import {cypressAsserter} from "../../Cypress/CypressAsserter"; +import {SelectCharacterSceneName} from "./SelectCharacterScene"; +import {ResizableScene} from "./ResizableScene"; +import {Scene} from "phaser"; +import {LoginSceneName} from "./LoginScene"; +import {FourOFourSceneName} from "../Reconnecting/FourOFourScene"; + +export const EntrySceneName = "EntryScene"; + +/** + * The EntryScene is not a real scene. It is the first scene loaded and is only used to initialize the gameManager + * and to route to the next correct scene. + */ +export class EntryScene extends Scene { + constructor() { + super({ + key: EntrySceneName + }); + } + + preload() { + } + + create() { + gameManager.init(this.scene).then(() => { + this.scene.start(LoginSceneName); + }).catch(() => { + this.scene.start(FourOFourSceneName, { + url: window.location.pathname.toString() + }); + }); + } +} diff --git a/front/src/Url/UrlManager.ts b/front/src/Url/UrlManager.ts index 876e258e..ae8725bc 100644 --- a/front/src/Url/UrlManager.ts +++ b/front/src/Url/UrlManager.ts @@ -8,7 +8,7 @@ export enum GameConnexionTypes { //this class is responsible with analysing and editing the game's url class UrlManager { - + //todo: use that to detect if we can find a token in localstorage public getGameConnexionType(): GameConnexionTypes { const url = window.location.pathname.toString(); @@ -22,14 +22,14 @@ class UrlManager { return GameConnexionTypes.unknown } } - + public getAnonymousMapUrlStart():string { const match = /\/_\/global\/(.+)/.exec(window.location.pathname.toString()) if (!match) throw new Error('Could not extract startmap url from'+window.location.pathname); - return match[1]; - + return window.location.protocol+'//'+match[1]; + } - + public getOrganizationToken(): string|null { const match = /\/register\/(.+)/.exec(window.location.pathname.toString()); return match ? match [1] : null; @@ -46,7 +46,7 @@ class UrlManager { history.pushState({}, 'WorkAdventure', newUrl); return newUrl; } - + } -export const urlManager = new UrlManager(); \ No newline at end of file +export const urlManager = new UrlManager(); diff --git a/front/src/index.ts b/front/src/index.ts index f57474d7..e12d8707 100644 --- a/front/src/index.ts +++ b/front/src/index.ts @@ -13,6 +13,7 @@ import {CustomizeScene} from "./Phaser/Login/CustomizeScene"; import {CoWebsiteManager} from "./WebRtc/CoWebsiteManager"; import {gameManager} from "./Phaser/Game/GameManager"; import {ResizableScene} from "./Phaser/Login/ResizableScene"; +import {EntryScene} from "./Phaser/Login/EntryScene"; //CoWebsiteManager.loadCoWebsite('https://thecodingmachine.com'); @@ -30,7 +31,7 @@ const config: GameConfig = { width: width / RESOLUTION, height: height / RESOLUTION, parent: "game", - scene: [LoginScene, SelectCharacterScene, EnableCameraScene, ReconnectingScene, FourOFourScene, CustomizeScene], + scene: [EntryScene, LoginScene, SelectCharacterScene, EnableCameraScene, ReconnectingScene, FourOFourScene, CustomizeScene], zoom: RESOLUTION, physics: { default: "arcade", @@ -51,8 +52,6 @@ cypressAsserter.gameStarted(); const game = new Phaser.Game(config); -gameManager.init(game.scene); - window.addEventListener('resize', function (event) { const {width, height} = CoWebsiteManager.getGameSize(); From 3c2f134e4ed92bc3a3c50ac783407a47fbbe97ff Mon Sep 17 00:00:00 2001 From: Gregoire Parant Date: Tue, 13 Oct 2020 09:37:38 +0200 Subject: [PATCH 231/313] Finish report in admin --- back/src/Controller/IoSocketController.ts | 29 +++++++++++++++++------ back/src/Enum/EnvironmentVariable.ts | 4 ++-- 2 files changed, 24 insertions(+), 9 deletions(-) diff --git a/back/src/Controller/IoSocketController.ts b/back/src/Controller/IoSocketController.ts index b8d0d69a..ddf123ce 100644 --- a/back/src/Controller/IoSocketController.ts +++ b/back/src/Controller/IoSocketController.ts @@ -2,7 +2,14 @@ import * as http from "http"; import {MessageUserPosition, Point} from "../Model/Websocket/MessageUserPosition"; //TODO fix import by "_Model/.." import {ExSocketInterface} from "../Model/Websocket/ExSocketInterface"; //TODO fix import by "_Model/.." import Jwt, {JsonWebTokenError} from "jsonwebtoken"; -import {SECRET_KEY, MINIMUM_DISTANCE, GROUP_RADIUS, ALLOW_ARTILLERY} from "../Enum/EnvironmentVariable"; //TODO fix import by "_Enum/..." +import { + SECRET_KEY, + MINIMUM_DISTANCE, + GROUP_RADIUS, + ALLOW_ARTILLERY, + ADMIN_API_URL, + ADMIN_API_TOKEN +} from "../Enum/EnvironmentVariable"; //TODO fix import by "_Enum/..." import {World} from "../Model/World"; import {Group} from "../Model/Group"; import {User} from "../Model/User"; @@ -50,7 +57,7 @@ import {ProtobufUtils} from "../Model/Websocket/ProtobufUtils"; import {App, HttpRequest, TemplatedApp, WebSocket} from "uWebSockets.js" import {parse} from "query-string"; import {cpuTracker} from "../Services/CpuTracker"; -import axios from "axios"; +import Axios from "axios"; function emitInBatch(socket: ExSocketInterface, payload: SubMessage): void { socket.batchedMessages.addPayload(payload); @@ -553,14 +560,22 @@ export class IoSocketController { private handleReportMessage(client: ExSocketInterface, reportPlayerMessage: ReportPlayerMessage) { try { let reportedSocket = this.sockets.get(reportPlayerMessage.getReporteduserid()); - if(!reportedSocket){ + if (!reportedSocket) { throw 'reported socket user not found'; } //TODO report user on admin application - axios.post('/report', { - reportedUserId: reportPlayerMessage.getReporteduserid(), - reportedUserComment: reportPlayerMessage.getReportcomment(), - reporterUserId: client.userUuid, + console.log('ADMIN_API_URL', ADMIN_API_URL); + console.log('ADMIN_API_TOKEN', ADMIN_API_TOKEN); + Axios.post(`${ADMIN_API_URL}/aoi/report`, { + reportedUserUuid: client.userUuid, + reportedUserComment: reportPlayerMessage.getReportcomment(), + reporterUserUuid: client.userUuid, + }, + { + headers: {"Authorization": `${ADMIN_API_TOKEN}`} + }).catch((err) => { + console.error(err); + throw err; }); } catch (e) { console.error('An error occurred on "handleReportMessage"'); diff --git a/back/src/Enum/EnvironmentVariable.ts b/back/src/Enum/EnvironmentVariable.ts index b69ba00c..61ab4cc9 100644 --- a/back/src/Enum/EnvironmentVariable.ts +++ b/back/src/Enum/EnvironmentVariable.ts @@ -3,8 +3,8 @@ const URL_ROOM_STARTED = "/Floor0/floor0.json"; const MINIMUM_DISTANCE = process.env.MINIMUM_DISTANCE ? Number(process.env.MINIMUM_DISTANCE) : 64; const GROUP_RADIUS = process.env.GROUP_RADIUS ? Number(process.env.GROUP_RADIUS) : 48; const ALLOW_ARTILLERY = process.env.ALLOW_ARTILLERY ? process.env.ALLOW_ARTILLERY == 'true' : false; -const ADMIN_API_URL = process.env.ADMIN_API_URL || null; -const ADMIN_API_TOKEN = process.env.ADMIN_API_TOKEN || null; +const ADMIN_API_URL = process.env.ADMIN_API_URL || 'http://admin'; +const ADMIN_API_TOKEN = process.env.ADMIN_API_TOKEN || 'myapitoken'; const CPU_OVERHEAT_THRESHOLD = Number(process.env.CPU_OVERHEAT_THRESHOLD) || 80; export { From 9a04836215ad27239c73ccf3166844cb6c7b6c91 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20N=C3=A9grier?= Date: Tue, 13 Oct 2020 10:26:27 +0200 Subject: [PATCH 232/313] Dynamically import Quill We load Quill only if it is needed (after all, only admins need Quill) --- front/dist/index.html | 6 - front/package.json | 3 +- .../ConsoleGlobalMessageManager.ts | 57 +- front/yarn.lock | 578 +++++++++--------- 4 files changed, 324 insertions(+), 320 deletions(-) diff --git a/front/dist/index.html b/front/dist/index.html index 9d883ffe..5984af7b 100644 --- a/front/dist/index.html +++ b/front/dist/index.html @@ -6,12 +6,6 @@ content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"> - - - - - -