From 28c88908b88c58cba4de08710f6bb268ede02d57 Mon Sep 17 00:00:00 2001 From: Christophe Besson Date: Wed, 14 Oct 2026 22:20:15 +0200 Subject: feat(node): accept a device link request before the proof (MNP 6.3) A new device of a known account holds no identity the node pinned, so it cannot complete a handshake until a pinned device approves it: it now files device_add_request in the pre-proof window, as the desktop app's case already required. The request stays inert until countersigned; at most 10 are pending per account, the oldest dropped. A 6.2 node answers it "Handshake required", which a client reads as "cannot link here". Co-Authored-By: Claude Opus 5.5 --- packages/meshbay-node/tests/golden/dispatch.json | 140 ++++++++++------------- 1 file changed, 62 insertions(+), 78 deletions(-) (limited to 'packages/meshbay-node/tests/golden') diff --git a/packages/meshbay-node/tests/golden/dispatch.json b/packages/meshbay-node/tests/golden/dispatch.json index 384c38f..f478ee0 100644 --- a/packages/meshbay-node/tests/golden/dispatch.json +++ b/packages/meshbay-node/tests/golden/dispatch.json @@ -2036,7 +2036,7 @@ "subject": "x", "ts": "", "type": "admin_challenge", - "v": "6.2" + "v": "6.3" } ], "spawned": [] @@ -2359,7 +2359,7 @@ "subject": "gggggggggggggggggggggggggggggggg", "ts": "", "type": "admin_challenge", - "v": "6.2" + "v": "6.3" } ], "spawned": [] @@ -2378,7 +2378,7 @@ "subject": "['x']", "ts": "", "type": "admin_challenge", - "v": "6.2" + "v": "6.3" } ], "spawned": [] @@ -2397,7 +2397,7 @@ "subject": "7", "ts": "", "type": "admin_challenge", - "v": "6.2" + "v": "6.3" } ], "spawned": [] @@ -2416,7 +2416,7 @@ "subject": "x", "ts": "", "type": "admin_challenge", - "v": "6.2" + "v": "6.3" } ], "spawned": [] @@ -2686,7 +2686,7 @@ "messages": [], "req_id": 4242, "type": "chat_hist_resp", - "v": "6.2" + "v": "6.3" } ], "spawned": [] @@ -2700,7 +2700,7 @@ "messages": [], "req_id": 4242, "type": "chat_hist_resp", - "v": "6.2" + "v": "6.3" } ], "spawned": [] @@ -2714,7 +2714,7 @@ "messages": [], "req_id": 4242, "type": "chat_hist_resp", - "v": "6.2" + "v": "6.3" } ], "spawned": [] @@ -2728,7 +2728,7 @@ "messages": [], "req_id": 4242, "type": "chat_hist_resp", - "v": "6.2" + "v": "6.3" } ], "spawned": [] @@ -2742,7 +2742,7 @@ "messages": [], "req_id": 4242, "type": "chat_hist_resp", - "v": "6.2" + "v": "6.3" } ], "spawned": [] @@ -2756,7 +2756,7 @@ "messages": [], "req_id": 4242, "type": "chat_hist_resp", - "v": "6.2" + "v": "6.3" } ], "spawned": [] @@ -2770,7 +2770,7 @@ "messages": [], "req_id": 4242, "type": "chat_hist_resp", - "v": "6.2" + "v": "6.3" } ], "spawned": [] @@ -2784,7 +2784,7 @@ "messages": [], "req_id": 4242, "type": "chat_hist_resp", - "v": "6.2" + "v": "6.3" } ], "spawned": [] @@ -3999,7 +3999,7 @@ "subject": "gggggggggggggggggggggggggggggggg", "ts": "", "type": "admin_challenge", - "v": "6.2" + "v": "6.3" } ], "spawned": [] @@ -4018,7 +4018,7 @@ "subject": "gggggggggggggggggggggggggggggggg", "ts": "", "type": "admin_challenge", - "v": "6.2" + "v": "6.3" } ], "spawned": [] @@ -4037,7 +4037,7 @@ "subject": "gggggggggggggggggggggggggggggggg", "ts": "", "type": "admin_challenge", - "v": "6.2" + "v": "6.3" } ], "spawned": [] @@ -4056,7 +4056,7 @@ "subject": "gggggggggggggggggggggggggggggggg", "ts": "", "type": "admin_challenge", - "v": "6.2" + "v": "6.3" } ], "spawned": [] @@ -4700,50 +4700,34 @@ "device_add_request | challenged | bare": { "audit": [], "log": [], - "sent": [ - { - "detail": "Handshake required", - "req_id": 4242, - "type": "error" - } - ], - "spawned": [] + "sent": [], + "spawned": [ + "_do_device_request" + ] }, "device_add_request | challenged | lists": { "audit": [], "log": [], - "sent": [ - { - "detail": "Handshake required", - "req_id": 4242, - "type": "error" - } - ], - "spawned": [] + "sent": [], + "spawned": [ + "_do_device_request" + ] }, "device_add_request | challenged | numbers": { "audit": [], "log": [], - "sent": [ - { - "detail": "Handshake required", - "req_id": 4242, - "type": "error" - } - ], - "spawned": [] + "sent": [], + "spawned": [ + "_do_device_request" + ] }, "device_add_request | challenged | strings": { "audit": [], "log": [], - "sent": [ - { - "detail": "Handshake required", - "req_id": 4242, - "type": "error" - } - ], - "spawned": [] + "sent": [], + "spawned": [ + "_do_device_request" + ] }, "device_add_request | fresh | bare": { "audit": [], @@ -10175,7 +10159,7 @@ "subject": "link:gggggggggggggggggggggggggggggggg", "ts": "", "type": "admin_challenge", - "v": "6.2" + "v": "6.3" } ], "spawned": [] @@ -12274,7 +12258,7 @@ "subject": "['x']", "ts": "", "type": "admin_challenge", - "v": "6.2" + "v": "6.3" } ], "spawned": [] @@ -12293,7 +12277,7 @@ "subject": "7", "ts": "", "type": "admin_challenge", - "v": "6.2" + "v": "6.3" } ], "spawned": [] @@ -12312,7 +12296,7 @@ "subject": "x", "ts": "", "type": "admin_challenge", - "v": "6.2" + "v": "6.3" } ], "spawned": [] @@ -13413,7 +13397,7 @@ "req_id": 4242, "token": null, "type": "pong", - "v": "6.2" + "v": "6.3" } ], "spawned": [] @@ -13428,7 +13412,7 @@ "x" ], "type": "pong", - "v": "6.2" + "v": "6.3" } ], "spawned": [] @@ -13441,7 +13425,7 @@ "req_id": 4242, "token": 7, "type": "pong", - "v": "6.2" + "v": "6.3" } ], "spawned": [] @@ -13454,7 +13438,7 @@ "req_id": 4242, "token": "x", "type": "pong", - "v": "6.2" + "v": "6.3" } ], "spawned": [] @@ -13467,7 +13451,7 @@ "req_id": 4242, "token": null, "type": "pong", - "v": "6.2" + "v": "6.3" } ], "spawned": [] @@ -13482,7 +13466,7 @@ "x" ], "type": "pong", - "v": "6.2" + "v": "6.3" } ], "spawned": [] @@ -13495,7 +13479,7 @@ "req_id": 4242, "token": 7, "type": "pong", - "v": "6.2" + "v": "6.3" } ], "spawned": [] @@ -13508,7 +13492,7 @@ "req_id": 4242, "token": "x", "type": "pong", - "v": "6.2" + "v": "6.3" } ], "spawned": [] @@ -13843,7 +13827,7 @@ "subject": "['x']", "ts": "", "type": "admin_challenge", - "v": "6.2" + "v": "6.3" } ], "spawned": [] @@ -13862,7 +13846,7 @@ "subject": "7", "ts": "", "type": "admin_challenge", - "v": "6.2" + "v": "6.3" } ], "spawned": [] @@ -13881,7 +13865,7 @@ "subject": "x", "ts": "", "type": "admin_challenge", - "v": "6.2" + "v": "6.3" } ], "spawned": [] @@ -14216,7 +14200,7 @@ "subject": "['x']", "ts": "", "type": "admin_challenge", - "v": "6.2" + "v": "6.3" } ], "spawned": [] @@ -14235,7 +14219,7 @@ "subject": "7", "ts": "", "type": "admin_challenge", - "v": "6.2" + "v": "6.3" } ], "spawned": [] @@ -14254,7 +14238,7 @@ "subject": "x", "ts": "", "type": "admin_challenge", - "v": "6.2" + "v": "6.3" } ], "spawned": [] @@ -14589,7 +14573,7 @@ "subject": "['x']", "ts": "", "type": "admin_challenge", - "v": "6.2" + "v": "6.3" } ], "spawned": [] @@ -14608,7 +14592,7 @@ "subject": "7", "ts": "", "type": "admin_challenge", - "v": "6.2" + "v": "6.3" } ], "spawned": [] @@ -14627,7 +14611,7 @@ "subject": "x", "ts": "", "type": "admin_challenge", - "v": "6.2" + "v": "6.3" } ], "spawned": [] @@ -14962,7 +14946,7 @@ "subject": "['x']", "ts": "", "type": "admin_challenge", - "v": "6.2" + "v": "6.3" } ], "spawned": [] @@ -14981,7 +14965,7 @@ "subject": "7", "ts": "", "type": "admin_challenge", - "v": "6.2" + "v": "6.3" } ], "spawned": [] @@ -15000,7 +14984,7 @@ "subject": "x", "ts": "", "type": "admin_challenge", - "v": "6.2" + "v": "6.3" } ], "spawned": [] @@ -15335,7 +15319,7 @@ "subject": "['x']", "ts": "", "type": "admin_challenge", - "v": "6.2" + "v": "6.3" } ], "spawned": [] @@ -15354,7 +15338,7 @@ "subject": "7", "ts": "", "type": "admin_challenge", - "v": "6.2" + "v": "6.3" } ], "spawned": [] @@ -15373,7 +15357,7 @@ "subject": "x", "ts": "", "type": "admin_challenge", - "v": "6.2" + "v": "6.3" } ], "spawned": [] @@ -18000,7 +17984,7 @@ "subject": "{\"language\":null,\"token\":null}", "ts": "", "type": "admin_challenge", - "v": "6.2" + "v": "6.3" } ], "spawned": [] @@ -18043,7 +18027,7 @@ "subject": "{\"language\":\"x\",\"token\":\"sha256:2d711642b726b04401627ca9fbac32f5c8530fb1903cc4db02258717921a4881\"}", "ts": "", "type": "admin_challenge", - "v": "6.2" + "v": "6.3" } ], "spawned": [] -- cgit v1.2.3