mirror of
https://github.com/logos-messaging/js-waku.git
synced 2026-01-08 16:53:10 +00:00
* fix comment of default number of peers * export default number of peers from base protocol sdk * rename to light_push, move class to separate file * move waitForRemotePeer to sdk package * add todo to move waitForGossipSubPeerInMesh into @waku/relay * clean up waitForRemotePeer, split metadata await from event and optimise, decouple from protocol implementations * simplify and rename ILightPush interface * use only connected peers in light push based on connections instead of peer renewal mechanism * improve readability of result processing in light push * fix check & update tests * address tests, add new test cases, fix racing condition in StreamManager * use libp2p.getPeers
87 lines
2.5 KiB
TypeScript
87 lines
2.5 KiB
TypeScript
import { createDecoder, createEncoder } from "@waku/core";
|
|
import {
|
|
NetworkConfig,
|
|
Protocols,
|
|
RelayNode,
|
|
ShardInfo
|
|
} from "@waku/interfaces";
|
|
import { createRelayNode } from "@waku/relay";
|
|
import { waitForRemotePeer } from "@waku/sdk";
|
|
import { contentTopicToPubsubTopic, Logger } from "@waku/utils";
|
|
import { Context } from "mocha";
|
|
|
|
import {
|
|
NOISE_KEY_1,
|
|
NOISE_KEY_2,
|
|
runNodes,
|
|
ServiceNode
|
|
} from "../../src/index.js";
|
|
|
|
export const messageText = "Relay works!";
|
|
export const TestContentTopic = "/test/1/waku-relay/utf8";
|
|
export const TestShardInfo: ShardInfo = {
|
|
clusterId: 2,
|
|
shards: [4]
|
|
};
|
|
export const TestPubsubTopic = contentTopicToPubsubTopic(
|
|
TestContentTopic,
|
|
TestShardInfo.clusterId
|
|
);
|
|
export const TestEncoder = createEncoder({
|
|
contentTopic: TestContentTopic,
|
|
pubsubTopic: TestPubsubTopic
|
|
});
|
|
export const TestDecoder = createDecoder(TestContentTopic, TestPubsubTopic);
|
|
export const TestWaitMessageOptions = { pubsubTopic: TestPubsubTopic };
|
|
export const TestExpectOptions = {
|
|
expectedContentTopic: TestContentTopic,
|
|
expectedPubsubTopic: TestPubsubTopic
|
|
};
|
|
export const log = new Logger("test:relay");
|
|
|
|
const RELAY_PROTOCOLS = [Protocols.Relay];
|
|
|
|
export async function waitForAllRemotePeers(
|
|
...nodes: RelayNode[]
|
|
): Promise<void> {
|
|
log.info("Wait for mutual pubsub subscription");
|
|
await Promise.all(
|
|
nodes.map((node): Promise<void> => waitForRemotePeer(node, RELAY_PROTOCOLS))
|
|
);
|
|
}
|
|
|
|
export const runRelayNodes = (
|
|
context: Context,
|
|
networkConfig: NetworkConfig
|
|
): Promise<[ServiceNode, RelayNode]> =>
|
|
runNodes<RelayNode>({
|
|
networkConfig,
|
|
context,
|
|
protocols: RELAY_PROTOCOLS,
|
|
createNode: createRelayNode
|
|
});
|
|
|
|
export async function runJSNodes(): Promise<[RelayNode, RelayNode]> {
|
|
log.info("Starting JS Waku instances");
|
|
const [waku1, waku2] = await Promise.all([
|
|
createRelayNode({
|
|
staticNoiseKey: NOISE_KEY_1,
|
|
networkConfig: TestShardInfo
|
|
}).then((waku) => waku.start().then(() => waku)),
|
|
createRelayNode({
|
|
staticNoiseKey: NOISE_KEY_2,
|
|
networkConfig: TestShardInfo,
|
|
libp2p: { addresses: { listen: ["/ip4/0.0.0.0/tcp/0/ws"] } }
|
|
}).then((waku) => waku.start().then(() => waku))
|
|
]);
|
|
log.info("Instances started, adding waku2 to waku1's address book");
|
|
await waku1.libp2p.peerStore.merge(waku2.libp2p.peerId, {
|
|
multiaddrs: waku2.libp2p.getMultiaddrs()
|
|
});
|
|
await waku1.dial(waku2.libp2p.peerId);
|
|
log.info("before each hook done");
|
|
await waitForAllRemotePeers(waku1, waku2);
|
|
|
|
return [waku1, waku2];
|
|
}
|