Neil
fdfe354045
test(relay): bind test WebSocket servers to loopback
...
A control-handshake test that expects a timeout was instead getting
'Unexpected server response: 401' about once in fourteen runs. A slow machine
cannot turn a timeout into a 401 -- that needs a real HTTP response, so the
connection was reaching a different server.
new WebSocketServer({ port: 0 }) binds the wildcard address while the client
dials 127.0.0.1. On macOS those differ, and with SO_REUSEADDR a foreign process
can hold the more specific 127.0.0.1:P and win the connection. Caught live: a
wildcard bind took port 52584, which a running Orca app already held on
loopback, and Orca answered the probe. A listener that checks a token answers
401.
Ten constructions across seven files now pass host: '127.0.0.1', so the
reservation covers the address the client dials and a duplicate bind is refused.
Adds a ratchet, because this is not authors forgetting a convention: all 30+
.listen(0, ...) sites already pass '127.0.0.1', while 7 of 7 ws constructions
did not. ws accepts { port } alone and binds the wildcard silently, so nothing
told them. The guard pins the wildcard count, and pins separately at zero the
option shapes it cannot read -- spreads and variable option objects fail rather
than being exempted, and a recognized-construction floor catches the matcher
going blind, which otherwise reads exactly like a clean tree.
mobile/scripts/mock-server.ts stays on the wildcard deliberately: a phone
reaches it over the LAN.
2026-09-01 19:05:42 -07:00
..
2026-07-23 18:35:31 -07:00
2026-07-31 05:01:20 -07:00
2026-07-30 12:59:01 -07:00
2026-08-27 21:42:23 -07:00
2026-08-25 16:25:00 -07:00
2026-08-27 21:42:23 -07:00
2026-08-25 16:25:00 -07:00
2026-08-25 16:25:00 -07:00
2026-08-27 21:42:23 -07:00
2026-08-27 21:42:23 -07:00
2026-06-09 17:55:20 -07:00
2026-08-04 19:47:39 -07:00
2026-08-27 21:42:23 -07:00
2026-08-27 21:42:23 -07:00
2026-07-23 18:35:31 -07:00
2026-08-03 13:53:59 -07:00
2026-08-05 22:08:40 -07:00
2026-08-05 22:08:40 -07:00
2026-08-27 21:42:23 -07:00
2026-08-27 21:42:23 -07:00
2026-08-05 21:06:15 -07:00
2026-08-25 17:11:09 -07:00
2026-08-25 17:11:09 -07:00
2026-08-13 17:15:03 -07:00
2026-08-17 22:36:54 -07:00
2026-08-13 17:15:03 -07:00
2026-08-03 23:26:02 -07:00
2026-08-03 23:26:02 -07:00
2026-08-05 21:06:15 -07:00
2026-08-05 21:06:15 -07:00
2026-08-05 21:06:15 -07:00
2026-08-05 21:06:15 -07:00
2026-08-05 13:32:58 -07:00
2026-08-04 19:47:39 -07:00
2026-07-29 19:28:01 -07:00
2026-07-29 19:28:01 -07:00
2026-08-06 11:15:36 -07:00
2026-07-15 16:49:21 -07:00
2026-07-15 16:49:21 -07:00
2026-08-27 21:42:23 -07:00
2026-07-31 17:26:42 -07:00
2026-08-05 21:06:15 -07:00
2026-08-04 19:47:39 -07:00
2026-08-05 21:06:15 -07:00
2026-05-30 07:43:24 -07:00
2026-05-31 21:32:37 -07:00
2026-08-13 17:15:03 -07:00
2026-08-13 17:15:03 -07:00
2026-08-13 17:15:03 -07:00
2026-07-27 17:18:05 -07:00
2026-08-13 17:15:03 -07:00
2026-08-27 21:42:23 -07:00
2026-08-27 21:42:23 -07:00
2026-07-15 16:49:21 -07:00
2026-08-05 21:06:15 -07:00
2026-08-11 18:19:43 -07:00
2026-08-17 22:36:54 -07:00
2026-08-04 19:47:39 -07:00
2026-07-14 11:47:05 -07:00
2026-07-14 11:47:05 -07:00
2026-08-29 14:13:35 -07:00
2026-07-26 00:48:06 -07:00
2026-08-03 21:37:29 -07:00
2026-07-23 18:35:31 -07:00
2026-07-23 18:35:31 -07:00
2026-07-23 18:35:31 -07:00
2026-07-14 11:47:05 -07:00
2026-07-14 11:47:05 -07:00
2026-07-23 18:35:31 -07:00
2026-07-23 18:35:31 -07:00
2026-07-14 11:47:05 -07:00
2026-07-14 11:47:05 -07:00
2026-08-27 21:42:23 -07:00
2026-08-13 17:15:03 -07:00
2026-08-13 17:15:03 -07:00
2026-08-03 21:37:29 -07:00
2026-08-25 22:33:59 -07:00
2026-08-25 22:33:59 -07:00
2026-08-17 22:36:54 -07:00
2026-08-27 21:42:23 -07:00
2026-08-27 21:42:23 -07:00
2026-08-25 22:33:59 -07:00
2026-08-25 22:33:59 -07:00
2026-08-25 22:33:59 -07:00
2026-07-30 17:29:41 -07:00
2026-08-05 21:06:15 -07:00
2026-07-14 11:47:05 -07:00
2026-07-14 11:47:05 -07:00
2026-07-14 11:47:05 -07:00
2026-08-04 19:47:39 -07:00
2026-08-03 21:37:29 -07:00
2026-08-27 21:42:23 -07:00
2026-08-04 19:47:39 -07:00
2026-07-14 11:47:05 -07:00
2026-08-04 19:47:39 -07:00
2026-08-05 21:06:15 -07:00
2026-07-14 11:47:05 -07:00
2026-07-14 11:47:05 -07:00
2026-08-24 21:13:38 -07:00
2026-08-24 21:13:38 -07:00
2026-07-23 18:35:31 -07:00
2026-08-11 18:19:43 -07:00
2026-07-23 18:35:31 -07:00
2026-08-24 21:13:38 -07:00
2026-08-24 21:13:38 -07:00
2026-08-03 21:37:29 -07:00
2026-07-14 11:47:05 -07:00
2026-07-14 11:47:05 -07:00
2026-08-17 02:14:42 -07:00
2026-07-31 05:01:20 -07:00
2026-07-30 17:29:41 -07:00
2026-07-23 18:35:31 -07:00
2026-07-14 11:47:05 -07:00
2026-08-05 13:45:39 -07:00
2026-08-05 13:45:39 -07:00
2026-08-25 16:25:00 -07:00
2026-08-24 21:13:38 -07:00
2026-08-24 21:13:38 -07:00
2026-08-26 13:29:46 -07:00
2026-08-27 21:42:23 -07:00
2026-08-27 21:42:23 -07:00
2026-08-27 21:42:23 -07:00
2026-08-16 19:09:15 -07:00
2026-08-26 13:29:46 -07:00
2026-08-26 13:29:46 -07:00
2026-08-26 13:29:46 -07:00
2026-08-27 21:42:23 -07:00
2026-08-13 17:15:03 -07:00
2026-08-27 21:42:23 -07:00
2026-07-23 19:01:04 -07:00
2026-08-13 17:15:03 -07:00
2026-08-29 14:13:35 -07:00
2026-08-25 22:33:59 -07:00
2026-08-14 12:15:58 -07:00
2026-08-14 10:22:55 -07:00
2026-05-30 19:18:32 -07:00
2026-05-30 19:18:32 -07:00
2026-08-26 13:29:46 -07:00
2026-07-31 05:01:20 -07:00
2026-07-31 05:01:20 -07:00
2026-08-26 13:29:46 -07:00
2026-08-26 13:29:46 -07:00
2026-08-26 13:29:46 -07:00
2026-08-26 13:29:46 -07:00
2026-08-04 19:47:39 -07:00
2026-07-14 11:47:05 -07:00
2026-07-23 18:35:31 -07:00
2026-07-23 18:35:31 -07:00
2026-08-27 21:42:23 -07:00
2026-08-27 21:42:23 -07:00
2026-08-26 13:29:46 -07:00
2026-08-26 13:29:46 -07:00
2026-07-13 15:38:02 -07:00
2026-05-05 19:23:56 -07:00
2026-05-17 22:24:38 -07:00
2026-08-16 19:09:15 -07:00
2026-08-17 22:36:54 -07:00
2026-08-25 16:25:00 -07:00
2026-08-17 02:14:42 -07:00
2026-08-04 19:47:39 -07:00
2026-07-22 16:21:58 -07:00
2026-07-22 16:21:58 -07:00
2026-08-24 23:50:10 -07:00
2026-07-30 17:23:01 -07:00
2026-08-24 23:50:10 -07:00
2026-08-17 22:36:54 -07:00
2026-07-21 18:39:26 -07:00
2026-09-01 19:05:42 -07:00
2026-07-28 20:34:26 -07:00
2026-08-24 23:50:10 -07:00
2026-08-19 18:10:39 -07:00
2026-08-19 18:10:39 -07:00
2026-07-26 22:08:38 -07:00
2026-08-24 23:50:10 -07:00
2026-07-10 22:44:59 -07:00
2026-08-24 23:50:10 -07:00
2026-08-27 21:42:23 -07:00
2026-08-27 21:42:23 -07:00
2026-08-27 21:42:23 -07:00
2026-08-24 23:50:10 -07:00
2026-08-24 23:50:10 -07:00
2026-07-31 05:01:20 -07:00
2026-08-13 17:15:03 -07:00
2026-08-13 17:15:03 -07:00
2026-07-02 18:17:47 -07:00
2026-08-24 23:50:10 -07:00
2026-07-16 13:26:15 -07:00
2026-07-30 12:59:01 -07:00
2026-08-13 17:15:03 -07:00
2026-08-24 23:50:10 -07:00
2026-07-21 18:39:26 -07:00
2026-07-26 22:08:38 -07:00
2026-07-10 19:23:12 -07:00
2026-08-11 18:19:43 -07:00
2026-08-13 17:15:03 -07:00
2026-08-27 21:42:23 -07:00
2026-08-27 21:42:23 -07:00
2026-07-31 05:01:20 -07:00
2026-08-03 13:53:59 -07:00
2026-08-13 17:15:03 -07:00
2026-07-24 14:42:04 -07:00
2026-07-24 14:42:04 -07:00
2026-08-05 22:08:40 -07:00
2026-08-13 17:15:03 -07:00
2026-07-31 05:01:20 -07:00
2026-08-17 22:36:54 -07:00
2026-08-19 18:10:39 -07:00
2026-07-23 18:35:31 -07:00
2026-08-27 21:42:23 -07:00
2026-08-05 21:06:15 -07:00
2026-08-27 21:42:23 -07:00
2026-08-04 19:47:39 -07:00
2026-07-22 14:12:55 -07:00
2026-07-23 18:35:31 -07:00
2026-07-23 18:35:31 -07:00