2025-01-31 00:16:00 +01:00
|
|
|
import type { CreateNodeOptions, RelayNode } from "@waku/interfaces";
|
2025-07-11 12:55:02 +10:00
|
|
|
import { DefaultNetworkConfig } from "@waku/interfaces";
|
2025-01-31 00:16:00 +01:00
|
|
|
import { createLibp2pAndUpdateOptions, WakuNode } from "@waku/sdk";
|
2025-07-11 12:55:02 +10:00
|
|
|
import { derivePubsubTopicsFromNetworkConfig } from "@waku/utils";
|
2024-08-31 15:18:51 +02:00
|
|
|
|
2025-02-25 18:41:32 +01:00
|
|
|
import { Relay, RelayCreateOptions, wakuGossipSub } from "./relay.js";
|
2024-08-31 15:18:51 +02:00
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Create a Waku node that uses Waku Relay to send and receive messages,
|
|
|
|
|
* enabling some privacy preserving properties.
|
|
|
|
|
* * @remarks
|
|
|
|
|
* This function creates a Relay Node using the Waku Relay protocol.
|
|
|
|
|
* While it is technically possible to use this function in a browser environment,
|
|
|
|
|
* it is not recommended due to potential performance issues and limited browser capabilities.
|
|
|
|
|
* If you are developing a browser-based application, consider alternative approaches like creating a Light Node
|
|
|
|
|
* or use this function with caution.
|
|
|
|
|
*/
|
|
|
|
|
export async function createRelayNode(
|
2025-01-31 00:16:00 +01:00
|
|
|
options: CreateNodeOptions & Partial<RelayCreateOptions>
|
2024-08-31 15:18:51 +02:00
|
|
|
): Promise<RelayNode> {
|
|
|
|
|
options = {
|
|
|
|
|
...options,
|
|
|
|
|
libp2p: {
|
|
|
|
|
...options.libp2p,
|
|
|
|
|
services: {
|
|
|
|
|
pubsub: wakuGossipSub(options)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
2025-07-11 12:55:02 +10:00
|
|
|
const libp2p = await createLibp2pAndUpdateOptions(options);
|
|
|
|
|
const pubsubTopics = derivePubsubTopicsFromNetworkConfig(
|
|
|
|
|
options.networkConfig ?? DefaultNetworkConfig
|
|
|
|
|
);
|
2025-02-25 18:41:32 +01:00
|
|
|
const relay = new Relay({
|
2025-07-11 12:55:02 +10:00
|
|
|
pubsubTopics,
|
2025-02-25 18:41:32 +01:00
|
|
|
libp2p
|
|
|
|
|
});
|
2024-08-31 15:18:51 +02:00
|
|
|
|
feat!: re-architect connection manager (#2445)
* remove public pubsub field and redundant util
* add hangUp and improve dial operations, improve keepAliveManager and remove unused method, move utils and add tests
* improve public dial method to start keep alive checks
* move dial method
* implement discovery dialer
* implement discovery dialer with queue with tests
* add discovery dialer e2e tests, change local discovery log tag, update other tests
* remove comment
* add issue link, remove only
* implement shard reader component
* create evetns module, remove unused connection manager events and related tests
* implement network indicator
* implement connection limiter, change public API of connection manager, implement recovery strategy
* decouple keep alive maanger
* add connection manager js-doc
* refactor keep alive manager, cover with tests
* add tests for connection manager main facade
* add tests for connection limiter
* add e2e tests for connection manager modules
pass js-waku config during test node init
remove dns discovery for js-waku
* restructure dialing tests
* address last e2e tests
* address review
* add logging for main methods
* decouple pure dialer class, update network monitor with specific metrics
* remove console.log
* remove usage of protocols
* update sdk package tests
* add connect await promise
* add debug for e2e tests
* enable only packages tests
* use only one file
* revert debugging
* up interface for netwrok manager
* add logs
* add more logs
* add more logs
* add another logs
* remove .only
* remove log statements
* skip the test with follow up
2025-07-09 21:23:14 +02:00
|
|
|
const node = new WakuNode(
|
2025-01-31 00:16:00 +01:00
|
|
|
options as CreateNodeOptions,
|
2024-08-31 15:18:51 +02:00
|
|
|
libp2p,
|
|
|
|
|
{},
|
|
|
|
|
relay
|
|
|
|
|
) as RelayNode;
|
feat!: re-architect connection manager (#2445)
* remove public pubsub field and redundant util
* add hangUp and improve dial operations, improve keepAliveManager and remove unused method, move utils and add tests
* improve public dial method to start keep alive checks
* move dial method
* implement discovery dialer
* implement discovery dialer with queue with tests
* add discovery dialer e2e tests, change local discovery log tag, update other tests
* remove comment
* add issue link, remove only
* implement shard reader component
* create evetns module, remove unused connection manager events and related tests
* implement network indicator
* implement connection limiter, change public API of connection manager, implement recovery strategy
* decouple keep alive maanger
* add connection manager js-doc
* refactor keep alive manager, cover with tests
* add tests for connection manager main facade
* add tests for connection limiter
* add e2e tests for connection manager modules
pass js-waku config during test node init
remove dns discovery for js-waku
* restructure dialing tests
* address last e2e tests
* address review
* add logging for main methods
* decouple pure dialer class, update network monitor with specific metrics
* remove console.log
* remove usage of protocols
* update sdk package tests
* add connect await promise
* add debug for e2e tests
* enable only packages tests
* use only one file
* revert debugging
* up interface for netwrok manager
* add logs
* add more logs
* add more logs
* add another logs
* remove .only
* remove log statements
* skip the test with follow up
2025-07-09 21:23:14 +02:00
|
|
|
|
|
|
|
|
// only if `false` is passed explicitly
|
|
|
|
|
if (options?.autoStart !== false) {
|
|
|
|
|
await node.start();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return node;
|
2024-08-31 15:18:51 +02:00
|
|
|
}
|