agent-comms 4.4.0 → 4.5.0
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 +3 -3
- package/dist/core/hub-session.d.ts.map +1 -1
- package/dist/core/hub-session.js +6 -4
- 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/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
|
@@ -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"}
|
|
@@ -0,0 +1,169 @@
|
|
|
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
|
+
import * as fs from "node:fs";
|
|
5
|
+
import * as path from "node:path";
|
|
6
|
+
import { tmpdir } from "node:os";
|
|
7
|
+
import { afterEach, describe, expect, it } from "vitest";
|
|
8
|
+
import { MeshStore } from "../core/mesh-store.js";
|
|
9
|
+
import { dmRoomPath } from "../core/room-path.js";
|
|
10
|
+
import { realHubOverWs } from "./hub-helpers.js";
|
|
11
|
+
import { wireTestTransport } from "./test-transport.js";
|
|
12
|
+
let nextPort = 26_400;
|
|
13
|
+
function freshPort() {
|
|
14
|
+
nextPort += 1;
|
|
15
|
+
return nextPort;
|
|
16
|
+
}
|
|
17
|
+
/** Short enough that a gossip re-advertisement fires within a test's own poll budget. */
|
|
18
|
+
const FAST_GOSSIP_INTERVAL_MS = 50;
|
|
19
|
+
const POLL_ATTEMPTS = 100;
|
|
20
|
+
const POLL_INTERVAL_MS = 50;
|
|
21
|
+
/** How long a device that must stay invisible is watched for, several gossip rounds. */
|
|
22
|
+
const ABSENCE_WATCH_MS = 1500;
|
|
23
|
+
const sleep = async (ms) => new Promise((resolve) => {
|
|
24
|
+
setTimeout(resolve, ms);
|
|
25
|
+
});
|
|
26
|
+
async function waitFor(what, check) {
|
|
27
|
+
for (let i = 0; i < POLL_ATTEMPTS; i++) {
|
|
28
|
+
if (await check())
|
|
29
|
+
return;
|
|
30
|
+
await sleep(POLL_INTERVAL_MS);
|
|
31
|
+
}
|
|
32
|
+
expect(false, `timed out waiting for ${what}`).toBeTruthy();
|
|
33
|
+
}
|
|
34
|
+
const cleanups = [];
|
|
35
|
+
const dirs = [];
|
|
36
|
+
afterEach(async () => {
|
|
37
|
+
for (const close of cleanups.splice(0)) {
|
|
38
|
+
await close();
|
|
39
|
+
}
|
|
40
|
+
for (const dir of dirs.splice(0)) {
|
|
41
|
+
fs.rmSync(dir, { recursive: true, force: true });
|
|
42
|
+
}
|
|
43
|
+
});
|
|
44
|
+
function userDir() {
|
|
45
|
+
const dir = fs.mkdtempSync(path.join(tmpdir(), "principal-trust-user-"));
|
|
46
|
+
dirs.push(dir);
|
|
47
|
+
return dir;
|
|
48
|
+
}
|
|
49
|
+
/** One machine's store: `userDir` is that account's user identity, shared by every store given the same one. */
|
|
50
|
+
async function machineStore(hubUrl, coordinatorPort, userIdentityDir) {
|
|
51
|
+
const store = new MeshStore({ coordinatorPort, hubUrl });
|
|
52
|
+
await wireTestTransport(store, {
|
|
53
|
+
presenceReadvertiseIntervalMs: FAST_GOSSIP_INTERVAL_MS,
|
|
54
|
+
userIdentityOptions: { dir: userIdentityDir },
|
|
55
|
+
});
|
|
56
|
+
await store.init();
|
|
57
|
+
cleanups.push(async () => store.shutdown());
|
|
58
|
+
return store;
|
|
59
|
+
}
|
|
60
|
+
function principalOf(store) {
|
|
61
|
+
const principal = store.getUserPrincipalId();
|
|
62
|
+
if (principal === undefined)
|
|
63
|
+
throw new Error("store has no identity yet");
|
|
64
|
+
return principal;
|
|
65
|
+
}
|
|
66
|
+
async function register(store, name) {
|
|
67
|
+
await store.registerAgent({
|
|
68
|
+
name,
|
|
69
|
+
harness: "test",
|
|
70
|
+
cwd: `/test/${name}`,
|
|
71
|
+
pid: process.pid,
|
|
72
|
+
visibility: "visible",
|
|
73
|
+
tags: [],
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
describe("principal membership trust", () => {
|
|
77
|
+
it("shows a trusted principal's device without that device being trusted by id, and lets it be sent a DM", async () => {
|
|
78
|
+
const hub = await realHubOverWs();
|
|
79
|
+
cleanups.push(hub.close);
|
|
80
|
+
const dirA = userDir();
|
|
81
|
+
const dirB = userDir();
|
|
82
|
+
// Machine A: a gateway and a separate local agent, both under the same account.
|
|
83
|
+
const a1 = await machineStore(hub.url, freshPort(), dirA);
|
|
84
|
+
const a2 = await machineStore(hub.url, a1.coordinatorPort, dirA);
|
|
85
|
+
await register(a2, "a2-local-agent");
|
|
86
|
+
// Machine B: its own gateway and agent, a different account.
|
|
87
|
+
const b1 = await machineStore(hub.url, freshPort(), dirB);
|
|
88
|
+
await register(b1, "b1-remote");
|
|
89
|
+
// Each side trusts only the other's principal. No device id is trusted anywhere.
|
|
90
|
+
a1.addTrustedGatewayPrincipal(principalOf(b1));
|
|
91
|
+
b1.addTrustedGatewayPrincipal(principalOf(a1));
|
|
92
|
+
expect(b1.listTrustedGateways()).toEqual([]);
|
|
93
|
+
await waitFor("b1 to see a2 through the hub", async () => {
|
|
94
|
+
const agents = await b1.listAgents(b1.peerId);
|
|
95
|
+
return agents.some((agent) => agent.id === a2.peerId);
|
|
96
|
+
});
|
|
97
|
+
const dmPath = dmRoomPath(b1.peerId, a2.peerId);
|
|
98
|
+
const request = b1.requestDmAccess(a2.peerId);
|
|
99
|
+
await waitFor("a2 to see b1's pending request", async () => {
|
|
100
|
+
await Promise.resolve();
|
|
101
|
+
return a2.listPendingRoomJoins().length === 1;
|
|
102
|
+
});
|
|
103
|
+
a2.acceptRoomJoin(dmPath, b1.peerId);
|
|
104
|
+
await request;
|
|
105
|
+
});
|
|
106
|
+
it("does not show a device whose principal nobody trusted", async () => {
|
|
107
|
+
const hub = await realHubOverWs();
|
|
108
|
+
cleanups.push(hub.close);
|
|
109
|
+
const dirA = userDir();
|
|
110
|
+
const dirB = userDir();
|
|
111
|
+
const dirStranger = userDir();
|
|
112
|
+
const a1 = await machineStore(hub.url, freshPort(), dirA);
|
|
113
|
+
const a2 = await machineStore(hub.url, a1.coordinatorPort, dirA);
|
|
114
|
+
await register(a2, "a2-local-agent");
|
|
115
|
+
const b1 = await machineStore(hub.url, freshPort(), dirB);
|
|
116
|
+
const stranger = await machineStore(hub.url, freshPort(), dirStranger);
|
|
117
|
+
await register(stranger, "stranger");
|
|
118
|
+
a1.addTrustedGatewayPrincipal(principalOf(b1));
|
|
119
|
+
// b1 trusts A's principal and nothing else, and the stranger's gateway trusts b1's so it advertises.
|
|
120
|
+
b1.addTrustedGatewayPrincipal(principalOf(a1));
|
|
121
|
+
stranger.addTrustedGatewayPrincipal(principalOf(b1));
|
|
122
|
+
await waitFor("b1 to see a2", async () => {
|
|
123
|
+
const agents = await b1.listAgents(b1.peerId);
|
|
124
|
+
return agents.some((agent) => agent.id === a2.peerId);
|
|
125
|
+
});
|
|
126
|
+
await sleep(ABSENCE_WATCH_MS);
|
|
127
|
+
const agents = await b1.listAgents(b1.peerId);
|
|
128
|
+
expect(agents.some((agent) => agent.id === stranger.peerId)).toBe(false);
|
|
129
|
+
});
|
|
130
|
+
it("lists a device trusted this way, and says which principal vouches for it", async () => {
|
|
131
|
+
const hub = await realHubOverWs();
|
|
132
|
+
cleanups.push(hub.close);
|
|
133
|
+
const dirA = userDir();
|
|
134
|
+
const dirB = userDir();
|
|
135
|
+
const a1 = await machineStore(hub.url, freshPort(), dirA);
|
|
136
|
+
const a2 = await machineStore(hub.url, a1.coordinatorPort, dirA);
|
|
137
|
+
await register(a2, "a2-local-agent");
|
|
138
|
+
const b1 = await machineStore(hub.url, freshPort(), dirB);
|
|
139
|
+
a1.addTrustedGatewayPrincipal(principalOf(b1));
|
|
140
|
+
b1.addTrustedGatewayPrincipal(principalOf(a1));
|
|
141
|
+
await waitFor("b1 to see a2", async () => {
|
|
142
|
+
const agents = await b1.listAgents(b1.peerId);
|
|
143
|
+
return agents.some((agent) => agent.id === a2.peerId);
|
|
144
|
+
});
|
|
145
|
+
expect(b1.listVerifiedMembers()).toContainEqual({
|
|
146
|
+
device: a2.peerId,
|
|
147
|
+
principal: principalOf(a1),
|
|
148
|
+
});
|
|
149
|
+
});
|
|
150
|
+
it("keeps merging, and still honours the valid principal, when another trusted principal id is malformed", async () => {
|
|
151
|
+
const hub = await realHubOverWs();
|
|
152
|
+
cleanups.push(hub.close);
|
|
153
|
+
const dirA = userDir();
|
|
154
|
+
const dirB = userDir();
|
|
155
|
+
const a1 = await machineStore(hub.url, freshPort(), dirA);
|
|
156
|
+
const a2 = await machineStore(hub.url, a1.coordinatorPort, dirA);
|
|
157
|
+
await register(a2, "a2-local-agent");
|
|
158
|
+
const b1 = await machineStore(hub.url, freshPort(), dirB);
|
|
159
|
+
a1.addTrustedGatewayPrincipal(principalOf(b1));
|
|
160
|
+
// A typo ahead of the real principal: it must neither stop the hub directory merge nor block the principal after it.
|
|
161
|
+
b1.addTrustedGatewayPrincipal("not-a-device-id");
|
|
162
|
+
b1.addTrustedGatewayPrincipal(principalOf(a1));
|
|
163
|
+
await waitFor("b1 to see a2 despite the malformed principal", async () => {
|
|
164
|
+
const agents = await b1.listAgents(b1.peerId);
|
|
165
|
+
return agents.some((agent) => agent.id === a2.peerId);
|
|
166
|
+
});
|
|
167
|
+
});
|
|
168
|
+
});
|
|
169
|
+
//# sourceMappingURL=principal-membership-trust.integration.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"principal-membership-trust.integration.test.js","sourceRoot":"","sources":["../../src/test/principal-membership-trust.integration.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test-transport.d.ts","sourceRoot":"","sources":["../../src/test/test-transport.ts"],"names":[],"mappings":"AAAA,icAAic;AAKjc,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AAMnE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAG9D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAEpE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAKvD,msCAAmsC;AACnsC,UAAU,oBAAoB;IAC5B,IAAI,CAAC,EAAE,QAAQ,CAAC,YAAY,CAAC,GAAG,SAAS,CAAC;IAC1C,0BAA0B,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAChD,6BAA6B,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACnD,mBAAmB,CAAC,EAAE,QAAQ,CAAC,mBAAmB,CAAC,GAAG,SAAS,CAAC;CACjE;
|
|
1
|
+
{"version":3,"file":"test-transport.d.ts","sourceRoot":"","sources":["../../src/test/test-transport.ts"],"names":[],"mappings":"AAAA,icAAic;AAKjc,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AAMnE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAG9D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAEpE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAKvD,msCAAmsC;AACnsC,UAAU,oBAAoB;IAC5B,IAAI,CAAC,EAAE,QAAQ,CAAC,YAAY,CAAC,GAAG,SAAS,CAAC;IAC1C,0BAA0B,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAChD,6BAA6B,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACnD,mBAAmB,CAAC,EAAE,QAAQ,CAAC,mBAAmB,CAAC,GAAG,SAAS,CAAC;CACjE;AA2DD,msCAAmsC;AACnsC,wBAAsB,iBAAiB,CACrC,KAAK,EAAE,SAAS,EAChB,OAAO,CAAC,EAAE,oBAAoB,GAC7B,OAAO,CAAC,YAAY,CAAC,CAGvB;AAED,ueAAue;AACve,wBAAsB,wBAAwB,CAC5C,KAAK,EAAE,SAAS,EAChB,OAAO,CAAC,EAAE,oBAAoB,GAC7B,OAAO,CAAC;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,SAAS,EAAE,iBAAiB,CAAA;CAAE,CAAC,CAE/D;AAMD;;GAEG;AACH,wBAAsB,OAAO,CAC3B,SAAS,EAAE,MAAM,OAAO,EACxB,WAAW,EAAE,MAAM,EACnB,SAAS,SAA8B,GACtC,OAAO,CAAC,IAAI,CAAC,CAYf"}
|
|
@@ -33,6 +33,7 @@ async function wireTransportInternal(store, options) {
|
|
|
33
33
|
const transport = new WireMeshTransport(store.events, identity, {
|
|
34
34
|
roomVerbHandlers: store.roomVerbHandlers,
|
|
35
35
|
roomJoinApprovalTimeoutMs: store.roomJoinApprovalTimeoutMs,
|
|
36
|
+
verifyMembership: async (claim) => store.membership.verify(claim),
|
|
36
37
|
pendingConnectionTimeoutMs,
|
|
37
38
|
getCurrentPresence: () => store.selfStatus,
|
|
38
39
|
presenceReadvertiseIntervalMs,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test-transport.js","sourceRoot":"","sources":["../../src/test/test-transport.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"test-transport.js","sourceRoot":"","sources":["../../src/test/test-transport.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED