From 4ae61dc4e1dcca6ae24131fcd9acc55124e3c0af Mon Sep 17 00:00:00 2001 From: Christophe Besson Date: Fri, 9 Oct 2026 12:16:51 +0200 Subject: feat: let the operator purge a group's chat (MNP 6.1) Signed chat_purge from the Chat settings deletes every stored message; epoch keys and attachments stay. The ack is broadcast so open chat panels empty. Co-Authored-By: Claude Opus 5.5 --- packages/meshbay-node/tests/golden/dispatch.json | 460 +++++++++++++++++++++-- 1 file changed, 424 insertions(+), 36 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 44d030a..a39c57d 100644 --- a/packages/meshbay-node/tests/golden/dispatch.json +++ b/packages/meshbay-node/tests/golden/dispatch.json @@ -60,6 +60,14 @@ "_admin_exec_chat_link_preview" ] }, + "chat_purge": { + "audit": [], + "log": [], + "sent": [], + "spawned": [ + "_admin_exec_chat_purge" + ] + }, "dir_delete": { "audit": [], "log": [], @@ -2012,7 +2020,7 @@ "subject": "x", "ts": "", "type": "admin_challenge", - "v": "6.0" + "v": "6.1" } ], "spawned": [] @@ -2335,7 +2343,7 @@ "subject": "gggggggggggggggggggggggggggggggg", "ts": "", "type": "admin_challenge", - "v": "6.0" + "v": "6.1" } ], "spawned": [] @@ -2354,7 +2362,7 @@ "subject": "['x']", "ts": "", "type": "admin_challenge", - "v": "6.0" + "v": "6.1" } ], "spawned": [] @@ -2373,7 +2381,7 @@ "subject": "7", "ts": "", "type": "admin_challenge", - "v": "6.0" + "v": "6.1" } ], "spawned": [] @@ -2392,7 +2400,7 @@ "subject": "x", "ts": "", "type": "admin_challenge", - "v": "6.0" + "v": "6.1" } ], "spawned": [] @@ -2662,7 +2670,7 @@ "messages": [], "req_id": 4242, "type": "chat_hist_resp", - "v": "6.0" + "v": "6.1" } ], "spawned": [] @@ -2676,7 +2684,7 @@ "messages": [], "req_id": 4242, "type": "chat_hist_resp", - "v": "6.0" + "v": "6.1" } ], "spawned": [] @@ -2690,7 +2698,7 @@ "messages": [], "req_id": 4242, "type": "chat_hist_resp", - "v": "6.0" + "v": "6.1" } ], "spawned": [] @@ -2704,7 +2712,7 @@ "messages": [], "req_id": 4242, "type": "chat_hist_resp", - "v": "6.0" + "v": "6.1" } ], "spawned": [] @@ -2718,7 +2726,7 @@ "messages": [], "req_id": 4242, "type": "chat_hist_resp", - "v": "6.0" + "v": "6.1" } ], "spawned": [] @@ -2732,7 +2740,7 @@ "messages": [], "req_id": 4242, "type": "chat_hist_resp", - "v": "6.0" + "v": "6.1" } ], "spawned": [] @@ -2746,7 +2754,7 @@ "messages": [], "req_id": 4242, "type": "chat_hist_resp", - "v": "6.0" + "v": "6.1" } ], "spawned": [] @@ -2760,7 +2768,7 @@ "messages": [], "req_id": 4242, "type": "chat_hist_resp", - "v": "6.0" + "v": "6.1" } ], "spawned": [] @@ -3817,6 +3825,386 @@ ], "spawned": [] }, + "chat_purge | challenged | bare": { + "audit": [], + "log": [], + "sent": [ + { + "detail": "Handshake required", + "req_id": 4242, + "type": "error" + } + ], + "spawned": [] + }, + "chat_purge | challenged | lists": { + "audit": [], + "log": [], + "sent": [ + { + "detail": "Handshake required", + "req_id": 4242, + "type": "error" + } + ], + "spawned": [] + }, + "chat_purge | challenged | numbers": { + "audit": [], + "log": [], + "sent": [ + { + "detail": "Handshake required", + "req_id": 4242, + "type": "error" + } + ], + "spawned": [] + }, + "chat_purge | challenged | strings": { + "audit": [], + "log": [], + "sent": [ + { + "detail": "Handshake required", + "req_id": 4242, + "type": "error" + } + ], + "spawned": [] + }, + "chat_purge | fresh | bare": { + "audit": [], + "log": [], + "sent": [ + { + "detail": "Handshake required", + "req_id": 4242, + "type": "error" + } + ], + "spawned": [] + }, + "chat_purge | fresh | lists": { + "audit": [], + "log": [], + "sent": [ + { + "detail": "Handshake required", + "req_id": 4242, + "type": "error" + } + ], + "spawned": [] + }, + "chat_purge | fresh | numbers": { + "audit": [], + "log": [], + "sent": [ + { + "detail": "Handshake required", + "req_id": 4242, + "type": "error" + } + ], + "spawned": [] + }, + "chat_purge | fresh | strings": { + "audit": [], + "log": [], + "sent": [ + { + "detail": "Handshake required", + "req_id": 4242, + "type": "error" + } + ], + "spawned": [] + }, + "chat_purge | member | bare": { + "audit": [], + "log": [], + "sent": [ + { + "detail": "No authorized key for this", + "req_id": 4242, + "type": "error" + } + ], + "spawned": [] + }, + "chat_purge | member | lists": { + "audit": [], + "log": [], + "sent": [ + { + "detail": "No authorized key for this", + "req_id": 4242, + "type": "error" + } + ], + "spawned": [] + }, + "chat_purge | member | numbers": { + "audit": [], + "log": [], + "sent": [ + { + "detail": "No authorized key for this", + "req_id": 4242, + "type": "error" + } + ], + "spawned": [] + }, + "chat_purge | member | strings": { + "audit": [], + "log": [], + "sent": [ + { + "detail": "No authorized key for this", + "req_id": 4242, + "type": "error" + } + ], + "spawned": [] + }, + "chat_purge | operator | bare": { + "audit": [], + "log": [], + "sent": [ + { + "group_id": "gggggggggggggggggggggggggggggggg", + "node_pk": "iojj3XQJ8ZX9UtstPLpdcspnCb8dlBIb83SIAbQPb1w=", + "nonce": "", + "op": "chat_purge", + "op_id": "", + "req_id": 4242, + "subject": "gggggggggggggggggggggggggggggggg", + "ts": "", + "type": "admin_challenge", + "v": "6.1" + } + ], + "spawned": [] + }, + "chat_purge | operator | lists": { + "audit": [], + "log": [], + "sent": [ + { + "group_id": "gggggggggggggggggggggggggggggggg", + "node_pk": "iojj3XQJ8ZX9UtstPLpdcspnCb8dlBIb83SIAbQPb1w=", + "nonce": "", + "op": "chat_purge", + "op_id": "", + "req_id": 4242, + "subject": "gggggggggggggggggggggggggggggggg", + "ts": "", + "type": "admin_challenge", + "v": "6.1" + } + ], + "spawned": [] + }, + "chat_purge | operator | numbers": { + "audit": [], + "log": [], + "sent": [ + { + "group_id": "gggggggggggggggggggggggggggggggg", + "node_pk": "iojj3XQJ8ZX9UtstPLpdcspnCb8dlBIb83SIAbQPb1w=", + "nonce": "", + "op": "chat_purge", + "op_id": "", + "req_id": 4242, + "subject": "gggggggggggggggggggggggggggggggg", + "ts": "", + "type": "admin_challenge", + "v": "6.1" + } + ], + "spawned": [] + }, + "chat_purge | operator | strings": { + "audit": [], + "log": [], + "sent": [ + { + "group_id": "gggggggggggggggggggggggggggggggg", + "node_pk": "iojj3XQJ8ZX9UtstPLpdcspnCb8dlBIb83SIAbQPb1w=", + "nonce": "", + "op": "chat_purge", + "op_id": "", + "req_id": 4242, + "subject": "gggggggggggggggggggggggggggggggg", + "ts": "", + "type": "admin_challenge", + "v": "6.1" + } + ], + "spawned": [] + }, + "chat_purge_ack | challenged | bare": { + "audit": [], + "log": [], + "sent": [ + { + "detail": "Handshake required", + "req_id": 4242, + "type": "error" + } + ], + "spawned": [] + }, + "chat_purge_ack | challenged | lists": { + "audit": [], + "log": [], + "sent": [ + { + "detail": "Handshake required", + "req_id": 4242, + "type": "error" + } + ], + "spawned": [] + }, + "chat_purge_ack | challenged | numbers": { + "audit": [], + "log": [], + "sent": [ + { + "detail": "Handshake required", + "req_id": 4242, + "type": "error" + } + ], + "spawned": [] + }, + "chat_purge_ack | challenged | strings": { + "audit": [], + "log": [], + "sent": [ + { + "detail": "Handshake required", + "req_id": 4242, + "type": "error" + } + ], + "spawned": [] + }, + "chat_purge_ack | fresh | bare": { + "audit": [], + "log": [], + "sent": [ + { + "detail": "Handshake required", + "req_id": 4242, + "type": "error" + } + ], + "spawned": [] + }, + "chat_purge_ack | fresh | lists": { + "audit": [], + "log": [], + "sent": [ + { + "detail": "Handshake required", + "req_id": 4242, + "type": "error" + } + ], + "spawned": [] + }, + "chat_purge_ack | fresh | numbers": { + "audit": [], + "log": [], + "sent": [ + { + "detail": "Handshake required", + "req_id": 4242, + "type": "error" + } + ], + "spawned": [] + }, + "chat_purge_ack | fresh | strings": { + "audit": [], + "log": [], + "sent": [ + { + "detail": "Handshake required", + "req_id": 4242, + "type": "error" + } + ], + "spawned": [] + }, + "chat_purge_ack | member | bare": { + "audit": [], + "log": [ + "WARNING Unknown MNP message type on DataChannel: %s" + ], + "sent": [], + "spawned": [] + }, + "chat_purge_ack | member | lists": { + "audit": [], + "log": [ + "WARNING Unknown MNP message type on DataChannel: %s" + ], + "sent": [], + "spawned": [] + }, + "chat_purge_ack | member | numbers": { + "audit": [], + "log": [ + "WARNING Unknown MNP message type on DataChannel: %s" + ], + "sent": [], + "spawned": [] + }, + "chat_purge_ack | member | strings": { + "audit": [], + "log": [ + "WARNING Unknown MNP message type on DataChannel: %s" + ], + "sent": [], + "spawned": [] + }, + "chat_purge_ack | operator | bare": { + "audit": [], + "log": [ + "WARNING Unknown MNP message type on DataChannel: %s" + ], + "sent": [], + "spawned": [] + }, + "chat_purge_ack | operator | lists": { + "audit": [], + "log": [ + "WARNING Unknown MNP message type on DataChannel: %s" + ], + "sent": [], + "spawned": [] + }, + "chat_purge_ack | operator | numbers": { + "audit": [], + "log": [ + "WARNING Unknown MNP message type on DataChannel: %s" + ], + "sent": [], + "spawned": [] + }, + "chat_purge_ack | operator | strings": { + "audit": [], + "log": [ + "WARNING Unknown MNP message type on DataChannel: %s" + ], + "sent": [], + "spawned": [] + }, "client_diag | challenged | bare": { "audit": [], "log": [], @@ -9771,7 +10159,7 @@ "subject": "link:gggggggggggggggggggggggggggggggg", "ts": "", "type": "admin_challenge", - "v": "6.0" + "v": "6.1" } ], "spawned": [] @@ -11870,7 +12258,7 @@ "subject": "['x']", "ts": "", "type": "admin_challenge", - "v": "6.0" + "v": "6.1" } ], "spawned": [] @@ -11889,7 +12277,7 @@ "subject": "7", "ts": "", "type": "admin_challenge", - "v": "6.0" + "v": "6.1" } ], "spawned": [] @@ -11908,7 +12296,7 @@ "subject": "x", "ts": "", "type": "admin_challenge", - "v": "6.0" + "v": "6.1" } ], "spawned": [] @@ -13009,7 +13397,7 @@ "req_id": 4242, "token": null, "type": "pong", - "v": "6.0" + "v": "6.1" } ], "spawned": [] @@ -13024,7 +13412,7 @@ "x" ], "type": "pong", - "v": "6.0" + "v": "6.1" } ], "spawned": [] @@ -13037,7 +13425,7 @@ "req_id": 4242, "token": 7, "type": "pong", - "v": "6.0" + "v": "6.1" } ], "spawned": [] @@ -13050,7 +13438,7 @@ "req_id": 4242, "token": "x", "type": "pong", - "v": "6.0" + "v": "6.1" } ], "spawned": [] @@ -13063,7 +13451,7 @@ "req_id": 4242, "token": null, "type": "pong", - "v": "6.0" + "v": "6.1" } ], "spawned": [] @@ -13078,7 +13466,7 @@ "x" ], "type": "pong", - "v": "6.0" + "v": "6.1" } ], "spawned": [] @@ -13091,7 +13479,7 @@ "req_id": 4242, "token": 7, "type": "pong", - "v": "6.0" + "v": "6.1" } ], "spawned": [] @@ -13104,7 +13492,7 @@ "req_id": 4242, "token": "x", "type": "pong", - "v": "6.0" + "v": "6.1" } ], "spawned": [] @@ -13439,7 +13827,7 @@ "subject": "['x']", "ts": "", "type": "admin_challenge", - "v": "6.0" + "v": "6.1" } ], "spawned": [] @@ -13458,7 +13846,7 @@ "subject": "7", "ts": "", "type": "admin_challenge", - "v": "6.0" + "v": "6.1" } ], "spawned": [] @@ -13477,7 +13865,7 @@ "subject": "x", "ts": "", "type": "admin_challenge", - "v": "6.0" + "v": "6.1" } ], "spawned": [] @@ -13812,7 +14200,7 @@ "subject": "['x']", "ts": "", "type": "admin_challenge", - "v": "6.0" + "v": "6.1" } ], "spawned": [] @@ -13831,7 +14219,7 @@ "subject": "7", "ts": "", "type": "admin_challenge", - "v": "6.0" + "v": "6.1" } ], "spawned": [] @@ -13850,7 +14238,7 @@ "subject": "x", "ts": "", "type": "admin_challenge", - "v": "6.0" + "v": "6.1" } ], "spawned": [] @@ -14185,7 +14573,7 @@ "subject": "['x']", "ts": "", "type": "admin_challenge", - "v": "6.0" + "v": "6.1" } ], "spawned": [] @@ -14204,7 +14592,7 @@ "subject": "7", "ts": "", "type": "admin_challenge", - "v": "6.0" + "v": "6.1" } ], "spawned": [] @@ -14223,7 +14611,7 @@ "subject": "x", "ts": "", "type": "admin_challenge", - "v": "6.0" + "v": "6.1" } ], "spawned": [] @@ -16850,7 +17238,7 @@ "subject": "{\"language\":null,\"token\":null}", "ts": "", "type": "admin_challenge", - "v": "6.0" + "v": "6.1" } ], "spawned": [] @@ -16893,7 +17281,7 @@ "subject": "{\"language\":\"x\",\"token\":\"sha256:2d711642b726b04401627ca9fbac32f5c8530fb1903cc4db02258717921a4881\"}", "ts": "", "type": "admin_challenge", - "v": "6.0" + "v": "6.1" } ], "spawned": [] -- cgit v1.2.3