agent-comms 4.4.0 → 4.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/marketplace.json +1 -1
- package/.claude-plugin/plugin.json +1 -1
- package/README.md +5 -1
- package/dist/core/agent-registry.d.ts.map +1 -1
- package/dist/core/agent-registry.js +2 -0
- package/dist/core/agent-registry.js.map +1 -1
- package/dist/core/bridge-mesh.d.ts.map +1 -1
- package/dist/core/bridge-mesh.js +1 -0
- package/dist/core/bridge-mesh.js.map +1 -1
- package/dist/core/device-membership-verification.d.ts +2 -1
- package/dist/core/device-membership-verification.d.ts.map +1 -1
- package/dist/core/device-membership-verification.js +1 -1
- package/dist/core/device-membership-verification.js.map +1 -1
- package/dist/core/device-membership.d.ts +2 -0
- package/dist/core/device-membership.d.ts.map +1 -1
- package/dist/core/device-membership.js +9 -5
- package/dist/core/device-membership.js.map +1 -1
- package/dist/core/directory-admission.d.ts +20 -0
- package/dist/core/directory-admission.d.ts.map +1 -0
- package/dist/core/directory-admission.js +88 -0
- package/dist/core/directory-admission.js.map +1 -0
- package/dist/core/gateway-trust-actions.d.ts +1 -1
- package/dist/core/gateway-trust-actions.d.ts.map +1 -1
- package/dist/core/gateway-trust-actions.js +5 -1
- package/dist/core/gateway-trust-actions.js.map +1 -1
- package/dist/core/gateway-trust.d.ts +14 -2
- package/dist/core/gateway-trust.d.ts.map +1 -1
- package/dist/core/gateway-trust.js +40 -2
- package/dist/core/gateway-trust.js.map +1 -1
- package/dist/core/gossip-directory.d.ts +2 -0
- package/dist/core/gossip-directory.d.ts.map +1 -1
- package/dist/core/gossip-directory.js +9 -0
- package/dist/core/gossip-directory.js.map +1 -1
- package/dist/core/gossip-extensions.d.ts +2 -0
- package/dist/core/gossip-extensions.d.ts.map +1 -1
- package/dist/core/hub-session.d.ts +6 -9
- package/dist/core/hub-session.d.ts.map +1 -1
- package/dist/core/hub-session.js +18 -41
- package/dist/core/hub-session.js.map +1 -1
- package/dist/core/membership-proof.d.ts +45 -0
- package/dist/core/membership-proof.d.ts.map +1 -0
- package/dist/core/membership-proof.js +59 -0
- package/dist/core/membership-proof.js.map +1 -0
- package/dist/core/membership-proofs.d.ts +34 -0
- package/dist/core/membership-proofs.d.ts.map +1 -0
- package/dist/core/membership-proofs.js +66 -0
- package/dist/core/membership-proofs.js.map +1 -0
- package/dist/core/mesh-store.d.ts +8 -0
- package/dist/core/mesh-store.d.ts.map +1 -1
- package/dist/core/mesh-store.js +18 -3
- package/dist/core/mesh-store.js.map +1 -1
- package/dist/core/tool.d.ts +5 -0
- package/dist/core/tool.d.ts.map +1 -1
- package/dist/core/tool.js.map +1 -1
- package/dist/core/wire-mesh-transport-options.d.ts +12 -0
- package/dist/core/wire-mesh-transport-options.d.ts.map +1 -1
- package/dist/core/wire-mesh-transport.d.ts +1 -1
- package/dist/core/wire-mesh-transport.d.ts.map +1 -1
- package/dist/core/wire-mesh-transport.js +5 -5
- package/dist/core/wire-mesh-transport.js.map +1 -1
- package/dist/test/directory-admission.unit.test.d.ts +2 -0
- package/dist/test/directory-admission.unit.test.d.ts.map +1 -0
- package/dist/test/directory-admission.unit.test.js +182 -0
- package/dist/test/directory-admission.unit.test.js.map +1 -0
- package/dist/test/dm-grant-tool.integration.test.js +2 -1
- package/dist/test/dm-grant-tool.integration.test.js.map +1 -1
- package/dist/test/gateway-trust-tool.integration.test.js +22 -0
- package/dist/test/gateway-trust-tool.integration.test.js.map +1 -1
- package/dist/test/gateway-trust.unit.test.js +82 -1
- package/dist/test/gateway-trust.unit.test.js.map +1 -1
- package/dist/test/hub-mode-session.integration.test.js +10 -84
- package/dist/test/hub-mode-session.integration.test.js.map +1 -1
- package/dist/test/hub-session-dispatch.unit.test.js +14 -68
- package/dist/test/hub-session-dispatch.unit.test.js.map +1 -1
- package/dist/test/membership-proof.unit.test.d.ts +2 -0
- package/dist/test/membership-proof.unit.test.d.ts.map +1 -0
- package/dist/test/membership-proof.unit.test.js +148 -0
- package/dist/test/membership-proof.unit.test.js.map +1 -0
- package/dist/test/principal-membership-trust.integration.test.d.ts +5 -0
- package/dist/test/principal-membership-trust.integration.test.d.ts.map +1 -0
- package/dist/test/principal-membership-trust.integration.test.js +169 -0
- package/dist/test/principal-membership-trust.integration.test.js.map +1 -0
- package/dist/test/test-transport.d.ts.map +1 -1
- package/dist/test/test-transport.js +1 -0
- package/dist/test/test-transport.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,22 +1,13 @@
|
|
|
1
|
-
// Integration: two real agent-comms WireMeshTransports discovering each other
|
|
1
|
+
// Integration: two real agent-comms WireMeshTransports discovering each other through a real wire-mesh relay hub (createRelayHub -- the same domain logic the production mesh.exadev.io Durable Object runs) served over local WebSockets. This is agent-comms#151's own acceptance shape: the hub connection is a relay, not a coordinator -- no connect_request/introduce approval applies, peers discover each other via the hub's gossip forwarding + catch-up, and messages ride relay pairings (sendManageRequest's own targetDevice routing). Every transport here is constructed with an explicit GatewayTrust mutually trusting the other side's device-id (agent-comms#156's own deny-by-default trust boundary): without it, hub-session.ts's own directory-merge and consume() gates would drop the other side's gossip/messages entirely before any of this file's own assertions could run.
|
|
2
2
|
import { afterEach, describe, expect, it } from "vitest";
|
|
3
3
|
import { realHubOverWs, waitForCondition } from "./hub-helpers.js";
|
|
4
4
|
import { generateIdentity } from "../core/identity.js";
|
|
5
5
|
import { deviceIdToHex } from "wire-mesh-core/domain/device-id";
|
|
6
6
|
import { WireMeshTransport } from "../core/wire-mesh-transport.js";
|
|
7
7
|
import { GatewayTrust } from "../core/gateway-trust.js";
|
|
8
|
-
function
|
|
9
|
-
const messages = [];
|
|
10
|
-
const allMessages = [];
|
|
8
|
+
function noopEvents() {
|
|
11
9
|
return {
|
|
12
|
-
|
|
13
|
-
allMessages,
|
|
14
|
-
onMessage: (handle, message) => {
|
|
15
|
-
allMessages.push(message);
|
|
16
|
-
if (message.method === "peer_joined") {
|
|
17
|
-
messages.push({ from: handle.id, text: message.peer.id });
|
|
18
|
-
}
|
|
19
|
-
},
|
|
10
|
+
onMessage: () => undefined,
|
|
20
11
|
onPeerConnected: () => undefined,
|
|
21
12
|
onPeerDisconnected: () => undefined,
|
|
22
13
|
onIntroduction: () => undefined,
|
|
@@ -35,11 +26,11 @@ afterEach(async () => {
|
|
|
35
26
|
}
|
|
36
27
|
});
|
|
37
28
|
describe("connectToHub", () => {
|
|
38
|
-
it("two transports discover each other
|
|
29
|
+
it("two transports discover each other through the hub's gossip", async () => {
|
|
39
30
|
const hub = await realHubOverWs();
|
|
40
31
|
cleanups.push(hub.close);
|
|
41
|
-
const eventsA =
|
|
42
|
-
const eventsB =
|
|
32
|
+
const eventsA = noopEvents();
|
|
33
|
+
const eventsB = noopEvents();
|
|
43
34
|
const identityA = generateIdentity();
|
|
44
35
|
const identityB = generateIdentity();
|
|
45
36
|
const deviceA = deviceIdToHex(Uint8Array.from(identityA.deviceId));
|
|
@@ -62,26 +53,14 @@ describe("connectToHub", () => {
|
|
|
62
53
|
return (transportA.hub.peers().includes(deviceB) &&
|
|
63
54
|
transportB.hub.peers().includes(deviceA));
|
|
64
55
|
});
|
|
65
|
-
// Messaging: A sends to B via the hub; B's onMessage fires with A's device.
|
|
66
|
-
await transportA.hub.sendToPeer(deviceB, {
|
|
67
|
-
method: "peer_joined",
|
|
68
|
-
peer: {
|
|
69
|
-
id: "hub-says-hi",
|
|
70
|
-
port: 0,
|
|
71
|
-
startedAt: "2026-01-01T00:00:00.000Z",
|
|
72
|
-
},
|
|
73
|
-
});
|
|
74
|
-
await waitForCondition(() => eventsB.messages.length > 0);
|
|
75
|
-
expect(eventsB.messages[0]?.text).toBe("hub-says-hi");
|
|
76
|
-
expect(eventsB.messages[0]?.from).toBe(deviceA);
|
|
77
56
|
await transportA.shutdown();
|
|
78
57
|
await transportB.shutdown();
|
|
79
58
|
});
|
|
80
59
|
it("discovers a peer via gossip when that peer is trusted only as a principal, not as a bare device (agent-comms#192's own directory-merge widening)", async () => {
|
|
81
60
|
const hub = await realHubOverWs();
|
|
82
61
|
cleanups.push(hub.close);
|
|
83
|
-
const eventsA =
|
|
84
|
-
const eventsB =
|
|
62
|
+
const eventsA = noopEvents();
|
|
63
|
+
const eventsB = noopEvents();
|
|
85
64
|
const identityA = generateIdentity();
|
|
86
65
|
const identityB = generateIdentity();
|
|
87
66
|
const deviceA = deviceIdToHex(Uint8Array.from(identityA.deviceId));
|
|
@@ -104,64 +83,11 @@ describe("connectToHub", () => {
|
|
|
104
83
|
await transportA.shutdown();
|
|
105
84
|
await transportB.shutdown();
|
|
106
85
|
});
|
|
107
|
-
it('never applies a state_sync or state_update relayed by a hub peer, even one this side now explicitly trusts (agent-comms#169 security finding: real per-peer admission landed in #156, but gateway trust means "this device\'s traffic is worth acting on", not "this device may directly overwrite this side\'s mesh state")', async () => {
|
|
108
|
-
const hub = await realHubOverWs();
|
|
109
|
-
cleanups.push(hub.close);
|
|
110
|
-
const eventsA = recordingEvents();
|
|
111
|
-
const eventsB = recordingEvents();
|
|
112
|
-
const identityA = generateIdentity();
|
|
113
|
-
const identityB = generateIdentity();
|
|
114
|
-
const deviceA = deviceIdToHex(Uint8Array.from(identityA.deviceId));
|
|
115
|
-
const deviceB = deviceIdToHex(Uint8Array.from(identityB.deviceId));
|
|
116
|
-
const gatewayTrustA = new GatewayTrust();
|
|
117
|
-
gatewayTrustA.add(deviceB);
|
|
118
|
-
const gatewayTrustB = new GatewayTrust();
|
|
119
|
-
gatewayTrustB.add(deviceA);
|
|
120
|
-
const transportA = new WireMeshTransport(eventsA, identityA, {
|
|
121
|
-
gatewayTrust: gatewayTrustA,
|
|
122
|
-
});
|
|
123
|
-
const transportB = new WireMeshTransport(eventsB, identityB, {
|
|
124
|
-
gatewayTrust: gatewayTrustB,
|
|
125
|
-
});
|
|
126
|
-
await transportA.hub.connect(hub.url);
|
|
127
|
-
await transportB.hub.connect(hub.url);
|
|
128
|
-
await waitForCondition(() => {
|
|
129
|
-
return (transportA.hub.peers().includes(deviceB) &&
|
|
130
|
-
transportB.hub.peers().includes(deviceA));
|
|
131
|
-
});
|
|
132
|
-
await transportA.hub.sendToPeer(deviceB, {
|
|
133
|
-
method: "state_update",
|
|
134
|
-
patch: { type: "agent_offline", agentId: "spoofed" },
|
|
135
|
-
});
|
|
136
|
-
await transportA.hub.sendToPeer(deviceB, {
|
|
137
|
-
method: "state_sync",
|
|
138
|
-
state: {
|
|
139
|
-
agents: {},
|
|
140
|
-
rooms: {},
|
|
141
|
-
messages: {},
|
|
142
|
-
dms: {},
|
|
143
|
-
deliveryQueues: {},
|
|
144
|
-
},
|
|
145
|
-
});
|
|
146
|
-
// A message type this codebase's own onMessage handler treats as inert either way -- proves the hub connection and relay pairing genuinely delivered something to B (ruling out "nothing arrived at all" as a false-negative explanation for state_update/state_sync never showing up below), while confirming filtering is specific to the two state-mutating methods rather than a blanket drop of everything.
|
|
147
|
-
await transportA.hub.sendToPeer(deviceB, {
|
|
148
|
-
method: "peer_joined",
|
|
149
|
-
peer: {
|
|
150
|
-
id: "proof-of-delivery",
|
|
151
|
-
port: 0,
|
|
152
|
-
startedAt: "2026-01-01T00:00:00.000Z",
|
|
153
|
-
},
|
|
154
|
-
});
|
|
155
|
-
await waitForCondition(() => eventsB.messages.length > 0);
|
|
156
|
-
expect(eventsB.allMessages.some((m) => m.method === "state_update" || m.method === "state_sync")).toBe(false);
|
|
157
|
-
await transportA.shutdown();
|
|
158
|
-
await transportB.shutdown();
|
|
159
|
-
});
|
|
160
86
|
it("reports the answering side's own dialled hub address on a hub-relayed path.trace (agent-comms#216)", async () => {
|
|
161
87
|
const hub = await realHubOverWs();
|
|
162
88
|
cleanups.push(hub.close);
|
|
163
|
-
const eventsA =
|
|
164
|
-
const eventsB =
|
|
89
|
+
const eventsA = noopEvents();
|
|
90
|
+
const eventsB = noopEvents();
|
|
165
91
|
const identityA = generateIdentity();
|
|
166
92
|
const identityB = generateIdentity();
|
|
167
93
|
const deviceA = deviceIdToHex(Uint8Array.from(identityA.deviceId));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hub-mode-session.integration.test.js","sourceRoot":"","sources":["../../src/test/hub-mode-session.integration.test.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"hub-mode-session.integration.test.js","sourceRoot":"","sources":["../../src/test/hub-mode-session.integration.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -54,37 +54,14 @@ function fakeRequest(options) {
|
|
|
54
54
|
return { request, responses };
|
|
55
55
|
}
|
|
56
56
|
function fakeDeps(overrides = {}) {
|
|
57
|
-
const messages = [];
|
|
58
|
-
const events = {
|
|
59
|
-
...noopEvents(),
|
|
60
|
-
messages,
|
|
61
|
-
onMessage: (_handle, message) => {
|
|
62
|
-
messages.push(message);
|
|
63
|
-
},
|
|
64
|
-
};
|
|
65
57
|
return {
|
|
66
58
|
isTrusted: () => false,
|
|
67
|
-
events,
|
|
68
59
|
handleRoomRequest: vi.fn().mockResolvedValue(undefined),
|
|
69
60
|
forwardToLocalPeer: () => undefined,
|
|
70
61
|
...overrides,
|
|
71
62
|
};
|
|
72
63
|
}
|
|
73
64
|
describe("dispatchHubRequest", () => {
|
|
74
|
-
it("drops a FRAME_VERB request with no fromDevice, responding ok, without ever calling onMessage", async () => {
|
|
75
|
-
const { request, responses } = fakeRequest({ verb: FRAME_VERB });
|
|
76
|
-
const deps = fakeDeps();
|
|
77
|
-
const onKnownPeer = fakeOnKnownPeer();
|
|
78
|
-
await dispatchHubRequest({
|
|
79
|
-
request,
|
|
80
|
-
ownDeviceHex: OWN_HEX,
|
|
81
|
-
deps,
|
|
82
|
-
onKnownPeer: onKnownPeer,
|
|
83
|
-
});
|
|
84
|
-
expect(responses).toEqual([{ result: "ok" }]);
|
|
85
|
-
expect(deps.events.messages).toEqual([]);
|
|
86
|
-
expect(onKnownPeer).not.toHaveBeenCalled();
|
|
87
|
-
});
|
|
88
65
|
it("refuses a room-domain verb with no fromDevice with an ordinary unauthorized outcome, never dispatching to handleRoomRequest", async () => {
|
|
89
66
|
const { request, responses } = fakeRequest({ verb: "room:member" });
|
|
90
67
|
const deps = fakeDeps();
|
|
@@ -99,49 +76,14 @@ describe("dispatchHubRequest", () => {
|
|
|
99
76
|
expect(deps.handleRoomRequest).not.toHaveBeenCalled();
|
|
100
77
|
expect(onKnownPeer).not.toHaveBeenCalled();
|
|
101
78
|
});
|
|
102
|
-
it(
|
|
79
|
+
it.each([
|
|
80
|
+
{ label: "an untrusted device", fromDevice: SENDER_HEX, trusted: false },
|
|
81
|
+
{ label: "a trusted device", fromDevice: SENDER_HEX, trusted: true },
|
|
82
|
+
{ label: "no identified device", fromDevice: undefined, trusted: false },
|
|
83
|
+
])("refuses a legacy FRAME_VERB request from $label with unsupported_verb, never dispatching it or recording a known peer (agent-comms#169, agent-comms#268)", async ({ fromDevice, trusted }) => {
|
|
103
84
|
const { request, responses } = fakeRequest({
|
|
104
85
|
verb: FRAME_VERB,
|
|
105
|
-
fromDevice:
|
|
106
|
-
});
|
|
107
|
-
const deps = fakeDeps({ isTrusted: () => false });
|
|
108
|
-
const onKnownPeer = fakeOnKnownPeer();
|
|
109
|
-
await dispatchHubRequest({
|
|
110
|
-
request,
|
|
111
|
-
ownDeviceHex: OWN_HEX,
|
|
112
|
-
deps,
|
|
113
|
-
onKnownPeer: onKnownPeer,
|
|
114
|
-
});
|
|
115
|
-
expect(responses).toEqual([{ result: "ok" }]);
|
|
116
|
-
expect(deps.events.messages).toEqual([]);
|
|
117
|
-
expect(onKnownPeer).not.toHaveBeenCalled();
|
|
118
|
-
});
|
|
119
|
-
it("delivers a FRAME_VERB request from a trusted device to onMessage and records it as a known hub peer", async () => {
|
|
120
|
-
const message = {
|
|
121
|
-
method: "peer_joined",
|
|
122
|
-
peer: { id: "hi", port: 0, startedAt: "2026-01-01T00:00:00.000Z" },
|
|
123
|
-
};
|
|
124
|
-
const { request, responses } = fakeRequest({
|
|
125
|
-
verb: FRAME_VERB,
|
|
126
|
-
fromDevice: SENDER_HEX,
|
|
127
|
-
});
|
|
128
|
-
request.command.params = { message };
|
|
129
|
-
const deps = fakeDeps({ isTrusted: (hex) => hex === SENDER_HEX });
|
|
130
|
-
const onKnownPeer = fakeOnKnownPeer();
|
|
131
|
-
await dispatchHubRequest({
|
|
132
|
-
request,
|
|
133
|
-
ownDeviceHex: OWN_HEX,
|
|
134
|
-
deps,
|
|
135
|
-
onKnownPeer: onKnownPeer,
|
|
136
|
-
});
|
|
137
|
-
expect(responses).toEqual([{ result: "ok" }]);
|
|
138
|
-
expect(deps.events.messages).toEqual([message]);
|
|
139
|
-
expect(onKnownPeer).toHaveBeenCalledWith(SENDER_HEX);
|
|
140
|
-
});
|
|
141
|
-
it("never delivers a state_sync or state_update from a trusted device to onMessage (agent-comms#169)", async () => {
|
|
142
|
-
const { request, responses } = fakeRequest({
|
|
143
|
-
verb: FRAME_VERB,
|
|
144
|
-
fromDevice: SENDER_HEX,
|
|
86
|
+
...(fromDevice !== undefined ? { fromDevice } : {}),
|
|
145
87
|
});
|
|
146
88
|
request.command.params = {
|
|
147
89
|
message: {
|
|
@@ -149,15 +91,19 @@ describe("dispatchHubRequest", () => {
|
|
|
149
91
|
patch: { type: "agent_offline", agentId: "spoofed" },
|
|
150
92
|
},
|
|
151
93
|
};
|
|
152
|
-
const deps = fakeDeps({ isTrusted: () =>
|
|
94
|
+
const deps = fakeDeps({ isTrusted: () => trusted });
|
|
95
|
+
const onKnownPeer = fakeOnKnownPeer();
|
|
153
96
|
await dispatchHubRequest({
|
|
154
97
|
request,
|
|
155
98
|
ownDeviceHex: OWN_HEX,
|
|
156
99
|
deps,
|
|
157
|
-
onKnownPeer
|
|
100
|
+
onKnownPeer,
|
|
158
101
|
});
|
|
159
|
-
expect(responses).toEqual([
|
|
160
|
-
|
|
102
|
+
expect(responses).toEqual([
|
|
103
|
+
{ result: "error", code: "unsupported_verb" },
|
|
104
|
+
]);
|
|
105
|
+
expect(deps.handleRoomRequest).not.toHaveBeenCalled();
|
|
106
|
+
expect(onKnownPeer).not.toHaveBeenCalled();
|
|
161
107
|
});
|
|
162
108
|
it("dispatches a room-domain verb from an UNTRUSTED but identified device straight to handleRoomRequest, never rejecting it as unauthorized (the actual agent-comms#192 fix)", async () => {
|
|
163
109
|
const { request, responses } = fakeRequest({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hub-session-dispatch.unit.test.js","sourceRoot":"","sources":["../../src/test/hub-session-dispatch.unit.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"hub-session-dispatch.unit.test.js","sourceRoot":"","sources":["../../src/test/hub-session-dispatch.unit.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"membership-proof.unit.test.d.ts","sourceRoot":"","sources":["../../src/test/membership-proof.unit.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Unit tests for the membership proof a device gossips to show its user principal vouches for it: minted by that principal for that one device, carried as text, and verified by a receiver that trusts the principal.
|
|
3
|
+
*/
|
|
4
|
+
import * as fs from "node:fs";
|
|
5
|
+
import { tmpdir } from "node:os";
|
|
6
|
+
import path from "node:path";
|
|
7
|
+
import { describe, expect, it } from "vitest";
|
|
8
|
+
import { createSystemClock } from "wire-mesh-core/adapters/system-clock";
|
|
9
|
+
import { createRevocationView } from "wire-mesh-core/domain/revocation-view";
|
|
10
|
+
import { generateIdentity } from "../core/identity.js";
|
|
11
|
+
import { toIdentityPort } from "../core/wire-mesh-identity.js";
|
|
12
|
+
import { loadOrCreateUserIdentity } from "../core/user-identity.js";
|
|
13
|
+
import { MAX_MEMBERSHIP_PROOF_LENGTH, MEMBERSHIP_PROOF_LIFETIME_MS, mintMembershipProof, verifyMembershipProof, } from "../core/membership-proof.js";
|
|
14
|
+
async function makeUser() {
|
|
15
|
+
const dir = fs.mkdtempSync(path.join(tmpdir(), "membership-proof-user-"));
|
|
16
|
+
return toIdentityPort(loadOrCreateUserIdentity({ dir }));
|
|
17
|
+
}
|
|
18
|
+
/** A real receiving node: its own device identity is what verification runs as. */
|
|
19
|
+
async function makeVerifier() {
|
|
20
|
+
return {
|
|
21
|
+
identity: await toIdentityPort(generateIdentity()),
|
|
22
|
+
clock: createSystemClock(),
|
|
23
|
+
revocation: createRevocationView(),
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
describe("membership proof", () => {
|
|
27
|
+
it("verifies for the device it was minted for, against the principal that minted it, and reports when it expires", async () => {
|
|
28
|
+
const user = await makeUser();
|
|
29
|
+
const device = await toIdentityPort(generateIdentity());
|
|
30
|
+
const clock = createSystemClock();
|
|
31
|
+
const before = clock.now();
|
|
32
|
+
const proof = await mintMembershipProof({
|
|
33
|
+
userIdentity: user,
|
|
34
|
+
clock,
|
|
35
|
+
deviceId: device.deviceId,
|
|
36
|
+
});
|
|
37
|
+
const verdict = await verifyMembershipProof({
|
|
38
|
+
proof,
|
|
39
|
+
deviceId: device.deviceId,
|
|
40
|
+
principalId: user.deviceId,
|
|
41
|
+
...(await makeVerifier()),
|
|
42
|
+
});
|
|
43
|
+
expect(verdict.ok).toBe(true);
|
|
44
|
+
if (!verdict.ok)
|
|
45
|
+
return;
|
|
46
|
+
expect(verdict.expires).toBeGreaterThan(before);
|
|
47
|
+
expect(verdict.expires).toBeLessThanOrEqual(clock.now() + MEMBERSHIP_PROOF_LIFETIME_MS);
|
|
48
|
+
});
|
|
49
|
+
it("is one line of text, so it can ride in a gossiped advert", async () => {
|
|
50
|
+
const user = await makeUser();
|
|
51
|
+
const device = await toIdentityPort(generateIdentity());
|
|
52
|
+
const proof = await mintMembershipProof({
|
|
53
|
+
userIdentity: user,
|
|
54
|
+
clock: createSystemClock(),
|
|
55
|
+
deviceId: device.deviceId,
|
|
56
|
+
});
|
|
57
|
+
expect(proof).toMatch(/^\S+$/);
|
|
58
|
+
});
|
|
59
|
+
it("does not verify for a different device, so a copied proof cannot vouch for anyone else", async () => {
|
|
60
|
+
const user = await makeUser();
|
|
61
|
+
const device = await toIdentityPort(generateIdentity());
|
|
62
|
+
const other = await toIdentityPort(generateIdentity());
|
|
63
|
+
const proof = await mintMembershipProof({
|
|
64
|
+
userIdentity: user,
|
|
65
|
+
clock: createSystemClock(),
|
|
66
|
+
deviceId: device.deviceId,
|
|
67
|
+
});
|
|
68
|
+
const verdict = await verifyMembershipProof({
|
|
69
|
+
proof,
|
|
70
|
+
deviceId: other.deviceId,
|
|
71
|
+
principalId: user.deviceId,
|
|
72
|
+
...(await makeVerifier()),
|
|
73
|
+
});
|
|
74
|
+
expect(verdict.ok).toBe(false);
|
|
75
|
+
});
|
|
76
|
+
it("does not verify against a principal that did not mint it", async () => {
|
|
77
|
+
const user = await makeUser();
|
|
78
|
+
const stranger = await makeUser();
|
|
79
|
+
const device = await toIdentityPort(generateIdentity());
|
|
80
|
+
const proof = await mintMembershipProof({
|
|
81
|
+
userIdentity: user,
|
|
82
|
+
clock: createSystemClock(),
|
|
83
|
+
deviceId: device.deviceId,
|
|
84
|
+
});
|
|
85
|
+
const verdict = await verifyMembershipProof({
|
|
86
|
+
proof,
|
|
87
|
+
deviceId: device.deviceId,
|
|
88
|
+
principalId: stranger.deviceId,
|
|
89
|
+
...(await makeVerifier()),
|
|
90
|
+
});
|
|
91
|
+
expect(verdict.ok).toBe(false);
|
|
92
|
+
});
|
|
93
|
+
it("does not verify once it has expired", async () => {
|
|
94
|
+
const user = await makeUser();
|
|
95
|
+
const device = await toIdentityPort(generateIdentity());
|
|
96
|
+
const clock = createSystemClock();
|
|
97
|
+
const proof = await mintMembershipProof({
|
|
98
|
+
userIdentity: user,
|
|
99
|
+
clock,
|
|
100
|
+
deviceId: device.deviceId,
|
|
101
|
+
});
|
|
102
|
+
const verifier = await makeVerifier();
|
|
103
|
+
const later = {
|
|
104
|
+
now: () => clock.now() + MEMBERSHIP_PROOF_LIFETIME_MS + 1,
|
|
105
|
+
};
|
|
106
|
+
const verdict = await verifyMembershipProof({
|
|
107
|
+
proof,
|
|
108
|
+
deviceId: device.deviceId,
|
|
109
|
+
principalId: user.deviceId,
|
|
110
|
+
...verifier,
|
|
111
|
+
clock: later,
|
|
112
|
+
});
|
|
113
|
+
expect(verdict.ok).toBe(false);
|
|
114
|
+
});
|
|
115
|
+
it("refuses proof text longer than any real proof, before spending any effort on it", async () => {
|
|
116
|
+
const user = await makeUser();
|
|
117
|
+
const device = await toIdentityPort(generateIdentity());
|
|
118
|
+
const verdict = await verifyMembershipProof({
|
|
119
|
+
proof: "a".repeat(MAX_MEMBERSHIP_PROOF_LENGTH + 1),
|
|
120
|
+
deviceId: device.deviceId,
|
|
121
|
+
principalId: user.deviceId,
|
|
122
|
+
...(await makeVerifier()),
|
|
123
|
+
});
|
|
124
|
+
expect(verdict).toEqual({ ok: false, reason: "too_long" });
|
|
125
|
+
});
|
|
126
|
+
it("mints proofs comfortably inside the length limit", async () => {
|
|
127
|
+
const user = await makeUser();
|
|
128
|
+
const device = await toIdentityPort(generateIdentity());
|
|
129
|
+
const proof = await mintMembershipProof({
|
|
130
|
+
userIdentity: user,
|
|
131
|
+
clock: createSystemClock(),
|
|
132
|
+
deviceId: device.deviceId,
|
|
133
|
+
});
|
|
134
|
+
expect(proof.length).toBeLessThan(MAX_MEMBERSHIP_PROOF_LENGTH / 2);
|
|
135
|
+
});
|
|
136
|
+
it("does not verify text that is not a proof", async () => {
|
|
137
|
+
const user = await makeUser();
|
|
138
|
+
const device = await toIdentityPort(generateIdentity());
|
|
139
|
+
const verdict = await verifyMembershipProof({
|
|
140
|
+
proof: "not a proof",
|
|
141
|
+
deviceId: device.deviceId,
|
|
142
|
+
principalId: user.deviceId,
|
|
143
|
+
...(await makeVerifier()),
|
|
144
|
+
});
|
|
145
|
+
expect(verdict.ok).toBe(false);
|
|
146
|
+
});
|
|
147
|
+
});
|
|
148
|
+
//# sourceMappingURL=membership-proof.unit.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"membership-proof.unit.test.js","sourceRoot":"","sources":["../../src/test/membership-proof.unit.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Integration tests for trusting a person once instead of every device they run (agent-comms#266). Two machines meet through a real hub, each trusting only the other's user principal and no device by id. A device is trusted because its gossiped advert carries a proof the trusted principal vouches for it, so it shows up in listAgents and can be sent a DM, while a device of a principal nobody trusted stays invisible.
|
|
3
|
+
*/
|
|
4
|
+
export {};
|
|
5
|
+
//# sourceMappingURL=principal-membership-trust.integration.test.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"principal-membership-trust.integration.test.d.ts","sourceRoot":"","sources":["../../src/test/principal-membership-trust.integration.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|