agent-comms 3.14.0 → 3.16.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 +52 -1
- package/dist/core/bridge-mesh.d.ts +2 -0
- package/dist/core/bridge-mesh.d.ts.map +1 -1
- package/dist/core/bridge-mesh.js +3 -1
- package/dist/core/bridge-mesh.js.map +1 -1
- package/dist/core/bridge.d.ts +10 -0
- package/dist/core/bridge.d.ts.map +1 -1
- package/dist/core/bridge.js +40 -1
- package/dist/core/bridge.js.map +1 -1
- package/dist/core/connection-code-tool.d.ts +18 -0
- package/dist/core/connection-code-tool.d.ts.map +1 -0
- package/dist/core/connection-code-tool.js +74 -0
- package/dist/core/connection-code-tool.js.map +1 -0
- package/dist/core/connection-code.d.ts +65 -0
- package/dist/core/connection-code.d.ts.map +1 -0
- package/dist/core/connection-code.js +180 -0
- package/dist/core/connection-code.js.map +1 -0
- package/dist/core/dm-send-delegation.d.ts +32 -0
- package/dist/core/dm-send-delegation.d.ts.map +1 -0
- package/dist/core/dm-send-delegation.js +35 -0
- package/dist/core/dm-send-delegation.js.map +1 -0
- package/dist/core/gateway-trust.d.ts +27 -6
- package/dist/core/gateway-trust.d.ts.map +1 -1
- package/dist/core/gateway-trust.js +52 -4
- package/dist/core/gateway-trust.js.map +1 -1
- package/dist/core/identity-store.d.ts +33 -1
- package/dist/core/identity-store.d.ts.map +1 -1
- package/dist/core/identity-store.js +104 -1
- package/dist/core/identity-store.js.map +1 -1
- package/dist/core/mesh-store.d.ts +15 -5
- package/dist/core/mesh-store.d.ts.map +1 -1
- package/dist/core/mesh-store.js +26 -6
- package/dist/core/mesh-store.js.map +1 -1
- package/dist/core/pgp-keyserver.d.ts +12 -0
- package/dist/core/pgp-keyserver.d.ts.map +1 -0
- package/dist/core/pgp-keyserver.js +22 -0
- package/dist/core/pgp-keyserver.js.map +1 -0
- package/dist/core/room-lifecycle.d.ts +3 -1
- package/dist/core/room-lifecycle.d.ts.map +1 -1
- package/dist/core/room-lifecycle.js +4 -3
- package/dist/core/room-lifecycle.js.map +1 -1
- package/dist/core/tool.d.ts +11 -2
- package/dist/core/tool.d.ts.map +1 -1
- package/dist/core/tool.js +12 -2
- package/dist/core/tool.js.map +1 -1
- package/dist/core/types.d.ts +41 -0
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/types.js +25 -0
- package/dist/core/types.js.map +1 -1
- package/dist/test/bridge-mesh.test.js +14 -0
- package/dist/test/bridge-mesh.test.js.map +1 -1
- package/dist/test/connection-code-ledger-persistence.test.d.ts +5 -0
- package/dist/test/connection-code-ledger-persistence.test.d.ts.map +1 -0
- package/dist/test/connection-code-ledger-persistence.test.js +84 -0
- package/dist/test/connection-code-ledger-persistence.test.js.map +1 -0
- package/dist/test/connection-code-tool.test.d.ts +2 -0
- package/dist/test/connection-code-tool.test.d.ts.map +1 -0
- package/dist/test/connection-code-tool.test.js +296 -0
- package/dist/test/connection-code-tool.test.js.map +1 -0
- package/dist/test/connection-code.test.d.ts +5 -0
- package/dist/test/connection-code.test.d.ts.map +1 -0
- package/dist/test/connection-code.test.js +236 -0
- package/dist/test/connection-code.test.js.map +1 -0
- package/dist/test/dm-send-capability-admission.integration.test.js +82 -1
- package/dist/test/dm-send-capability-admission.integration.test.js.map +1 -1
- package/dist/test/dm-send-delegation.test.d.ts +2 -0
- package/dist/test/dm-send-delegation.test.d.ts.map +1 -0
- package/dist/test/dm-send-delegation.test.js +146 -0
- package/dist/test/dm-send-delegation.test.js.map +1 -0
- package/dist/test/dm-send-principal-delegation.integration.test.d.ts +2 -0
- package/dist/test/dm-send-principal-delegation.integration.test.d.ts.map +1 -0
- package/dist/test/dm-send-principal-delegation.integration.test.js +89 -0
- package/dist/test/dm-send-principal-delegation.integration.test.js.map +1 -0
- package/dist/test/gateway-trust.test.js +150 -1
- package/dist/test/gateway-trust.test.js.map +1 -1
- package/dist/test/identity-store.test.js +88 -1
- package/dist/test/identity-store.test.js.map +1 -1
- package/dist/test/pgp-keyserver.test.d.ts +5 -0
- package/dist/test/pgp-keyserver.test.d.ts.map +1 -0
- package/dist/test/pgp-keyserver.test.js +24 -0
- package/dist/test/pgp-keyserver.test.js.map +1 -0
- package/dist/test/test-transport.d.ts +2 -1
- package/dist/test/test-transport.d.ts.map +1 -1
- package/dist/test/test-transport.js +5 -5
- package/dist/test/test-transport.js.map +1 -1
- package/package.json +2 -1
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* End-to-end integration test for agent-comms#187: a user principal admitted into another user's DM-communication scope with room delegation depth (admitAgentForDm) mints, via delegateDmSendToDevice, a further dm:send token naming one of its own devices as bearer -- and that device's own requestDmAccess, presenting only the delegated token, auto-admits exactly the way a directly-admitted bare device already does in dm-send-capability-admission.integration.test.ts. Proves the full "trust this whole person, not just one of their devices" flow the issue names, end to end over a real wire connection.
|
|
3
|
+
*/
|
|
4
|
+
import * as fs from "node:fs";
|
|
5
|
+
import * as path from "node:path";
|
|
6
|
+
import { tmpdir } from "node:os";
|
|
7
|
+
import { test, expect } from "vitest";
|
|
8
|
+
import { deviceIdFromHex, deviceIdToHex, } from "wire-mesh-core/domain/device-id";
|
|
9
|
+
import { createSystemClock } from "wire-mesh-core/adapters/system-clock";
|
|
10
|
+
import { MeshStore } from "../core/mesh-store.js";
|
|
11
|
+
import { loadOrCreateUserIdentity } from "../core/user-identity.js";
|
|
12
|
+
import { toIdentityPort } from "../core/wire-mesh-identity.js";
|
|
13
|
+
import { randomId } from "../core/random-id.js";
|
|
14
|
+
import { delegateDmSendToDevice } from "../core/dm-send-delegation.js";
|
|
15
|
+
import { waitFor, wireTestTransport } from "./test-transport.js";
|
|
16
|
+
/** Delegated token expiry -- comfortably longer than a single test run, matching this file's sibling integration tests' own convention. */
|
|
17
|
+
const DELEGATED_TOKEN_TTL_MS = 60_000;
|
|
18
|
+
/** The admitted principal keeps exactly one further hop of delegation depth, enough to reach one of its own devices -- the minimal case the issue itself describes ("sub-delegate to its own devices"). */
|
|
19
|
+
const ONE_HOP_DELEGABLE = 1;
|
|
20
|
+
let nextPort = 20_970;
|
|
21
|
+
function freshPort() {
|
|
22
|
+
nextPort += 1;
|
|
23
|
+
return nextPort;
|
|
24
|
+
}
|
|
25
|
+
function tempUserIdentityDir() {
|
|
26
|
+
return {
|
|
27
|
+
dir: fs.mkdtempSync(path.join(tmpdir(), "agent-comms-principal-delegation-test-")),
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
test("a principal's own device, holding only a delegated dm:send token, auto-admits into the admitting user's DM scope", async () => {
|
|
31
|
+
const port = freshPort();
|
|
32
|
+
// Alice's own user-principal identity is controlled directly (not the throwaway one wireTestTransport would otherwise generate and never disclose), so this test can compute the exact "user" scope path a delegated token must keep naming.
|
|
33
|
+
const aliceUserIdentityOptions = tempUserIdentityDir();
|
|
34
|
+
const alicePrincipal = await toIdentityPort(loadOrCreateUserIdentity(aliceUserIdentityOptions));
|
|
35
|
+
const a = new MeshStore(port);
|
|
36
|
+
await wireTestTransport(a, undefined, undefined, undefined, aliceUserIdentityOptions);
|
|
37
|
+
await a.init();
|
|
38
|
+
await a.registerAgent({
|
|
39
|
+
name: "alice",
|
|
40
|
+
harness: "test",
|
|
41
|
+
cwd: "/test/alice",
|
|
42
|
+
pid: process.pid,
|
|
43
|
+
visibility: "visible",
|
|
44
|
+
tags: [],
|
|
45
|
+
});
|
|
46
|
+
// Bob's own user-principal identity -- distinct from any bridge-slot device identity, and distinct from any of Bob's own devices below.
|
|
47
|
+
const bobUserIdentityOptions = tempUserIdentityDir();
|
|
48
|
+
const bobPrincipal = await toIdentityPort(loadOrCreateUserIdentity(bobUserIdentityOptions));
|
|
49
|
+
// One of Bob's own devices -- an ordinary bridge slot, wired and connected to Alice exactly like any other peer.
|
|
50
|
+
const d = new MeshStore(port);
|
|
51
|
+
await wireTestTransport(d);
|
|
52
|
+
await d.init();
|
|
53
|
+
await d.registerAgent({
|
|
54
|
+
name: "bobs-device",
|
|
55
|
+
harness: "test",
|
|
56
|
+
cwd: "/test/bobs-device",
|
|
57
|
+
pid: process.pid,
|
|
58
|
+
visibility: "visible",
|
|
59
|
+
tags: [],
|
|
60
|
+
});
|
|
61
|
+
await waitFor(() => a.serialise().agents[d.peerId] !== undefined, "alice sees bob's device");
|
|
62
|
+
try {
|
|
63
|
+
// Alice trusts Bob's own principal -- not this specific device -- with enough delegation depth for Bob to admit his own devices.
|
|
64
|
+
const grant = await a.admitAgentForDm(deviceIdToHex(bobPrincipal.deviceId), ONE_HOP_DELEGABLE);
|
|
65
|
+
// Bob's principal delegates that admission to this one device, out of band from Alice entirely -- Alice never learns this device's own device-id in advance.
|
|
66
|
+
const clock = createSystemClock();
|
|
67
|
+
const delegated = await delegateDmSendToDevice({
|
|
68
|
+
userIdentity: bobPrincipal,
|
|
69
|
+
userIdentityOptions: bobUserIdentityOptions,
|
|
70
|
+
clock,
|
|
71
|
+
tokenId: randomId(),
|
|
72
|
+
parent: grant,
|
|
73
|
+
deviceId: deviceIdFromHex(d.peerId),
|
|
74
|
+
remoteUserPrincipalDeviceId: alicePrincipal.deviceId,
|
|
75
|
+
expires: clock.now() + DELEGATED_TOKEN_TTL_MS,
|
|
76
|
+
});
|
|
77
|
+
expect(delegated.ok, `expected the delegation to succeed, got ${JSON.stringify(delegated)}`).toBe(true);
|
|
78
|
+
if (!delegated.ok)
|
|
79
|
+
return;
|
|
80
|
+
await d.requestDmAccess(a.peerId, delegated.token);
|
|
81
|
+
expect(a.listPendingRoomJoins()).toEqual([]);
|
|
82
|
+
expect(d.listPendingRoomJoins()).toEqual([]);
|
|
83
|
+
}
|
|
84
|
+
finally {
|
|
85
|
+
await d.shutdown();
|
|
86
|
+
await a.shutdown();
|
|
87
|
+
}
|
|
88
|
+
});
|
|
89
|
+
//# sourceMappingURL=dm-send-principal-delegation.integration.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dm-send-principal-delegation.integration.test.js","sourceRoot":"","sources":["../../src/test/dm-send-principal-delegation.integration.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,15 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Direct unit tests for GatewayTrust -- the cross-machine trust boundary's own allowlist (agent-comms#156), tested standalone against no real transport or hub socket, mirroring coordinator-gateway.test.ts's own approach for the sibling gateway-lifecycle class.
|
|
2
|
+
* Direct unit tests for GatewayTrust -- the cross-machine trust boundary's own allowlist (agent-comms#156), tested standalone against no real transport or hub socket, mirroring coordinator-gateway.test.ts's own approach for the sibling gateway-lifecycle class. Also covers slot-based persistence (agent-comms#186): loading a previously trusted set on construction and writing it back on every add/remove.
|
|
3
3
|
*/
|
|
4
|
+
import * as fs from "node:fs";
|
|
5
|
+
import { tmpdir } from "node:os";
|
|
6
|
+
import path from "node:path";
|
|
4
7
|
import { describe, expect, it } from "vitest";
|
|
5
8
|
import { GatewayTrust } from "../core/gateway-trust.js";
|
|
9
|
+
function tempSlot(harness) {
|
|
10
|
+
const dir = fs.mkdtempSync(path.join(tmpdir(), "agent-comms-gateway-trust-test-"));
|
|
11
|
+
return { harness, cwd: "/tmp/project", dir };
|
|
12
|
+
}
|
|
6
13
|
describe("GatewayTrust", () => {
|
|
7
14
|
it("trusts nobody by default", () => {
|
|
8
15
|
const trust = new GatewayTrust();
|
|
@@ -57,4 +64,146 @@ describe("GatewayTrust", () => {
|
|
|
57
64
|
expect(trust.list()).toEqual(["ddeeff"]);
|
|
58
65
|
});
|
|
59
66
|
});
|
|
67
|
+
describe("GatewayTrust persistence (agent-comms#186)", () => {
|
|
68
|
+
it("constructed with no slot, never touches disk and behaves exactly as before", () => {
|
|
69
|
+
const trust = new GatewayTrust();
|
|
70
|
+
trust.add("aabbcc");
|
|
71
|
+
expect(trust.isTrusted("aabbcc")).toBe(true);
|
|
72
|
+
expect(trust.list()).toEqual(["aabbcc"]);
|
|
73
|
+
});
|
|
74
|
+
it("constructed with a slot that has never saved a trusted set, starts empty", () => {
|
|
75
|
+
const slot = tempSlot("pi");
|
|
76
|
+
const trust = new GatewayTrust(slot);
|
|
77
|
+
expect(trust.hasAny()).toBe(false);
|
|
78
|
+
expect(trust.list()).toEqual([]);
|
|
79
|
+
});
|
|
80
|
+
it("loads a previously persisted trusted set on construction", () => {
|
|
81
|
+
const slot = tempSlot("pi");
|
|
82
|
+
new GatewayTrust(slot).add("aabbcc");
|
|
83
|
+
const restarted = new GatewayTrust(slot);
|
|
84
|
+
expect(restarted.isTrusted("aabbcc")).toBe(true);
|
|
85
|
+
expect(restarted.list()).toEqual(["aabbcc"]);
|
|
86
|
+
});
|
|
87
|
+
it("persists an add immediately, visible to a fresh instance for the same slot without either instance restarting", () => {
|
|
88
|
+
const slot = tempSlot("pi");
|
|
89
|
+
const trust = new GatewayTrust(slot);
|
|
90
|
+
trust.add("aabbcc");
|
|
91
|
+
const other = new GatewayTrust(slot);
|
|
92
|
+
expect(other.isTrusted("aabbcc")).toBe(true);
|
|
93
|
+
});
|
|
94
|
+
it("persists a remove, so a restarted instance no longer trusts the removed device", () => {
|
|
95
|
+
const slot = tempSlot("pi");
|
|
96
|
+
const first = new GatewayTrust(slot);
|
|
97
|
+
first.add("aabbcc");
|
|
98
|
+
first.add("ddeeff");
|
|
99
|
+
first.remove("aabbcc");
|
|
100
|
+
const restarted = new GatewayTrust(slot);
|
|
101
|
+
expect(restarted.list()).toEqual(["ddeeff"]);
|
|
102
|
+
});
|
|
103
|
+
it("normalises hex case in the persisted set the same way the in-memory set is normalised", () => {
|
|
104
|
+
const slot = tempSlot("pi");
|
|
105
|
+
new GatewayTrust(slot).add("AaBbCc");
|
|
106
|
+
const restarted = new GatewayTrust(slot);
|
|
107
|
+
expect(restarted.list()).toEqual(["aabbcc"]);
|
|
108
|
+
});
|
|
109
|
+
it("two independent slots persist to distinct files and never see each other's trust", () => {
|
|
110
|
+
const slotA = tempSlot("pi");
|
|
111
|
+
const slotB = tempSlot("claude-code");
|
|
112
|
+
new GatewayTrust(slotA).add("aabbcc");
|
|
113
|
+
const restartedB = new GatewayTrust(slotB);
|
|
114
|
+
expect(restartedB.list()).toEqual([]);
|
|
115
|
+
});
|
|
116
|
+
// Principal persistence (agent-comms#187) -- extends #186's own device-only persistence to the second, parallel principal allowlist, per #186's own issue text naming #187 as the one that decides what gets stored.
|
|
117
|
+
it("persists a trusted principal, surviving a restart alongside the bare-device set", () => {
|
|
118
|
+
const slot = tempSlot("pi");
|
|
119
|
+
const first = new GatewayTrust(slot);
|
|
120
|
+
first.add("aabbcc");
|
|
121
|
+
first.addPrincipal("112233");
|
|
122
|
+
const restarted = new GatewayTrust(slot);
|
|
123
|
+
expect(restarted.list()).toEqual(["aabbcc"]);
|
|
124
|
+
expect(restarted.listPrincipals()).toEqual(["112233"]);
|
|
125
|
+
});
|
|
126
|
+
it("persists a principal removal independently of the bare-device set", () => {
|
|
127
|
+
const slot = tempSlot("pi");
|
|
128
|
+
const first = new GatewayTrust(slot);
|
|
129
|
+
first.addPrincipal("112233");
|
|
130
|
+
first.addPrincipal("445566");
|
|
131
|
+
first.removePrincipal("112233");
|
|
132
|
+
const restarted = new GatewayTrust(slot);
|
|
133
|
+
expect(restarted.listPrincipals()).toEqual(["445566"]);
|
|
134
|
+
});
|
|
135
|
+
});
|
|
136
|
+
describe("GatewayTrust -- principal-keyed trust (agent-comms#187)", () => {
|
|
137
|
+
it("trusts no principal by default", () => {
|
|
138
|
+
const trust = new GatewayTrust();
|
|
139
|
+
expect(trust.isTrustedPrincipal("aabbcc")).toBe(false);
|
|
140
|
+
expect(trust.listPrincipals()).toEqual([]);
|
|
141
|
+
});
|
|
142
|
+
it("trusts a principal once added, independently of the bare-device set", () => {
|
|
143
|
+
const trust = new GatewayTrust();
|
|
144
|
+
trust.addPrincipal("AABBCC");
|
|
145
|
+
expect(trust.isTrustedPrincipal("aabbcc")).toBe(true);
|
|
146
|
+
expect(trust.listPrincipals()).toEqual(["aabbcc"]);
|
|
147
|
+
expect(trust.isTrusted("aabbcc")).toBe(false);
|
|
148
|
+
});
|
|
149
|
+
it("normalises hex case for principals the same way it does for bare devices", () => {
|
|
150
|
+
const trust = new GatewayTrust();
|
|
151
|
+
trust.addPrincipal("AaBbCc");
|
|
152
|
+
expect(trust.isTrustedPrincipal("aabbcc")).toBe(true);
|
|
153
|
+
expect(trust.isTrustedPrincipal("AABBCC")).toBe(true);
|
|
154
|
+
});
|
|
155
|
+
it("is idempotent: adding the same principal twice keeps it listed once", () => {
|
|
156
|
+
const trust = new GatewayTrust();
|
|
157
|
+
trust.addPrincipal("aabbcc");
|
|
158
|
+
trust.addPrincipal("AABBCC");
|
|
159
|
+
expect(trust.listPrincipals()).toEqual(["aabbcc"]);
|
|
160
|
+
});
|
|
161
|
+
it("stops trusting a principal once removed", () => {
|
|
162
|
+
const trust = new GatewayTrust();
|
|
163
|
+
trust.addPrincipal("aabbcc");
|
|
164
|
+
trust.removePrincipal("AABBCC");
|
|
165
|
+
expect(trust.isTrustedPrincipal("aabbcc")).toBe(false);
|
|
166
|
+
expect(trust.listPrincipals()).toEqual([]);
|
|
167
|
+
});
|
|
168
|
+
it("removing a principal that was never trusted is a safe no-op", () => {
|
|
169
|
+
const trust = new GatewayTrust();
|
|
170
|
+
expect(() => {
|
|
171
|
+
trust.removePrincipal("aabbcc");
|
|
172
|
+
}).not.toThrow();
|
|
173
|
+
expect(trust.listPrincipals()).toEqual([]);
|
|
174
|
+
});
|
|
175
|
+
it("hasAny becomes true once a principal is trusted, even with no bare device ever trusted", () => {
|
|
176
|
+
const trust = new GatewayTrust();
|
|
177
|
+
expect(trust.hasAny()).toBe(false);
|
|
178
|
+
trust.addPrincipal("aabbcc");
|
|
179
|
+
expect(trust.hasAny()).toBe(true);
|
|
180
|
+
});
|
|
181
|
+
it("hasAny falls back to false once both the device and principal sets are empty again", () => {
|
|
182
|
+
const trust = new GatewayTrust();
|
|
183
|
+
trust.addPrincipal("aabbcc");
|
|
184
|
+
trust.removePrincipal("aabbcc");
|
|
185
|
+
expect(trust.hasAny()).toBe(false);
|
|
186
|
+
});
|
|
187
|
+
describe("isTrustedFor -- deciding trust from a verified token's own bearer and chain root", () => {
|
|
188
|
+
it("passes a bearer that is itself directly trusted, regardless of its chain root", () => {
|
|
189
|
+
const trust = new GatewayTrust();
|
|
190
|
+
trust.add("aabbcc");
|
|
191
|
+
expect(trust.isTrustedFor("aabbcc", "ffffff")).toBe(true);
|
|
192
|
+
});
|
|
193
|
+
it("passes a bearer whose chain roots at a trusted principal, even though the bearer itself was never individually trusted", () => {
|
|
194
|
+
const trust = new GatewayTrust();
|
|
195
|
+
trust.addPrincipal("ffffff");
|
|
196
|
+
expect(trust.isTrustedFor("aabbcc", "ffffff")).toBe(true);
|
|
197
|
+
});
|
|
198
|
+
it("refuses a bearer that is neither directly trusted nor rooted at a trusted principal", () => {
|
|
199
|
+
const trust = new GatewayTrust();
|
|
200
|
+
expect(trust.isTrustedFor("aabbcc", "ffffff")).toBe(false);
|
|
201
|
+
});
|
|
202
|
+
it("is case-insensitive on both the bearer and the chain-root hex", () => {
|
|
203
|
+
const trust = new GatewayTrust();
|
|
204
|
+
trust.addPrincipal("FFFFFF");
|
|
205
|
+
expect(trust.isTrustedFor("AABBCC", "ffffff")).toBe(true);
|
|
206
|
+
});
|
|
207
|
+
});
|
|
208
|
+
});
|
|
60
209
|
//# sourceMappingURL=gateway-trust.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gateway-trust.test.js","sourceRoot":"","sources":["../../src/test/gateway-trust.test.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"gateway-trust.test.js","sourceRoot":"","sources":["../../src/test/gateway-trust.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,7 +10,7 @@ import { mintCapabilityToken } from "wire-mesh-core/domain/tokens";
|
|
|
10
10
|
import { createSystemClock } from "wire-mesh-core/adapters/system-clock";
|
|
11
11
|
import { generateIdentity } from "../core/identity.js";
|
|
12
12
|
import { toIdentityPort } from "../core/wire-mesh-identity.js";
|
|
13
|
-
import { deleteGroupToken, loadGroupTokens, loadOrCreateIdentity, loadIdentityForFront, probeSlotOwner, oplogDirFor, releaseIdentityLock, saveGroupToken, } from "../core/identity-store.js";
|
|
13
|
+
import { deleteGroupToken, loadGatewayTrust, loadGroupTokens, loadOrCreateIdentity, loadIdentityForFront, probeSlotOwner, oplogDirFor, releaseIdentityLock, saveGatewayTrust, saveGroupToken, } from "../core/identity-store.js";
|
|
14
14
|
const TOKEN_TTL_MS = 60_000;
|
|
15
15
|
/** A real, minted group:member token -- not an opaque placeholder -- so these tests exercise the actual (de)serialization round trip a real CapabilityToken tuple needs. groupPath is purely a storage key from this test's own point of view, distinct from the bearer device the fixture token happens to name. */
|
|
16
16
|
async function mintGroupToken(groupPath) {
|
|
@@ -244,4 +244,91 @@ test("deleteGroupToken is a no-op when nothing was saved for that group path", (
|
|
|
244
244
|
expect(loadGroupTokens(slot)).toEqual({});
|
|
245
245
|
releaseIdentityLock(slot);
|
|
246
246
|
});
|
|
247
|
+
test("loadGatewayTrust is empty for a slot that has never saved a trusted set", () => {
|
|
248
|
+
const { slot } = tempSlot("pi");
|
|
249
|
+
expect(loadGatewayTrust(slot)).toEqual({ devices: [], principals: [] });
|
|
250
|
+
});
|
|
251
|
+
test("loadGatewayTrust does not require an identity to have been created first, unlike loadRoomTokens/loadGroupTokens", () => {
|
|
252
|
+
const { slot } = tempSlot("pi");
|
|
253
|
+
expect(() => {
|
|
254
|
+
saveGatewayTrust(slot, ["aabbcc"], []);
|
|
255
|
+
}).not.toThrow();
|
|
256
|
+
expect(loadGatewayTrust(slot)).toEqual({
|
|
257
|
+
devices: ["aabbcc"],
|
|
258
|
+
principals: [],
|
|
259
|
+
});
|
|
260
|
+
});
|
|
261
|
+
test("saveGatewayTrust persists the trusted device and principal sets, loadGatewayTrust reloads the same lists", () => {
|
|
262
|
+
const { slot } = tempSlot("pi");
|
|
263
|
+
saveGatewayTrust(slot, ["aabbcc", "ddeeff"], ["112233"]);
|
|
264
|
+
expect(loadGatewayTrust(slot)).toEqual({
|
|
265
|
+
devices: ["aabbcc", "ddeeff"],
|
|
266
|
+
principals: ["112233"],
|
|
267
|
+
});
|
|
268
|
+
});
|
|
269
|
+
test("saveGatewayTrust overwrites the previously saved sets rather than merging with them", () => {
|
|
270
|
+
const { slot } = tempSlot("pi");
|
|
271
|
+
saveGatewayTrust(slot, ["aabbcc", "ddeeff"], ["112233"]);
|
|
272
|
+
saveGatewayTrust(slot, ["112233"], ["445566"]);
|
|
273
|
+
expect(loadGatewayTrust(slot)).toEqual({
|
|
274
|
+
devices: ["112233"],
|
|
275
|
+
principals: ["445566"],
|
|
276
|
+
});
|
|
277
|
+
});
|
|
278
|
+
test("saveGatewayTrust persists empty sets, clearing whatever was saved before", () => {
|
|
279
|
+
const { slot } = tempSlot("pi");
|
|
280
|
+
saveGatewayTrust(slot, ["aabbcc"], ["112233"]);
|
|
281
|
+
saveGatewayTrust(slot, [], []);
|
|
282
|
+
expect(loadGatewayTrust(slot)).toEqual({ devices: [], principals: [] });
|
|
283
|
+
});
|
|
284
|
+
test("loadGatewayTrust reads a pre-agent-comms#187 bare-array file as devices-only, with no principals", () => {
|
|
285
|
+
const { slot, dir } = tempSlot("pi");
|
|
286
|
+
// Create the real gateway-trust file at its actual path first (its exact slugified name is an implementation detail), then overwrite its content with the bare-array shape every file written before principal-keyed trust existed actually used.
|
|
287
|
+
saveGatewayTrust(slot, [], []);
|
|
288
|
+
const file = fs
|
|
289
|
+
.readdirSync(dir)
|
|
290
|
+
.find((f) => f.startsWith("gateway-trust-") && f.endsWith(".json"));
|
|
291
|
+
if (file === undefined)
|
|
292
|
+
throw new Error("expected a gateway-trust file");
|
|
293
|
+
fs.writeFileSync(path.join(dir, file), `${JSON.stringify(["aabbcc", "ddeeff"])}\n`);
|
|
294
|
+
expect(loadGatewayTrust(slot)).toEqual({
|
|
295
|
+
devices: ["aabbcc", "ddeeff"],
|
|
296
|
+
principals: [],
|
|
297
|
+
});
|
|
298
|
+
});
|
|
299
|
+
test("the gateway trust file is written with owner-only permissions", () => {
|
|
300
|
+
const { slot, dir } = tempSlot("pi");
|
|
301
|
+
saveGatewayTrust(slot, ["aabbcc"], []);
|
|
302
|
+
const file = fs
|
|
303
|
+
.readdirSync(dir)
|
|
304
|
+
.find((f) => f.startsWith("gateway-trust-") && f.endsWith(".json"));
|
|
305
|
+
expect(file, `expected a gateway-trust-*.json file in ${dir}`).toBeDefined();
|
|
306
|
+
if (file === undefined)
|
|
307
|
+
throw new Error("expected a gateway-trust file");
|
|
308
|
+
const mode = fs.statSync(path.join(dir, file)).mode & PERMISSION_BITS_MASK;
|
|
309
|
+
expect(mode).toBe(OWNER_ONLY_RW_PERMISSIONS);
|
|
310
|
+
});
|
|
311
|
+
test("the gateway trust file is a sibling of the identity file, distinct per (harness, cwd)", () => {
|
|
312
|
+
const { slot, dir } = tempSlot("pi");
|
|
313
|
+
saveGatewayTrust(slot, ["aabbcc"], []);
|
|
314
|
+
const file = fs
|
|
315
|
+
.readdirSync(dir)
|
|
316
|
+
.find((f) => f.startsWith("gateway-trust-") && f.endsWith(".json"));
|
|
317
|
+
expect(file).toBeDefined();
|
|
318
|
+
if (file === undefined)
|
|
319
|
+
throw new Error("expected a gateway-trust file");
|
|
320
|
+
expect(path.dirname(path.join(dir, file))).toBe(dir);
|
|
321
|
+
expect(file).toContain("pi");
|
|
322
|
+
});
|
|
323
|
+
test("loadGatewayTrust returns empty for a slot whose gateway trust file is corrupt", () => {
|
|
324
|
+
const { slot, dir } = tempSlot("pi");
|
|
325
|
+
saveGatewayTrust(slot, ["aabbcc"], []);
|
|
326
|
+
const file = fs
|
|
327
|
+
.readdirSync(dir)
|
|
328
|
+
.find((f) => f.startsWith("gateway-trust-") && f.endsWith(".json"));
|
|
329
|
+
if (file === undefined)
|
|
330
|
+
throw new Error("expected a gateway-trust file");
|
|
331
|
+
fs.writeFileSync(path.join(dir, file), "not valid json{{{");
|
|
332
|
+
expect(loadGatewayTrust(slot)).toEqual({ devices: [], principals: [] });
|
|
333
|
+
});
|
|
247
334
|
//# sourceMappingURL=identity-store.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"identity-store.test.js","sourceRoot":"","sources":["../../src/test/identity-store.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"identity-store.test.js","sourceRoot":"","sources":["../../src/test/identity-store.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pgp-keyserver.test.d.ts","sourceRoot":"","sources":["../../src/test/pgp-keyserver.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Unit tests for fetchPgpPublicKeyByFingerprint (agent-comms#188), against an injected fake fetch rather than a real network call.
|
|
3
|
+
*/
|
|
4
|
+
import { describe, expect, it, vi } from "vitest";
|
|
5
|
+
import { fetchPgpPublicKeyByFingerprint } from "../core/pgp-keyserver.js";
|
|
6
|
+
const ARMORED_KEY = "-----BEGIN PGP PUBLIC KEY BLOCK-----\nfake\n-----END PGP PUBLIC KEY BLOCK-----";
|
|
7
|
+
describe("fetchPgpPublicKeyByFingerprint", () => {
|
|
8
|
+
it("fetches the armored key from keys.openpgp.org's by-fingerprint endpoint", async () => {
|
|
9
|
+
const fakeFetch = vi.fn(async () => Promise.resolve(new Response(ARMORED_KEY, { status: 200 })));
|
|
10
|
+
const result = await fetchPgpPublicKeyByFingerprint("aabbccddeeff00112233445566778899aabbccd", fakeFetch);
|
|
11
|
+
expect(result).toBe(ARMORED_KEY);
|
|
12
|
+
expect(fakeFetch).toHaveBeenCalledWith("https://keys.openpgp.org/vks/v1/by-fingerprint/AABBCCDDEEFF00112233445566778899AABBCCD");
|
|
13
|
+
});
|
|
14
|
+
it("normalises a fingerprint with spaces and colons before building the URL", async () => {
|
|
15
|
+
const fakeFetch = vi.fn(async () => Promise.resolve(new Response(ARMORED_KEY, { status: 200 })));
|
|
16
|
+
await fetchPgpPublicKeyByFingerprint("aabb:ccdd:eeff:0011:2233:4455:6677:8899:aabb:ccd ", fakeFetch);
|
|
17
|
+
expect(fakeFetch).toHaveBeenCalledWith("https://keys.openpgp.org/vks/v1/by-fingerprint/AABBCCDDEEFF00112233445566778899AABBCCD");
|
|
18
|
+
});
|
|
19
|
+
it("throws when the keyserver responds with a non-2xx status", async () => {
|
|
20
|
+
const fakeFetch = vi.fn(async () => Promise.resolve(new Response("not found", { status: 404 })));
|
|
21
|
+
await expect(fetchPgpPublicKeyByFingerprint("00", fakeFetch)).rejects.toThrow(/404/);
|
|
22
|
+
});
|
|
23
|
+
});
|
|
24
|
+
//# sourceMappingURL=pgp-keyserver.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pgp-keyserver.test.js","sourceRoot":"","sources":["../../src/test/pgp-keyserver.test.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAClD,OAAO,EAAE,8BAA8B,EAAE,MAAM,0BAA0B,CAAC;AAE1E,MAAM,WAAW,GACf,gFAAgF,CAAC;AAEnF,QAAQ,CAAC,gCAAgC,EAAE,GAAG,EAAE;IAC9C,EAAE,CAAC,yEAAyE,EAAE,KAAK,IAAI,EAAE;QACvF,MAAM,SAAS,GAAG,EAAE,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,CACjC,OAAO,CAAC,OAAO,CAAC,IAAI,QAAQ,CAAC,WAAW,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,CAC5D,CAAC;QAEF,MAAM,MAAM,GAAG,MAAM,8BAA8B,CACjD,yCAAyC,EACzC,SAAS,CACV,CAAC;QAEF,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACjC,MAAM,CAAC,SAAS,CAAC,CAAC,oBAAoB,CACpC,wFAAwF,CACzF,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yEAAyE,EAAE,KAAK,IAAI,EAAE;QACvF,MAAM,SAAS,GAAG,EAAE,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,CACjC,OAAO,CAAC,OAAO,CAAC,IAAI,QAAQ,CAAC,WAAW,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,CAC5D,CAAC;QAEF,MAAM,8BAA8B,CAClC,mDAAmD,EACnD,SAAS,CACV,CAAC;QAEF,MAAM,CAAC,SAAS,CAAC,CAAC,oBAAoB,CACpC,wFAAwF,CACzF,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0DAA0D,EAAE,KAAK,IAAI,EAAE;QACxE,MAAM,SAAS,GAAG,EAAE,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,CACjC,OAAO,CAAC,OAAO,CAAC,IAAI,QAAQ,CAAC,WAAW,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,CAC5D,CAAC;QAEF,MAAM,MAAM,CACV,8BAA8B,CAAC,IAAI,EAAE,SAAS,CAAC,CAChD,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAC3B,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
/** Wires a real WireMeshTransport plus a persisted identity slot onto a freshly constructed MeshStore -- the same setTransport()/setIdentity() calls every production bridge makes immediately after construction (via createBridgeMesh). MeshStore has no default transport or identity, so every test that constructs one needs this (or an equivalent explicit wiring) before init(), createRoom(), or any other transport- or identity-using method runs. */
|
|
2
2
|
import type { IdentitySlot } from "../core/identity-store.js";
|
|
3
|
+
import type { UserIdentityOptions } from "../core/user-identity.js";
|
|
3
4
|
import type { MeshStore } from "../core/mesh-store.js";
|
|
4
5
|
/** Wires store onto a fresh WireMeshTransport and a persisted identity slot, returning the slot so a test can inspect (or reuse) the persisted room tokens directly via loadRoomTokens(). Defaults to a throwaway temp-dir slot per call -- pass an explicit slot when a test needs the same identity to survive across more than one wireTestTransport call (e.g. simulating a restart). pendingConnectionTimeoutMs overrides WireMeshTransport's own default 5-minute connect_request expiry -- a test proving that expiry behaviour needs it far shorter than any real approval window. presenceReadvertiseIntervalMs likewise overrides the default 20s presence re-advertisement cadence -- a test proving that behaviour needs it far shorter too, or a test that doesn't care about presence at all wants it long enough to never fire spuriously mid-test. Wires getSelfAgentAdvert (`() => store.selfAgentAdvert`) the same way createBridgeMesh does -- a test relying on gossip carrying the registered agent/self extension (e.g. remote-directory-merge coverage, agent-comms#155) needs this wired exactly like production does. */
|
|
5
|
-
export declare function wireTestTransport(store: MeshStore, slot?: Readonly<IdentitySlot>, pendingConnectionTimeoutMs?: number, presenceReadvertiseIntervalMs?: number): Promise<IdentitySlot>;
|
|
6
|
+
export declare function wireTestTransport(store: MeshStore, slot?: Readonly<IdentitySlot>, pendingConnectionTimeoutMs?: number, presenceReadvertiseIntervalMs?: number, userIdentityOptions?: Readonly<UserIdentityOptions>): Promise<IdentitySlot>;
|
|
6
7
|
/**
|
|
7
8
|
* Polls condition() until it returns true or timeoutMs elapses, rather than a fixed sleep() before a single check. A real TLS handshake plus the peer_list -\> connectToPeer -\> state_sync -\> handlePeerConnected round trip genuinely takes variable, load-dependent wall-clock time -- comfortably inside a fixed sleep on a fast local machine, not reliably so under a throttled CI runner. Throws with a descriptive message on timeout rather than letting the caller's own assertion fail with a less specific one.
|
|
8
9
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test-transport.d.ts","sourceRoot":"","sources":["../../src/test/test-transport.ts"],"names":[],"mappings":"AAAA,icAAic;AAWjc,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"test-transport.d.ts","sourceRoot":"","sources":["../../src/test/test-transport.ts"],"names":[],"mappings":"AAAA,icAAic;AAWjc,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,klCAAklC;AACllC,wBAAsB,iBAAiB,CACrC,KAAK,EAAE,SAAS,EAChB,IAAI,CAAC,EAAE,QAAQ,CAAC,YAAY,CAAC,EAC7B,0BAA0B,CAAC,EAAE,MAAM,EACnC,6BAA6B,CAAC,EAAE,MAAM,EACtC,mBAAmB,CAAC,EAAE,QAAQ,CAAC,mBAAmB,CAAC,GAClD,OAAO,CAAC,YAAY,CAAC,CA+CvB;AAMD;;GAEG;AACH,wBAAsB,OAAO,CAC3B,SAAS,EAAE,MAAM,OAAO,EACxB,WAAW,EAAE,MAAM,EACnB,SAAS,SAA8B,GACtC,OAAO,CAAC,IAAI,CAAC,CAYf"}
|
|
@@ -14,18 +14,18 @@ import { nanoid } from "../core/nanoid.js";
|
|
|
14
14
|
/** Short enough to keep generated test identity slots readable, long enough that two concurrent test runs won't collide on the same throwaway cwd. */
|
|
15
15
|
const TEST_IDENTITY_CWD_ID_LENGTH = 8;
|
|
16
16
|
/** Wires store onto a fresh WireMeshTransport and a persisted identity slot, returning the slot so a test can inspect (or reuse) the persisted room tokens directly via loadRoomTokens(). Defaults to a throwaway temp-dir slot per call -- pass an explicit slot when a test needs the same identity to survive across more than one wireTestTransport call (e.g. simulating a restart). pendingConnectionTimeoutMs overrides WireMeshTransport's own default 5-minute connect_request expiry -- a test proving that expiry behaviour needs it far shorter than any real approval window. presenceReadvertiseIntervalMs likewise overrides the default 20s presence re-advertisement cadence -- a test proving that behaviour needs it far shorter too, or a test that doesn't care about presence at all wants it long enough to never fire spuriously mid-test. Wires getSelfAgentAdvert (`() => store.selfAgentAdvert`) the same way createBridgeMesh does -- a test relying on gossip carrying the registered agent/self extension (e.g. remote-directory-merge coverage, agent-comms#155) needs this wired exactly like production does. */
|
|
17
|
-
export async function wireTestTransport(store, slot, pendingConnectionTimeoutMs, presenceReadvertiseIntervalMs) {
|
|
17
|
+
export async function wireTestTransport(store, slot, pendingConnectionTimeoutMs, presenceReadvertiseIntervalMs, userIdentityOptions) {
|
|
18
18
|
const resolvedSlot = slot ?? {
|
|
19
19
|
harness: "test",
|
|
20
20
|
cwd: nanoid(TEST_IDENTITY_CWD_ID_LENGTH),
|
|
21
21
|
dir: fs.mkdtempSync(path.join(tmpdir(), "agent-comms-test-identity-")),
|
|
22
22
|
};
|
|
23
23
|
const identity = loadOrCreateIdentity(resolvedSlot);
|
|
24
|
-
// A fresh throwaway directory per call, matching resolvedSlot's own default: each test MeshStore represents a separate device belonging to a separate person, so it needs its own user-principal identity, never the real machine-wide ~/.agent-comms/user-identity.json a production bridge shares.
|
|
25
|
-
const
|
|
24
|
+
// A fresh throwaway directory per call, matching resolvedSlot's own default: each test MeshStore represents a separate device belonging to a separate person, so it needs its own user-principal identity, never the real machine-wide ~/.agent-comms/user-identity.json a production bridge shares. A caller that needs to know this store's own principal device-id ahead of time (agent-comms#187's own principal-keyed admission tests) passes an explicit userIdentityOptions naming a directory it already loaded itself, rather than this store minting one it can never be told about afterwards.
|
|
25
|
+
const resolvedUserIdentityOptions = userIdentityOptions ?? {
|
|
26
26
|
dir: fs.mkdtempSync(path.join(tmpdir(), "agent-comms-test-user-identity-")),
|
|
27
27
|
};
|
|
28
|
-
const userIdentity = loadOrCreateUserIdentity(
|
|
28
|
+
const userIdentity = loadOrCreateUserIdentity(resolvedUserIdentityOptions);
|
|
29
29
|
// Every real bridge sets peerId to deviceIdToHex(identity.deviceId) before wiring the transport (createBridgeMesh) -- WireMeshTransport's own session bookkeeping is keyed by device-id, so a peer's advertised ID and the identity the other side actually authenticates the connection against must be the same value, or introduction/state-sync never recognises the peer as itself.
|
|
30
30
|
store.peerId = deviceIdToHex(Uint8Array.from(identity.deviceId));
|
|
31
31
|
// One shared dataStorage instance for both the transport's own data-domain frame responder and the store's own durable-send mint path (P5, agent-comms#50) -- memory-backed, matching every other throwaway test identity here, rather than a real createNodeFsStorage a test would need to clean up afterwards.
|
|
@@ -38,7 +38,7 @@ export async function wireTestTransport(store, slot, pendingConnectionTimeoutMs,
|
|
|
38
38
|
revocation: createRevocationView(),
|
|
39
39
|
dataStorage,
|
|
40
40
|
userIdentity: await toIdentityPort(userIdentity),
|
|
41
|
-
userIdentityOptions,
|
|
41
|
+
userIdentityOptions: resolvedUserIdentityOptions,
|
|
42
42
|
});
|
|
43
43
|
// Surface transport-level errors instead of leaving them silent — a genuine socket failure during a test run is signal worth seeing even when the test's own assertions still pass, since it can point at a real race the assertions don't happen to catch.
|
|
44
44
|
store.onError = (e) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test-transport.js","sourceRoot":"","sources":["../../src/test/test-transport.ts"],"names":[],"mappings":"AAAA,icAAic;AAEjc,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACnE,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAChE,OAAO,EAAE,iBAAiB,EAAE,MAAM,sCAAsC,CAAC;AACzE,OAAO,EAAE,oBAAoB,EAAE,MAAM,uCAAuC,CAAC;AAC7E,OAAO,EAAE,mBAAmB,EAAE,MAAM,wCAAwC,CAAC;AAC7E,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAEjE,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"test-transport.js","sourceRoot":"","sources":["../../src/test/test-transport.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "agent-comms",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.16.0",
|
|
4
4
|
"description": "Cross-harness communication mesh for LLM agents — rooms, DMs, presence, and real-time push delivery over TCP",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"packageManager": "pnpm@12.4.1+sha512.2e81e399d73fe8390dab25e06aa788ab7a5908248d2f5a370f82b481147a6a7a367bf8048f9a6fdb6460f21a66f0542dedb8b94ca2c8723596741920b1656d4c",
|
|
@@ -101,6 +101,7 @@
|
|
|
101
101
|
"@modelcontextprotocol/sdk": "1.30.0",
|
|
102
102
|
"cbor2": "2.3.0",
|
|
103
103
|
"cc-peer": "1.4.1",
|
|
104
|
+
"openpgp": "6.3.1",
|
|
104
105
|
"preact": "10.29.7",
|
|
105
106
|
"typebox": "1.3.6",
|
|
106
107
|
"wire-mesh-core": "1.48.2",
|