cojson 0.9.18 → 0.9.23

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.
@@ -17,6 +17,12 @@ import { expectGroup } from "../typeUtils/expectGroup.js";
17
17
 
18
18
  const Crypto = await WasmCrypto.create();
19
19
 
20
+ const syncServer: {
21
+ current: undefined | LocalNode;
22
+ } = {
23
+ current: undefined,
24
+ };
25
+
20
26
  export function randomAnonymousAccountAndSessionID(): [
21
27
  ControlledAgent,
22
28
  SessionID,
@@ -33,25 +39,6 @@ export function createTestNode() {
33
39
  return new LocalNode(admin, session, Crypto);
34
40
  }
35
41
 
36
- export function connectTwoPeers(
37
- a: LocalNode,
38
- b: LocalNode,
39
- aRole: "client" | "server",
40
- bRole: "client" | "server",
41
- ) {
42
- const [aAsPeer, bAsPeer] = connectedPeers(
43
- "peer:" + a.account.id,
44
- "peer:" + b.account.id,
45
- {
46
- peer1role: aRole,
47
- peer2role: bRole,
48
- },
49
- );
50
-
51
- a.syncManager.addPeer(bAsPeer);
52
- b.syncManager.addPeer(aAsPeer);
53
- }
54
-
55
42
  export async function createTwoConnectedNodes(
56
43
  node1Role: Peer["role"],
57
44
  node2Role: Peer["role"],
@@ -149,6 +136,25 @@ export async function createThreeConnectedNodes(
149
136
  };
150
137
  }
151
138
 
139
+ export function connectTwoPeers(
140
+ a: LocalNode,
141
+ b: LocalNode,
142
+ aRole: "client" | "server",
143
+ bRole: "client" | "server",
144
+ ) {
145
+ const [aAsPeer, bAsPeer] = connectedPeers(
146
+ "peer:" + a.account.id,
147
+ "peer:" + b.account.id,
148
+ {
149
+ peer1role: aRole,
150
+ peer2role: bRole,
151
+ },
152
+ );
153
+
154
+ a.syncManager.addPeer(bAsPeer);
155
+ b.syncManager.addPeer(aAsPeer);
156
+ }
157
+
152
158
  export function newGroup() {
153
159
  const [admin, sessionID] = randomAnonymousAccountAndSessionID();
154
160
 
@@ -368,3 +374,90 @@ export function createTestMetricReader() {
368
374
  export function tearDownTestMetricReader() {
369
375
  metrics.disable();
370
376
  }
377
+
378
+ export function setupSyncServer() {
379
+ syncServer.current = createTestNode();
380
+ return syncServer.current;
381
+ }
382
+
383
+ export async function createConnectedTestAgentNode(opts = { connected: true }) {
384
+ if (!syncServer.current) {
385
+ throw new Error("Sync server not initialized");
386
+ }
387
+
388
+ const [admin, session] = randomAnonymousAccountAndSessionID();
389
+ const node = new LocalNode(admin, session, Crypto);
390
+
391
+ const { nodeToServerPeer, serverToNodePeer, messages, addServerPeer } =
392
+ connectNodeToSyncServer(node, opts.connected);
393
+
394
+ return { node, nodeToServerPeer, serverToNodePeer, messages, addServerPeer };
395
+ }
396
+
397
+ export async function createConnectedTestNode(opts = { connected: true }) {
398
+ if (!syncServer.current) {
399
+ throw new Error("Sync server not initialized");
400
+ }
401
+
402
+ const ctx = await LocalNode.withNewlyCreatedAccount({
403
+ peersToLoadFrom: [],
404
+ crypto: Crypto,
405
+ creationProps: { name: "Client" },
406
+ });
407
+
408
+ const { nodeToServerPeer, serverToNodePeer, messages, addServerPeer } =
409
+ connectNodeToSyncServer(ctx.node, opts.connected);
410
+
411
+ return {
412
+ node: ctx.node,
413
+ accountID: ctx.accountID,
414
+ nodeToServerPeer,
415
+ serverToNodePeer,
416
+ messages,
417
+ addServerPeer,
418
+ };
419
+ }
420
+
421
+ export function connectNodeToSyncServer(node: LocalNode, connected = true) {
422
+ if (!syncServer.current) {
423
+ throw new Error("Sync server not initialized");
424
+ }
425
+
426
+ const [nodeToServerPeer, serverToNodePeer] = connectedPeers(
427
+ syncServer.current.account.id,
428
+ node.account.id,
429
+ {
430
+ peer1role: "server",
431
+ peer2role: "client",
432
+ },
433
+ );
434
+
435
+ const messages: {
436
+ from: "client" | "server";
437
+ msg: SyncMessage;
438
+ }[] = [];
439
+
440
+ const serverPush = serverToNodePeer.outgoing.push;
441
+ serverToNodePeer.outgoing.push = (msg) => {
442
+ messages.push({ from: "server", msg });
443
+ return serverPush.call(serverToNodePeer.outgoing, msg);
444
+ };
445
+
446
+ const clientPush = nodeToServerPeer.outgoing.push;
447
+ nodeToServerPeer.outgoing.push = (msg) => {
448
+ messages.push({ from: "client", msg });
449
+ return clientPush.call(nodeToServerPeer.outgoing, msg);
450
+ };
451
+
452
+ syncServer.current.syncManager.addPeer(serverToNodePeer);
453
+ if (connected) {
454
+ node.syncManager.addPeer(nodeToServerPeer);
455
+ }
456
+
457
+ return {
458
+ nodeToServerPeer,
459
+ serverToNodePeer,
460
+ messages,
461
+ addServerPeer: () => node.syncManager.addPeer(nodeToServerPeer),
462
+ };
463
+ }