add: support for user agent to identify libp2p

This commit is contained in:
danisharora099 2022-11-10 22:44:53 +05:30
parent 589d2b3d8a
commit 71fe047254
No known key found for this signature in database
GPG Key ID: FBD2BF500037F135
2 changed files with 28 additions and 5 deletions

View File

@ -19,6 +19,7 @@ import { StoreCodec, WakuStore } from "./waku_store";
export const DefaultPingKeepAliveValueSecs = 0; export const DefaultPingKeepAliveValueSecs = 0;
export const DefaultRelayKeepAliveValueSecs = 5 * 60; export const DefaultRelayKeepAliveValueSecs = 5 * 60;
export const DefaultUserAgent = "waku-js";
const log = debug("waku:waku"); const log = debug("waku:waku");
@ -37,6 +38,11 @@ export interface WakuOptions {
* @default {@link DefaultRelayKeepAliveValueSecs} * @default {@link DefaultRelayKeepAliveValueSecs}
*/ */
relayKeepAlive?: number; relayKeepAlive?: number;
/**
* Set the user agent string to be used in identification of the node.
* @default {@link DefaultUserAgent}
*/
userAgent?: string;
} }
export class WakuNode implements Waku { export class WakuNode implements Waku {

View File

@ -14,6 +14,7 @@ import {
} from "@waku/core"; } from "@waku/core";
import { PeerDiscoveryStaticPeers } from "@waku/core/lib/peer_discovery_static_list"; import { PeerDiscoveryStaticPeers } from "@waku/core/lib/peer_discovery_static_list";
import { getPredefinedBootstrapNodes } from "@waku/core/lib/predefined_bootstrap_nodes"; import { getPredefinedBootstrapNodes } from "@waku/core/lib/predefined_bootstrap_nodes";
import { DefaultUserAgent } from "@waku/core/lib/waku";
import type { WakuFull, WakuLight, WakuPrivacy } from "@waku/interfaces"; import type { WakuFull, WakuLight, WakuPrivacy } from "@waku/interfaces";
import type { Libp2p } from "libp2p"; import type { Libp2p } from "libp2p";
import { createLibp2p, Libp2pOptions } from "libp2p"; import { createLibp2p, Libp2pOptions } from "libp2p";
@ -71,7 +72,11 @@ export async function createLightNode(
Object.assign(libp2pOptions, { peerDiscovery }); Object.assign(libp2pOptions, { peerDiscovery });
} }
const libp2p = await defaultLibp2p(undefined, libp2pOptions); const libp2p = await defaultLibp2p(
undefined,
libp2pOptions,
options?.userAgent
);
const wakuStore = new WakuStore(libp2p, options); const wakuStore = new WakuStore(libp2p, options);
const wakuLightPush = new WakuLightPush(libp2p, options); const wakuLightPush = new WakuLightPush(libp2p, options);
@ -100,7 +105,11 @@ export async function createPrivacyNode(
Object.assign(libp2pOptions, { peerDiscovery }); Object.assign(libp2pOptions, { peerDiscovery });
} }
const libp2p = await defaultLibp2p(new WakuRelay(options), libp2pOptions); const libp2p = await defaultLibp2p(
new WakuRelay(options),
libp2pOptions,
options?.userAgent
);
return new WakuNode(options ?? {}, libp2p) as WakuPrivacy; return new WakuNode(options ?? {}, libp2p) as WakuPrivacy;
} }
@ -128,7 +137,11 @@ export async function createFullNode(
Object.assign(libp2pOptions, { peerDiscovery }); Object.assign(libp2pOptions, { peerDiscovery });
} }
const libp2p = await defaultLibp2p(new WakuRelay(options), libp2pOptions); const libp2p = await defaultLibp2p(
new WakuRelay(options),
libp2pOptions,
options?.userAgent
);
const wakuStore = new WakuStore(libp2p, options); const wakuStore = new WakuStore(libp2p, options);
const wakuLightPush = new WakuLightPush(libp2p, options); const wakuLightPush = new WakuLightPush(libp2p, options);
@ -149,14 +162,18 @@ export function defaultPeerDiscovery(): PeerDiscovery {
export async function defaultLibp2p( export async function defaultLibp2p(
wakuRelay?: WakuRelay, wakuRelay?: WakuRelay,
options?: Partial<Libp2pOptions> options?: Partial<Libp2pOptions>,
userAgent?: string
): Promise<Libp2p> { ): Promise<Libp2p> {
const libp2pOpts = Object.assign( const libp2pOpts = Object.assign(
{ {
transports: [new WebSockets({ filter: filterAll })], transports: [new WebSockets({ filter: filterAll })],
streamMuxers: [new Mplex()], streamMuxers: [new Mplex()],
connectionEncryption: [new Noise()], connectionEncryption: [new Noise()],
}, identify: {
host: userAgent || DefaultUserAgent,
},
} as Libp2pOptions,
wakuRelay ? { pubsub: wakuRelay } : {}, wakuRelay ? { pubsub: wakuRelay } : {},
options ?? {} options ?? {}
); );