Skip to content

Commit 906c933

Browse files
chore!: discourage the use of relay in browsers (#1778)
* add a comment discouraging relay * move createRelayNode under an explicit export * fix: build
1 parent b99f828 commit 906c933

12 files changed

+72
-52
lines changed

package-lock.json

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

packages/sdk/package.json

+13
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,19 @@
88
".": {
99
"types": "./dist/index.d.ts",
1010
"import": "./dist/index.js"
11+
},
12+
"./relay": {
13+
"types": "./dist/relay/index.d.ts",
14+
"import": "./dist/relay/index.js"
15+
}
16+
},
17+
"typesVersions": {
18+
"*": {
19+
"*": [
20+
"*",
21+
"dist/*",
22+
"dist/*/index"
23+
]
1124
}
1225
},
1326
"type": "module",

packages/sdk/src/create.ts

-42
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@ import type {
2222
Libp2pComponents,
2323
LightNode,
2424
ProtocolCreateOptions,
25-
RelayNode,
2625
ShardingParams
2726
} from "@waku/interfaces";
2827
import { wakuPeerExchangeDiscovery } from "@waku/peer-exchange";
@@ -136,47 +135,6 @@ export async function createLightNode(
136135
) as LightNode;
137136
}
138137

139-
/**
140-
* Create a Waku node that uses Waku Relay to send and receive messages,
141-
* enabling some privacy preserving properties.
142-
*/
143-
export async function createRelayNode(
144-
options?: ProtocolCreateOptions & WakuOptions & Partial<RelayCreateOptions>
145-
): Promise<RelayNode> {
146-
options = options ?? {};
147-
148-
if (options.shardInfo) {
149-
ensureShardingConfigured(options.shardInfo);
150-
}
151-
152-
const libp2pOptions = options?.libp2p ?? {};
153-
const peerDiscovery = libp2pOptions.peerDiscovery ?? [];
154-
if (options?.defaultBootstrap) {
155-
peerDiscovery.push(...defaultPeerDiscoveries());
156-
Object.assign(libp2pOptions, { peerDiscovery });
157-
}
158-
159-
const libp2p = await defaultLibp2p(
160-
options.shardInfo,
161-
wakuGossipSub(options),
162-
libp2pOptions,
163-
options?.userAgent
164-
);
165-
166-
const relay = wakuRelay(options);
167-
168-
return new WakuNode(
169-
options,
170-
options.pubsubTopics,
171-
libp2p,
172-
options.shardInfo,
173-
undefined,
174-
undefined,
175-
undefined,
176-
relay
177-
) as RelayNode;
178-
}
179-
180138
/**
181139
* Create a Waku node that uses all Waku protocols.
182140
*

packages/sdk/src/relay/index.ts

+48
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
import { WakuNode, WakuOptions } from "@waku/core";
2+
import type { ProtocolCreateOptions, RelayNode } from "@waku/interfaces";
3+
import { RelayCreateOptions, wakuGossipSub, wakuRelay } from "@waku/relay";
4+
5+
import { defaultLibp2p, defaultPeerDiscoveries } from "../create.js";
6+
7+
/**
8+
* Create a Waku node that uses Waku Relay to send and receive messages,
9+
* enabling some privacy preserving properties.
10+
* * @remarks
11+
* This function creates a Relay Node using the Waku Relay protocol.
12+
* While it is technically possible to use this function in a browser environment,
13+
* it is not recommended due to potential performance issues and limited browser capabilities.
14+
* If you are developing a browser-based application, consider alternative approaches like creating a Light Node
15+
* or use this function with caution.
16+
*/
17+
export async function createRelayNode(
18+
options?: ProtocolCreateOptions & WakuOptions & Partial<RelayCreateOptions>
19+
): Promise<RelayNode> {
20+
options = options ?? {};
21+
22+
const libp2pOptions = options?.libp2p ?? {};
23+
const peerDiscovery = libp2pOptions.peerDiscovery ?? [];
24+
if (options?.defaultBootstrap) {
25+
peerDiscovery.push(...defaultPeerDiscoveries());
26+
Object.assign(libp2pOptions, { peerDiscovery });
27+
}
28+
29+
const libp2p = await defaultLibp2p(
30+
options.shardInfo,
31+
wakuGossipSub(options),
32+
libp2pOptions,
33+
options?.userAgent
34+
);
35+
36+
const relay = wakuRelay(options);
37+
38+
return new WakuNode(
39+
options,
40+
options.pubsubTopics,
41+
libp2p,
42+
options.shardInfo,
43+
undefined,
44+
undefined,
45+
undefined,
46+
relay
47+
) as RelayNode;
48+
}

packages/tests/tests/enr.node.spec.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { waitForRemotePeer } from "@waku/core";
22
import { EnrDecoder } from "@waku/enr";
33
import type { RelayNode } from "@waku/interfaces";
44
import { Protocols } from "@waku/interfaces";
5-
import { createRelayNode } from "@waku/sdk";
5+
import { createRelayNode } from "@waku/sdk/relay";
66
import { expect } from "chai";
77

88
import { makeLogFileName, NOISE_KEY_1, tearDownNodes } from "../src/index.js";

packages/tests/tests/relay/index.node.spec.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ import {
1313
createDecoder as createSymDecoder,
1414
createEncoder as createSymEncoder
1515
} from "@waku/message-encryption/symmetric";
16-
import { createRelayNode } from "@waku/sdk";
16+
import { createRelayNode } from "@waku/sdk/relay";
1717
import { bytesToUtf8, utf8ToBytes } from "@waku/utils/bytes";
1818
import { expect } from "chai";
1919

packages/tests/tests/relay/interop.node.spec.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import type { PeerId } from "@libp2p/interface/peer-id";
22
import { DecodedMessage, waitForRemotePeer } from "@waku/core";
33
import { DefaultPubsubTopic, Protocols, RelayNode } from "@waku/interfaces";
4-
import { createRelayNode } from "@waku/sdk";
4+
import { createRelayNode } from "@waku/sdk/relay";
55
import { bytesToUtf8, utf8ToBytes } from "@waku/utils/bytes";
66
import { expect } from "chai";
77

packages/tests/tests/relay/multiple_pubsub.node.spec.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import {
1111
SingleShardInfo
1212
} from "@waku/interfaces";
1313
import { Protocols } from "@waku/interfaces";
14-
import { createRelayNode } from "@waku/sdk";
14+
import { createRelayNode } from "@waku/sdk/relay";
1515
import {
1616
contentTopicToPubsubTopic,
1717
singleShardInfoToPubsubTopic

packages/tests/tests/relay/publish.node.spec.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { createEncoder } from "@waku/core";
22
import { IRateLimitProof, RelayNode, SendError } from "@waku/interfaces";
3-
import { createRelayNode } from "@waku/sdk";
3+
import { createRelayNode } from "@waku/sdk/relay";
44
import { utf8ToBytes } from "@waku/utils/bytes";
55
import { expect } from "chai";
66

packages/tests/tests/relay/subscribe.node.spec.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { createDecoder, createEncoder } from "@waku/core";
22
import { DefaultPubsubTopic, RelayNode } from "@waku/interfaces";
3-
import { createRelayNode } from "@waku/sdk";
3+
import { createRelayNode } from "@waku/sdk/relay";
44
import { utf8ToBytes } from "@waku/utils/bytes";
55
import { expect } from "chai";
66

packages/tests/tests/wait_for_remote_peer.node.spec.ts

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
import { waitForRemotePeer } from "@waku/core";
22
import type { LightNode, RelayNode } from "@waku/interfaces";
33
import { DefaultPubsubTopic, Protocols } from "@waku/interfaces";
4-
import { createLightNode, createRelayNode } from "@waku/sdk";
4+
import { createLightNode } from "@waku/sdk";
5+
import { createRelayNode } from "@waku/sdk/relay";
56
import { expect } from "chai";
67

78
import {

packages/tests/tests/waku.node.spec.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,9 @@ import {
1414
} from "@waku/message-encryption/symmetric";
1515
import {
1616
createLightNode,
17-
createEncoder as createPlainEncoder,
18-
createRelayNode
17+
createEncoder as createPlainEncoder
1918
} from "@waku/sdk";
19+
import { createRelayNode } from "@waku/sdk/relay";
2020
import { bytesToUtf8, utf8ToBytes } from "@waku/utils/bytes";
2121
import { expect } from "chai";
2222

0 commit comments

Comments
 (0)