feat(tstest): Implement dynamic port allocation for HTTP and WebSocket connections, add tests for port validation
This commit is contained in:
		| @@ -43,6 +43,7 @@ | |||||||
|     "@push.rocks/smartjson": "^5.0.20", |     "@push.rocks/smartjson": "^5.0.20", | ||||||
|     "@push.rocks/smartlog": "^3.1.9", |     "@push.rocks/smartlog": "^3.1.9", | ||||||
|     "@push.rocks/smartmongo": "^2.0.12", |     "@push.rocks/smartmongo": "^2.0.12", | ||||||
|  |     "@push.rocks/smartnetwork": "^4.2.0", | ||||||
|     "@push.rocks/smartpath": "^6.0.0", |     "@push.rocks/smartpath": "^6.0.0", | ||||||
|     "@push.rocks/smartpromise": "^4.2.3", |     "@push.rocks/smartpromise": "^4.2.3", | ||||||
|     "@push.rocks/smartrequest": "^4.3.1", |     "@push.rocks/smartrequest": "^4.3.1", | ||||||
|   | |||||||
							
								
								
									
										134
									
								
								pnpm-lock.yaml
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										134
									
								
								pnpm-lock.yaml
									
									
									
										generated
									
									
									
								
							| @@ -53,6 +53,9 @@ importers: | |||||||
|       '@push.rocks/smartmongo': |       '@push.rocks/smartmongo': | ||||||
|         specifier: ^2.0.12 |         specifier: ^2.0.12 | ||||||
|         version: 2.0.12(socks@2.8.7) |         version: 2.0.12(socks@2.8.7) | ||||||
|  |       '@push.rocks/smartnetwork': | ||||||
|  |         specifier: ^4.2.0 | ||||||
|  |         version: 4.2.0 | ||||||
|       '@push.rocks/smartpath': |       '@push.rocks/smartpath': | ||||||
|         specifier: ^6.0.0 |         specifier: ^6.0.0 | ||||||
|         version: 6.0.0 |         version: 6.0.0 | ||||||
| @@ -614,9 +617,6 @@ packages: | |||||||
|     resolution: {integrity: sha512-dOOXgzqaDoHu5qqMEPLKEgLz5CeIA7q8+1W62mCvFVCOqeC71UoTGJ4u1xUSOpIl2J1x2pqrNULkFteUeZW3/A==} |     resolution: {integrity: sha512-dOOXgzqaDoHu5qqMEPLKEgLz5CeIA7q8+1W62mCvFVCOqeC71UoTGJ4u1xUSOpIl2J1x2pqrNULkFteUeZW3/A==} | ||||||
|     engines: {node: '>= 8.0.0'} |     engines: {node: '>= 8.0.0'} | ||||||
|  |  | ||||||
|   '@leichtgewicht/ip-codec@2.0.5': |  | ||||||
|     resolution: {integrity: sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==} |  | ||||||
|  |  | ||||||
|   '@lit-labs/ssr-dom-shim@1.4.0': |   '@lit-labs/ssr-dom-shim@1.4.0': | ||||||
|     resolution: {integrity: sha512-ficsEARKnmmW5njugNYKipTm4SFnbik7CXtoencDZzmzo/dQ+2Q0bgkzJuoJP20Aj0F+izzJjOqsnkd6F/o1bw==} |     resolution: {integrity: sha512-ficsEARKnmmW5njugNYKipTm4SFnbik7CXtoencDZzmzo/dQ+2Q0bgkzJuoJP20Aj0F+izzJjOqsnkd6F/o1bw==} | ||||||
|  |  | ||||||
| @@ -816,8 +816,8 @@ packages: | |||||||
|   '@push.rocks/smartmongo@2.0.12': |   '@push.rocks/smartmongo@2.0.12': | ||||||
|     resolution: {integrity: sha512-NglYiO14BikxnlvW6JF18FtopBtaWQEGAtPxHmmSCbyhU8Mi0aEFO7VgCasE9Kguba/wcR597qhcDEdcpBg1eQ==} |     resolution: {integrity: sha512-NglYiO14BikxnlvW6JF18FtopBtaWQEGAtPxHmmSCbyhU8Mi0aEFO7VgCasE9Kguba/wcR597qhcDEdcpBg1eQ==} | ||||||
|  |  | ||||||
|   '@push.rocks/smartnetwork@4.1.2': |   '@push.rocks/smartnetwork@4.2.0': | ||||||
|     resolution: {integrity: sha512-TjucG72ooHgzAUpNu2LAv4iFoettmZq2aEWhhzIa7AKcOvt4yxsk3Vl73guhKRohTfhdRauPcH5OHISLUHJbYA==} |     resolution: {integrity: sha512-XkRE2hQFCxUKzeD54MhbWlZAEVGyOhjU68A0zP9r3wsVjsVRqz38PwoM2GrhMrW4gtPa1j1t6cEUv1WNTwfo/Q==} | ||||||
|  |  | ||||||
|   '@push.rocks/smartnpm@2.0.6': |   '@push.rocks/smartnpm@2.0.6': | ||||||
|     resolution: {integrity: sha512-7anKDOjX6gXWs1IAc+YWz9ZZ8gDsTwaLh+CxRnGHjAawOmK788NrrgVCg2Fb3qojrPnoxecc46F8Ivp1BT7Izw==} |     resolution: {integrity: sha512-7anKDOjX6gXWs1IAc+YWz9ZZ8gDsTwaLh+CxRnGHjAawOmK788NrrgVCg2Fb3qojrPnoxecc46F8Ivp1BT7Izw==} | ||||||
| @@ -1408,9 +1408,6 @@ packages: | |||||||
|   '@types/debug@4.1.12': |   '@types/debug@4.1.12': | ||||||
|     resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} |     resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} | ||||||
|  |  | ||||||
|   '@types/default-gateway@7.2.2': |  | ||||||
|     resolution: {integrity: sha512-35C93fYQlnLKLASkMPoxRvok4fENwB3By9clRLd2I/08n/XRl0pCdf7EB17K5oMMwZu8NBYA8i66jH5r/LYBKA==} |  | ||||||
|  |  | ||||||
|   '@types/express-serve-static-core@5.0.7': |   '@types/express-serve-static-core@5.0.7': | ||||||
|     resolution: {integrity: sha512-R+33OsgWw7rOhD1emjU7dzCDHucJrgJXMA5PYCzJxVil0dsyx5iBEPHqpPfiKNJQb7lZ1vxwoLR4Z87bBUpeGQ==} |     resolution: {integrity: sha512-R+33OsgWw7rOhD1emjU7dzCDHucJrgJXMA5PYCzJxVil0dsyx5iBEPHqpPfiKNJQb7lZ1vxwoLR4Z87bBUpeGQ==} | ||||||
|  |  | ||||||
| @@ -1759,10 +1756,6 @@ packages: | |||||||
|     resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} |     resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} | ||||||
|     engines: {node: '>=12'} |     engines: {node: '>=12'} | ||||||
|  |  | ||||||
|   clone-regexp@3.0.0: |  | ||||||
|     resolution: {integrity: sha512-ujdnoq2Kxb8s3ItNBtnYeXdm07FcU0u8ARAT1lQ2YdMwQC+cdiXX8KoqMVuglztILivceTtp4ivqGSmEmhBUJw==} |  | ||||||
|     engines: {node: '>=12'} |  | ||||||
|  |  | ||||||
|   co@4.6.0: |   co@4.6.0: | ||||||
|     resolution: {integrity: sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=} |     resolution: {integrity: sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=} | ||||||
|     engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'} |     engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'} | ||||||
| @@ -1824,10 +1817,6 @@ packages: | |||||||
|     resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} |     resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} | ||||||
|     engines: {node: '>= 0.6'} |     engines: {node: '>= 0.6'} | ||||||
|  |  | ||||||
|   convert-hrtime@5.0.0: |  | ||||||
|     resolution: {integrity: sha512-lOETlkIeYSJWcbbcvjRKGxVMXJR+8+OQb/mTPbA4ObPMytYIsUbuOE0Jzy60hjARYszq1id0j8KgVhC+WGZVTg==} |  | ||||||
|     engines: {node: '>=12'} |  | ||||||
|  |  | ||||||
|   cookie-signature@1.2.2: |   cookie-signature@1.2.2: | ||||||
|     resolution: {integrity: sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==} |     resolution: {integrity: sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==} | ||||||
|     engines: {node: '>=6.6.0'} |     engines: {node: '>=6.6.0'} | ||||||
| @@ -1964,14 +1953,6 @@ packages: | |||||||
|     resolution: {integrity: sha512-MdceRRWqltEG2dZqO769g27N/3PXfcKl04VhYnBlo2YhH7zPi88VebsjTKclaOyiuMaGU72hTfw3VkUitGcVCA==} |     resolution: {integrity: sha512-MdceRRWqltEG2dZqO769g27N/3PXfcKl04VhYnBlo2YhH7zPi88VebsjTKclaOyiuMaGU72hTfw3VkUitGcVCA==} | ||||||
|     engines: {node: '>=4.5.0'} |     engines: {node: '>=4.5.0'} | ||||||
|  |  | ||||||
|   dns-packet@5.6.1: |  | ||||||
|     resolution: {integrity: sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==} |  | ||||||
|     engines: {node: '>=6'} |  | ||||||
|  |  | ||||||
|   dns-socket@4.2.2: |  | ||||||
|     resolution: {integrity: sha512-BDeBd8najI4/lS00HSKpdFia+OvUMytaVjfzR9n5Lq8MlZRSvtbI+uLtx1+XmQFls5wFU9dssccTmQQ6nfpjdg==} |  | ||||||
|     engines: {node: '>=6'} |  | ||||||
|  |  | ||||||
|   dunder-proto@1.0.1: |   dunder-proto@1.0.1: | ||||||
|     resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} |     resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} | ||||||
|     engines: {node: '>= 0.4'} |     engines: {node: '>= 0.4'} | ||||||
| @@ -2240,10 +2221,6 @@ packages: | |||||||
|   function-bind@1.1.2: |   function-bind@1.1.2: | ||||||
|     resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} |     resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} | ||||||
|  |  | ||||||
|   function-timeout@0.1.1: |  | ||||||
|     resolution: {integrity: sha512-0NVVC0TaP7dSTvn1yMiy6d6Q8gifzbvQafO46RtLG/kHJUBNd+pVRGOBoK44wNBvtSPUJRfdVvkFdD3p0xvyZg==} |  | ||||||
|     engines: {node: '>=14.16'} |  | ||||||
|  |  | ||||||
|   get-caller-file@2.0.5: |   get-caller-file@2.0.5: | ||||||
|     resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} |     resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} | ||||||
|     engines: {node: 6.* || 8.* || >= 10.*} |     engines: {node: 6.* || 8.* || >= 10.*} | ||||||
| @@ -2291,10 +2268,6 @@ packages: | |||||||
|     resolution: {integrity: sha512-mThBblvlAF1d4O5oqyvN+ZxLAYwIJK7bpMxgYqPD9okW0C3qm5FFn7k811QrcuEBwaogR3ngOFoCfs6mRv7teQ==} |     resolution: {integrity: sha512-mThBblvlAF1d4O5oqyvN+ZxLAYwIJK7bpMxgYqPD9okW0C3qm5FFn7k811QrcuEBwaogR3ngOFoCfs6mRv7teQ==} | ||||||
|     engines: {node: '>=14.16'} |     engines: {node: '>=14.16'} | ||||||
|  |  | ||||||
|   got@13.0.0: |  | ||||||
|     resolution: {integrity: sha512-XfBk1CxOOScDcMr9O1yKkNaQyy865NbYs+F7dr4H0LZMVgCj2Le59k6PqbNHoL5ToeaEQUYh6c6yMfVcc6SJxA==} |  | ||||||
|     engines: {node: '>=16'} |  | ||||||
|  |  | ||||||
|   graceful-fs@4.2.10: |   graceful-fs@4.2.10: | ||||||
|     resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==} |     resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==} | ||||||
|  |  | ||||||
| @@ -2402,10 +2375,6 @@ packages: | |||||||
|     resolution: {integrity: sha512-NWv9YLW4PoW2B7xtzaS3NCot75m6nK7Icdv0o3lfMceJVRfSoQwqD4wEH5rLwoKJwUiZ/rfpiVBhnaF0FK4HoA==} |     resolution: {integrity: sha512-NWv9YLW4PoW2B7xtzaS3NCot75m6nK7Icdv0o3lfMceJVRfSoQwqD4wEH5rLwoKJwUiZ/rfpiVBhnaF0FK4HoA==} | ||||||
|     engines: {node: '>= 12'} |     engines: {node: '>= 12'} | ||||||
|  |  | ||||||
|   ip-regex@5.0.0: |  | ||||||
|     resolution: {integrity: sha512-fOCG6lhoKKakwv+C6KdsOnGvgXnmgfmp0myi3bcNwj3qfwPAxRKWEuFhvEFF7ceYIz6+1jRZ+yguLFAmUNPEfw==} |  | ||||||
|     engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} |  | ||||||
|  |  | ||||||
|   ipaddr.js@1.9.1: |   ipaddr.js@1.9.1: | ||||||
|     resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} |     resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} | ||||||
|     engines: {node: '>= 0.10'} |     engines: {node: '>= 0.10'} | ||||||
| @@ -2429,10 +2398,6 @@ packages: | |||||||
|     resolution: {integrity: sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==} |     resolution: {integrity: sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==} | ||||||
|     engines: {node: '>= 0.4'} |     engines: {node: '>= 0.4'} | ||||||
|  |  | ||||||
|   is-ip@5.0.1: |  | ||||||
|     resolution: {integrity: sha512-FCsGHdlrOnZQcp0+XT5a+pYowf33itBalCl+7ovNXC/7o5BhIpG14M3OrpPPdBSIQJCm+0M5+9mO7S9VVTTCFw==} |  | ||||||
|     engines: {node: '>=14.16'} |  | ||||||
|  |  | ||||||
|   is-nan@1.3.2: |   is-nan@1.3.2: | ||||||
|     resolution: {integrity: sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==} |     resolution: {integrity: sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==} | ||||||
|     engines: {node: '>= 0.4'} |     engines: {node: '>= 0.4'} | ||||||
| @@ -2456,10 +2421,6 @@ packages: | |||||||
|     resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==} |     resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==} | ||||||
|     engines: {node: '>= 0.4'} |     engines: {node: '>= 0.4'} | ||||||
|  |  | ||||||
|   is-regexp@3.1.0: |  | ||||||
|     resolution: {integrity: sha512-rbku49cWloU5bSMI+zaRaXdQHXnthP6DZ/vLnfdSKyL4zUzuWnomtOEiZZOd+ioQ+avFo/qau3KPTc7Fjy1uPA==} |  | ||||||
|     engines: {node: '>=12'} |  | ||||||
|  |  | ||||||
|   is-stream@2.0.1: |   is-stream@2.0.1: | ||||||
|     resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} |     resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} | ||||||
|     engines: {node: '>=8'} |     engines: {node: '>=8'} | ||||||
| @@ -3131,10 +3092,6 @@ packages: | |||||||
|   proxy-from-env@1.1.0: |   proxy-from-env@1.1.0: | ||||||
|     resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} |     resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} | ||||||
|  |  | ||||||
|   public-ip@7.0.1: |  | ||||||
|     resolution: {integrity: sha512-DdNcqcIbI0wEeCBcqX+bmZpUCvrDMJHXE553zgyG1MZ8S1a/iCCxmK9iTjjql+SpHSv4cZkmRv5/zGYW93AlCw==} |  | ||||||
|     engines: {node: '>=18'} |  | ||||||
|  |  | ||||||
|   pump@3.0.3: |   pump@3.0.3: | ||||||
|     resolution: {integrity: sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==} |     resolution: {integrity: sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==} | ||||||
|  |  | ||||||
| @@ -3446,10 +3403,6 @@ packages: | |||||||
|     resolution: {integrity: sha512-FhwotcEqjr241ZbjFzjlIYg6c5/L/s4yBGWSMvJ9UoExiSqL+FnFA/CaeZx17WGaZMS/4SOZp8wH18jSS4R4lw==} |     resolution: {integrity: sha512-FhwotcEqjr241ZbjFzjlIYg6c5/L/s4yBGWSMvJ9UoExiSqL+FnFA/CaeZx17WGaZMS/4SOZp8wH18jSS4R4lw==} | ||||||
|     engines: {node: '>=16'} |     engines: {node: '>=16'} | ||||||
|  |  | ||||||
|   super-regex@0.2.0: |  | ||||||
|     resolution: {integrity: sha512-WZzIx3rC1CvbMDloLsVw0lkZVKJWbrkJ0k1ghKFmcnPrW1+jWbgTkTEWVtD9lMdmI4jZEz40+naBxl1dCUhXXw==} |  | ||||||
|     engines: {node: '>=14.16'} |  | ||||||
|  |  | ||||||
|   supports-color@5.5.0: |   supports-color@5.5.0: | ||||||
|     resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} |     resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} | ||||||
|     engines: {node: '>=4'} |     engines: {node: '>=4'} | ||||||
| @@ -3460,8 +3413,8 @@ packages: | |||||||
|   symbol-tree@3.2.4: |   symbol-tree@3.2.4: | ||||||
|     resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} |     resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} | ||||||
|  |  | ||||||
|   systeminformation@5.27.7: |   systeminformation@5.27.8: | ||||||
|     resolution: {integrity: sha512-saaqOoVEEFaux4v0K8Q7caiauRwjXC4XbD2eH60dxHXbpKxQ8kH9Rf7Jh+nryKpOUSEFxtCdBlSUx0/lO6rwRg==} |     resolution: {integrity: sha512-d3Z0gaQO1MlUxzDUKsmXz5y4TOBCMZ8IyijzaYOykV3AcNOTQ7mT+tpndUOXYNSxzLK3la8G32xiUFvZ0/s6PA==} | ||||||
|     engines: {node: '>=8.0.0'} |     engines: {node: '>=8.0.0'} | ||||||
|     os: [darwin, linux, win32, freebsd, openbsd, netbsd, sunos, android] |     os: [darwin, linux, win32, freebsd, openbsd, netbsd, sunos, android] | ||||||
|     hasBin: true |     hasBin: true | ||||||
| @@ -3487,10 +3440,6 @@ packages: | |||||||
|   through@2.3.8: |   through@2.3.8: | ||||||
|     resolution: {integrity: sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=} |     resolution: {integrity: sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=} | ||||||
|  |  | ||||||
|   time-span@5.1.0: |  | ||||||
|     resolution: {integrity: sha512-75voc/9G4rDIJleOo4jPvN4/YC4GRZrY8yy1uU4lwrB3XEQbWve8zXoO5No4eFrGcTAMYyoY67p8jRQdtA1HbA==} |  | ||||||
|     engines: {node: '>=12'} |  | ||||||
|  |  | ||||||
|   tiny-worker@2.3.0: |   tiny-worker@2.3.0: | ||||||
|     resolution: {integrity: sha512-pJ70wq5EAqTAEl9IkGzA+fN0836rycEuz2Cn6yeZ6FRzlVS5IDOkFHpIoEsksPRQV34GDqXm65+OlnZqUSyK2g==} |     resolution: {integrity: sha512-pJ70wq5EAqTAEl9IkGzA+fN0836rycEuz2Cn6yeZ6FRzlVS5IDOkFHpIoEsksPRQV34GDqXm65+OlnZqUSyK2g==} | ||||||
|  |  | ||||||
| @@ -4969,8 +4918,6 @@ snapshots: | |||||||
|     transitivePeerDependencies: |     transitivePeerDependencies: | ||||||
|       - supports-color |       - supports-color | ||||||
|  |  | ||||||
|   '@leichtgewicht/ip-codec@2.0.5': {} |  | ||||||
|  |  | ||||||
|   '@lit-labs/ssr-dom-shim@1.4.0': {} |   '@lit-labs/ssr-dom-shim@1.4.0': {} | ||||||
|  |  | ||||||
|   '@lit/reactive-element@2.1.1': |   '@lit/reactive-element@2.1.1': | ||||||
| @@ -5420,15 +5367,13 @@ snapshots: | |||||||
|       - socks |       - socks | ||||||
|       - supports-color |       - supports-color | ||||||
|  |  | ||||||
|   '@push.rocks/smartnetwork@4.1.2': |   '@push.rocks/smartnetwork@4.2.0': | ||||||
|     dependencies: |     dependencies: | ||||||
|       '@push.rocks/smartping': 1.0.8 |       '@push.rocks/smartping': 1.0.8 | ||||||
|       '@push.rocks/smartpromise': 4.2.3 |       '@push.rocks/smartpromise': 4.2.3 | ||||||
|       '@push.rocks/smartstring': 4.0.15 |       '@push.rocks/smartstring': 4.0.15 | ||||||
|       '@types/default-gateway': 7.2.2 |  | ||||||
|       isopen: 1.3.0 |       isopen: 1.3.0 | ||||||
|       public-ip: 7.0.1 |       systeminformation: 5.27.8 | ||||||
|       systeminformation: 5.27.7 |  | ||||||
|  |  | ||||||
|   '@push.rocks/smartnpm@2.0.6': |   '@push.rocks/smartnpm@2.0.6': | ||||||
|     dependencies: |     dependencies: | ||||||
| @@ -5476,7 +5421,7 @@ snapshots: | |||||||
|       '@push.rocks/smartbuffer': 3.0.5 |       '@push.rocks/smartbuffer': 3.0.5 | ||||||
|       '@push.rocks/smartdelay': 3.0.5 |       '@push.rocks/smartdelay': 3.0.5 | ||||||
|       '@push.rocks/smartfile': 11.2.7 |       '@push.rocks/smartfile': 11.2.7 | ||||||
|       '@push.rocks/smartnetwork': 4.1.2 |       '@push.rocks/smartnetwork': 4.2.0 | ||||||
|       '@push.rocks/smartpath': 6.0.0 |       '@push.rocks/smartpath': 6.0.0 | ||||||
|       '@push.rocks/smartpromise': 4.2.3 |       '@push.rocks/smartpromise': 4.2.3 | ||||||
|       '@push.rocks/smartpuppeteer': 2.0.5(typescript@5.9.2) |       '@push.rocks/smartpuppeteer': 2.0.5(typescript@5.9.2) | ||||||
| @@ -6361,8 +6306,6 @@ snapshots: | |||||||
|     dependencies: |     dependencies: | ||||||
|       '@types/ms': 2.1.0 |       '@types/ms': 2.1.0 | ||||||
|  |  | ||||||
|   '@types/default-gateway@7.2.2': {} |  | ||||||
|  |  | ||||||
|   '@types/express-serve-static-core@5.0.7': |   '@types/express-serve-static-core@5.0.7': | ||||||
|     dependencies: |     dependencies: | ||||||
|       '@types/node': 22.17.2 |       '@types/node': 22.17.2 | ||||||
| @@ -6712,10 +6655,6 @@ snapshots: | |||||||
|       strip-ansi: 6.0.1 |       strip-ansi: 6.0.1 | ||||||
|       wrap-ansi: 7.0.0 |       wrap-ansi: 7.0.0 | ||||||
|  |  | ||||||
|   clone-regexp@3.0.0: |  | ||||||
|     dependencies: |  | ||||||
|       is-regexp: 3.1.0 |  | ||||||
|  |  | ||||||
|   co@4.6.0: {} |   co@4.6.0: {} | ||||||
|  |  | ||||||
|   color-convert@1.9.3: |   color-convert@1.9.3: | ||||||
| @@ -6774,8 +6713,6 @@ snapshots: | |||||||
|  |  | ||||||
|   content-type@1.0.5: {} |   content-type@1.0.5: {} | ||||||
|  |  | ||||||
|   convert-hrtime@5.0.0: {} |  | ||||||
|  |  | ||||||
|   cookie-signature@1.2.2: {} |   cookie-signature@1.2.2: {} | ||||||
|  |  | ||||||
|   cookie@0.7.2: {} |   cookie@0.7.2: {} | ||||||
| @@ -6883,14 +6820,6 @@ snapshots: | |||||||
|     dependencies: |     dependencies: | ||||||
|       streamsearch: 0.1.2 |       streamsearch: 0.1.2 | ||||||
|  |  | ||||||
|   dns-packet@5.6.1: |  | ||||||
|     dependencies: |  | ||||||
|       '@leichtgewicht/ip-codec': 2.0.5 |  | ||||||
|  |  | ||||||
|   dns-socket@4.2.2: |  | ||||||
|     dependencies: |  | ||||||
|       dns-packet: 5.6.1 |  | ||||||
|  |  | ||||||
|   dunder-proto@1.0.1: |   dunder-proto@1.0.1: | ||||||
|     dependencies: |     dependencies: | ||||||
|       call-bind-apply-helpers: 1.0.2 |       call-bind-apply-helpers: 1.0.2 | ||||||
| @@ -7208,8 +7137,6 @@ snapshots: | |||||||
|  |  | ||||||
|   function-bind@1.1.2: {} |   function-bind@1.1.2: {} | ||||||
|  |  | ||||||
|   function-timeout@0.1.1: {} |  | ||||||
|  |  | ||||||
|   get-caller-file@2.0.5: {} |   get-caller-file@2.0.5: {} | ||||||
|  |  | ||||||
|   get-intrinsic@1.3.0: |   get-intrinsic@1.3.0: | ||||||
| @@ -7287,20 +7214,6 @@ snapshots: | |||||||
|       p-cancelable: 3.0.0 |       p-cancelable: 3.0.0 | ||||||
|       responselike: 3.0.0 |       responselike: 3.0.0 | ||||||
|  |  | ||||||
|   got@13.0.0: |  | ||||||
|     dependencies: |  | ||||||
|       '@sindresorhus/is': 5.6.0 |  | ||||||
|       '@szmarczak/http-timer': 5.0.1 |  | ||||||
|       cacheable-lookup: 7.0.0 |  | ||||||
|       cacheable-request: 10.2.14 |  | ||||||
|       decompress-response: 6.0.0 |  | ||||||
|       form-data-encoder: 2.1.4 |  | ||||||
|       get-stream: 6.0.1 |  | ||||||
|       http2-wrapper: 2.2.1 |  | ||||||
|       lowercase-keys: 3.0.0 |  | ||||||
|       p-cancelable: 3.0.0 |  | ||||||
|       responselike: 3.0.0 |  | ||||||
|  |  | ||||||
|   graceful-fs@4.2.10: {} |   graceful-fs@4.2.10: {} | ||||||
|  |  | ||||||
|   graceful-fs@4.2.11: {} |   graceful-fs@4.2.11: {} | ||||||
| @@ -7435,8 +7348,6 @@ snapshots: | |||||||
|  |  | ||||||
|   ip-address@10.0.1: {} |   ip-address@10.0.1: {} | ||||||
|  |  | ||||||
|   ip-regex@5.0.0: {} |  | ||||||
|  |  | ||||||
|   ipaddr.js@1.9.1: {} |   ipaddr.js@1.9.1: {} | ||||||
|  |  | ||||||
|   is-arrayish@0.2.1: {} |   is-arrayish@0.2.1: {} | ||||||
| @@ -7454,11 +7365,6 @@ snapshots: | |||||||
|       has-tostringtag: 1.0.2 |       has-tostringtag: 1.0.2 | ||||||
|       safe-regex-test: 1.1.0 |       safe-regex-test: 1.1.0 | ||||||
|  |  | ||||||
|   is-ip@5.0.1: |  | ||||||
|     dependencies: |  | ||||||
|       ip-regex: 5.0.0 |  | ||||||
|       super-regex: 0.2.0 |  | ||||||
|  |  | ||||||
|   is-nan@1.3.2: |   is-nan@1.3.2: | ||||||
|     dependencies: |     dependencies: | ||||||
|       call-bind: 1.0.8 |       call-bind: 1.0.8 | ||||||
| @@ -7479,8 +7385,6 @@ snapshots: | |||||||
|       has-tostringtag: 1.0.2 |       has-tostringtag: 1.0.2 | ||||||
|       hasown: 2.0.2 |       hasown: 2.0.2 | ||||||
|  |  | ||||||
|   is-regexp@3.1.0: {} |  | ||||||
|  |  | ||||||
|   is-stream@2.0.1: {} |   is-stream@2.0.1: {} | ||||||
|  |  | ||||||
|   is-stream@4.0.1: {} |   is-stream@4.0.1: {} | ||||||
| @@ -8315,12 +8219,6 @@ snapshots: | |||||||
|  |  | ||||||
|   proxy-from-env@1.1.0: {} |   proxy-from-env@1.1.0: {} | ||||||
|  |  | ||||||
|   public-ip@7.0.1: |  | ||||||
|     dependencies: |  | ||||||
|       dns-socket: 4.2.2 |  | ||||||
|       got: 13.0.0 |  | ||||||
|       is-ip: 5.0.1 |  | ||||||
|  |  | ||||||
|   pump@3.0.3: |   pump@3.0.3: | ||||||
|     dependencies: |     dependencies: | ||||||
|       end-of-stream: 1.4.5 |       end-of-stream: 1.4.5 | ||||||
| @@ -8761,12 +8659,6 @@ snapshots: | |||||||
|       '@tokenizer/token': 0.3.0 |       '@tokenizer/token': 0.3.0 | ||||||
|       peek-readable: 5.4.2 |       peek-readable: 5.4.2 | ||||||
|  |  | ||||||
|   super-regex@0.2.0: |  | ||||||
|     dependencies: |  | ||||||
|       clone-regexp: 3.0.0 |  | ||||||
|       function-timeout: 0.1.1 |  | ||||||
|       time-span: 5.1.0 |  | ||||||
|  |  | ||||||
|   supports-color@5.5.0: |   supports-color@5.5.0: | ||||||
|     dependencies: |     dependencies: | ||||||
|       has-flag: 3.0.0 |       has-flag: 3.0.0 | ||||||
| @@ -8775,7 +8667,7 @@ snapshots: | |||||||
|  |  | ||||||
|   symbol-tree@3.2.4: {} |   symbol-tree@3.2.4: {} | ||||||
|  |  | ||||||
|   systeminformation@5.27.7: {} |   systeminformation@5.27.8: {} | ||||||
|  |  | ||||||
|   tar-fs@3.1.0: |   tar-fs@3.1.0: | ||||||
|     dependencies: |     dependencies: | ||||||
| @@ -8816,10 +8708,6 @@ snapshots: | |||||||
|  |  | ||||||
|   through@2.3.8: {} |   through@2.3.8: {} | ||||||
|  |  | ||||||
|   time-span@5.1.0: |  | ||||||
|     dependencies: |  | ||||||
|       convert-hrtime: 5.0.0 |  | ||||||
|  |  | ||||||
|   tiny-worker@2.3.0: |   tiny-worker@2.3.0: | ||||||
|     dependencies: |     dependencies: | ||||||
|       esm: 3.2.25 |       esm: 3.2.25 | ||||||
|   | |||||||
							
								
								
									
										29
									
								
								test/tapbundle/test.dynamicports.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								test/tapbundle/test.dynamicports.ts
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,29 @@ | |||||||
|  | import { tap, expect } from '../../ts_tapbundle/index.js'; | ||||||
|  |  | ||||||
|  | tap.test('should be running in browser with dynamic ports', async () => { | ||||||
|  |   // Check that we're in a browser environment | ||||||
|  |   expect(typeof window).toEqual('object'); | ||||||
|  |   expect(typeof globalThis.testdom).toEqual('boolean'); | ||||||
|  |   expect(globalThis.testdom).toBeTrue(); | ||||||
|  |    | ||||||
|  |   // Check that the WebSocket port was injected | ||||||
|  |   expect(typeof globalThis.wsPort).toEqual('number'); | ||||||
|  |   expect(globalThis.wsPort).toBeGreaterThan(29999); | ||||||
|  |   expect(globalThis.wsPort).toBeLessThan(40001); | ||||||
|  |    | ||||||
|  |   console.log(`Browser test running with dynamic WebSocket port: ${globalThis.wsPort}`); | ||||||
|  | }); | ||||||
|  |  | ||||||
|  | tap.test('should have different port than default 8080', async () => { | ||||||
|  |   // The old hardcoded port was 8080, verify we're not using it | ||||||
|  |   expect(globalThis.wsPort).not.toEqual(8080); | ||||||
|  | }); | ||||||
|  |  | ||||||
|  | const testPromise = tap.start(); | ||||||
|  |  | ||||||
|  | // Export promise for browser compatibility | ||||||
|  | if (typeof globalThis !== 'undefined') { | ||||||
|  |   (globalThis as any).tapPromise = testPromise; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | export default testPromise; | ||||||
| @@ -316,6 +316,32 @@ import '${absoluteTestFile.replace(/\\/g, '/')}'; | |||||||
|     return tapParser; |     return tapParser; | ||||||
|   } |   } | ||||||
|  |  | ||||||
|  |   private async findFreePorts(): Promise<{ httpPort: number; wsPort: number }> { | ||||||
|  |     const smartnetwork = new plugins.smartnetwork.SmartNetwork(); | ||||||
|  |      | ||||||
|  |     // Find HTTP port in range 30000-40000 | ||||||
|  |     const httpPort = await smartnetwork.findFreePort(30000, 40000); | ||||||
|  |     if (!httpPort) { | ||||||
|  |       throw new Error('Could not find a free HTTP port in range 30000-40000'); | ||||||
|  |     } | ||||||
|  |      | ||||||
|  |     // Find WebSocket port in range 30000-40000 (different from HTTP port) | ||||||
|  |     let wsPort = await smartnetwork.findFreePort(httpPort + 1, 40000); | ||||||
|  |     if (!wsPort) { | ||||||
|  |       // Try again from the beginning of the range if we couldn't find one after httpPort | ||||||
|  |       wsPort = await smartnetwork.findFreePort(30000, httpPort - 1); | ||||||
|  |       if (!wsPort) { | ||||||
|  |         throw new Error('Could not find a free WebSocket port in range 30000-40000'); | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |      | ||||||
|  |     // Log selected ports for debugging | ||||||
|  |     if (!this.logger.options.quiet) { | ||||||
|  |       console.log(`Selected ports - HTTP: ${httpPort}, WebSocket: ${wsPort}`); | ||||||
|  |     } | ||||||
|  |     return { httpPort, wsPort }; | ||||||
|  |   } | ||||||
|  |  | ||||||
|   public async runInChrome(fileNameArg: string, index: number, total: number): Promise<TapParser> { |   public async runInChrome(fileNameArg: string, index: number, total: number): Promise<TapParser> { | ||||||
|     this.logger.testFileStart(fileNameArg, 'chromium', index, total); |     this.logger.testFileStart(fileNameArg, 'chromium', index, total); | ||||||
|  |  | ||||||
| @@ -330,10 +356,13 @@ import '${absoluteTestFile.replace(/\\/g, '/')}'; | |||||||
|       bundler: 'esbuild', |       bundler: 'esbuild', | ||||||
|     }); |     }); | ||||||
|  |  | ||||||
|  |     // Find free ports for HTTP and WebSocket | ||||||
|  |     const { httpPort, wsPort } = await this.findFreePorts(); | ||||||
|  |  | ||||||
|     // lets create a server |     // lets create a server | ||||||
|     const server = new plugins.typedserver.servertools.Server({ |     const server = new plugins.typedserver.servertools.Server({ | ||||||
|       cors: true, |       cors: true, | ||||||
|       port: 3007, |       port: httpPort, | ||||||
|     }); |     }); | ||||||
|     server.addRoute( |     server.addRoute( | ||||||
|       '/test', |       '/test', | ||||||
| @@ -344,6 +373,7 @@ import '${absoluteTestFile.replace(/\\/g, '/')}'; | |||||||
|           <head> |           <head> | ||||||
|             <script> |             <script> | ||||||
|               globalThis.testdom = true; |               globalThis.testdom = true; | ||||||
|  |               globalThis.wsPort = ${wsPort}; | ||||||
|             </script> |             </script> | ||||||
|           </head> |           </head> | ||||||
|           <body></body> |           <body></body> | ||||||
| @@ -357,7 +387,7 @@ import '${absoluteTestFile.replace(/\\/g, '/')}'; | |||||||
|  |  | ||||||
|     // lets handle realtime comms |     // lets handle realtime comms | ||||||
|     const tapParser = new TapParser(fileNameArg + ':chrome', this.logger); |     const tapParser = new TapParser(fileNameArg + ':chrome', this.logger); | ||||||
|     const wss = new plugins.ws.WebSocketServer({ port: 8080 }); |     const wss = new plugins.ws.WebSocketServer({ port: wsPort }); | ||||||
|     wss.on('connection', (ws) => { |     wss.on('connection', (ws) => { | ||||||
|       ws.on('message', (message) => { |       ws.on('message', (message) => { | ||||||
|         const messageStr = message.toString(); |         const messageStr = message.toString(); | ||||||
| @@ -374,10 +404,10 @@ import '${absoluteTestFile.replace(/\\/g, '/')}'; | |||||||
|     await this.smartbrowserInstance.start(); |     await this.smartbrowserInstance.start(); | ||||||
|      |      | ||||||
|     const evaluatePromise = this.smartbrowserInstance.evaluateOnPage( |     const evaluatePromise = this.smartbrowserInstance.evaluateOnPage( | ||||||
|       `http://localhost:3007/test?bundleName=${bundleFileName}`, |       `http://localhost:${httpPort}/test?bundleName=${bundleFileName}`, | ||||||
|       async () => { |       async () => { | ||||||
|         // lets enable real time comms |         // lets enable real time comms | ||||||
|         const ws = new WebSocket('ws://localhost:8080'); |         const ws = new WebSocket(`ws://localhost:${globalThis.wsPort}`); | ||||||
|         await new Promise((resolve) => (ws.onopen = resolve)); |         await new Promise((resolve) => (ws.onopen = resolve)); | ||||||
|  |  | ||||||
|         // Ensure this function is declared with 'async' |         // Ensure this function is declared with 'async' | ||||||
|   | |||||||
| @@ -17,6 +17,7 @@ import * as smartchok from '@push.rocks/smartchok'; | |||||||
| import * as smartdelay from '@push.rocks/smartdelay'; | import * as smartdelay from '@push.rocks/smartdelay'; | ||||||
| import * as smartfile from '@push.rocks/smartfile'; | import * as smartfile from '@push.rocks/smartfile'; | ||||||
| import * as smartlog from '@push.rocks/smartlog'; | import * as smartlog from '@push.rocks/smartlog'; | ||||||
|  | import * as smartnetwork from '@push.rocks/smartnetwork'; | ||||||
| import * as smartpromise from '@push.rocks/smartpromise'; | import * as smartpromise from '@push.rocks/smartpromise'; | ||||||
| import * as smartshell from '@push.rocks/smartshell'; | import * as smartshell from '@push.rocks/smartshell'; | ||||||
| import * as tapbundle from '../dist_ts_tapbundle/index.js'; | import * as tapbundle from '../dist_ts_tapbundle/index.js'; | ||||||
| @@ -28,6 +29,7 @@ export { | |||||||
|   smartdelay, |   smartdelay, | ||||||
|   smartfile, |   smartfile, | ||||||
|   smartlog, |   smartlog, | ||||||
|  |   smartnetwork, | ||||||
|   smartpromise, |   smartpromise, | ||||||
|   smartshell, |   smartshell, | ||||||
|   tapbundle, |   tapbundle, | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user