libp2p-mesh 2026.6.26 → 2026.6.28

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.
@@ -1,4 +1,4 @@
1
- import { addInboundTarget, applyPluginConfig, buildNetworkConfig, disableInboundDelivery, getLibp2pMeshConfig, listConfiguredChannels, mergeNetworkConfig, planInboundTargetSync, migrateLegacyInboundConfig, setInboundTargets, } from "./setup-config.js";
1
+ import { addInboundTarget, applyPluginConfig, buildNetworkEntryConfig, buildPublicRelayNodeConfig, disableInboundDelivery, getLibp2pMeshConfig, listConfiguredChannels, planInboundTargetSync, migrateLegacyInboundConfig, setInboundTargets, } from "./setup-config.js";
2
2
  const MANUAL_CHANNEL_VALUE = "__manual__";
3
3
  const CANCELLED_MESSAGE = "Configuration cancelled. No changes were written.";
4
4
  const APPLIED_MESSAGE = "Config updated.\n\nRestart the gateway to apply changes:\nopenclaw gateway restart";
@@ -49,13 +49,13 @@ async function runFirstConfigFlow(options) {
49
49
  if (!shouldContinue) {
50
50
  return undefined;
51
51
  }
52
- const mode = await selectSetupMode(options.prompter);
53
- let pluginConfig = await buildNetworkConfigFromPrompts(mode, options.prompter);
54
- const inboundChoice = await options.prompter.select("Configure inbound delivery targets?", [
55
- { label: "Sync from configured channels", value: "sync-from-channels" },
56
- { label: "Add one or more targets", value: "add-targets" },
57
- { label: "Disable inbound delivery for now", value: "disable-inbound" },
58
- { label: "Skip for now", value: "skip-inbound" },
52
+ options.prompter.print("Network discovery is enabled automatically.\nmDNS, DHT, NAT traversal, relay transport, and hole punching are enabled by default.");
53
+ let pluginConfig = await promptForNetworkEntryConfig({}, options.prompter, { keepExistingOnEmpty: false });
54
+ const inboundChoice = await options.prompter.select("Configure where received P2P messages should appear?", [
55
+ { label: "Sync from existing channels", value: "sync-from-channels" },
56
+ { label: "Add a target manually", value: "add-targets" },
57
+ { label: "Do not receive P2P messages in local channels", value: "disable-inbound" },
58
+ { label: "Leave unchanged for now", value: "skip-inbound" },
59
59
  ]);
60
60
  switch (inboundChoice) {
61
61
  case "sync-from-channels":
@@ -74,32 +74,25 @@ async function runFirstConfigFlow(options) {
74
74
  }
75
75
  async function runExistingConfigFlow(existingConfig, options) {
76
76
  let pluginConfig = cloneMeshConfig(existingConfig) ?? {};
77
- while (true) {
78
- options.prompter.print(formatCurrentConfig(pluginConfig));
79
- const editChoice = await options.prompter.select("What do you want to edit?", [
80
- { label: "Sync inbound targets from channels", value: "sync-from-channels" },
81
- { label: "Network mode", value: "network-mode" },
82
- { label: "Inbound delivery targets", value: "inbound-targets" },
83
- { label: "Preview and apply", value: "preview-apply" },
84
- { label: "Cancel", value: "cancel" },
85
- ]);
86
- switch (editChoice) {
87
- case "sync-from-channels":
88
- pluginConfig = await syncInboundTargetsFromConfiguredChannels(pluginConfig, options);
89
- break;
90
- case "network-mode": {
91
- const mode = await selectSetupMode(options.prompter);
92
- pluginConfig = mergeNetworkConfig(pluginConfig, await buildNetworkConfigFromPrompts(mode, options.prompter));
93
- break;
94
- }
95
- case "inbound-targets":
96
- pluginConfig = await promptForExistingInboundConfig(pluginConfig, options);
97
- break;
98
- case "preview-apply":
99
- return pluginConfig;
100
- case "cancel":
101
- return undefined;
102
- }
77
+ options.prompter.print(formatCurrentConfig(pluginConfig));
78
+ const editChoice = await options.prompter.select("What do you want to edit?", [
79
+ { label: "Sync inbound targets from channels", value: "sync-from-channels" },
80
+ { label: "Network entry addresses", value: "network-entry-addresses" },
81
+ { label: "Public relay-node settings", value: "public-relay-node" },
82
+ { label: "Where received P2P messages appear", value: "inbound-targets" },
83
+ { label: "Cancel", value: "cancel" },
84
+ ]);
85
+ switch (editChoice) {
86
+ case "sync-from-channels":
87
+ return syncInboundTargetsFromConfiguredChannels(pluginConfig, options);
88
+ case "network-entry-addresses":
89
+ return promptForNetworkEntryConfig(pluginConfig, options.prompter, { keepExistingOnEmpty: true });
90
+ case "public-relay-node":
91
+ return promptForPublicRelayNodeConfig(pluginConfig, options.prompter);
92
+ case "inbound-targets":
93
+ return promptForExistingInboundConfig(pluginConfig, options);
94
+ case "cancel":
95
+ return undefined;
103
96
  }
104
97
  }
105
98
  async function promptForExistingInboundConfig(pluginConfig, options) {
@@ -133,64 +126,112 @@ async function syncInboundTargetsFromConfiguredChannels(pluginConfig, options) {
133
126
  options.prompter.print("All configured channels already have inbound targets.");
134
127
  return setInboundTargets(pluginConfig, plan.targets);
135
128
  }
129
+ options.prompter.print(formatInboundSyncPlan(plan));
136
130
  let targets = plan.targets.map((target) => ({ ...target }));
131
+ const added = [];
132
+ const skipped = [];
137
133
  for (const channel of plan.missingChannels) {
138
- const target = await options.prompter.input(`Target for ${channel}`, { required: true });
134
+ const target = (await options.prompter.input(`${targetPromptForChannel(channel)} (leave empty to skip)`, { required: false })).trim();
135
+ if (!target) {
136
+ skipped.push(channel);
137
+ continue;
138
+ }
139
139
  const addResult = addInboundTarget(targets, { channel, target });
140
140
  if (!addResult.ok) {
141
141
  options.prompter.print(addResult.error);
142
142
  continue;
143
143
  }
144
144
  targets = addResult.targets;
145
+ added.push(addResult.added);
145
146
  }
147
+ options.prompter.print(formatInboundSyncResult({ added, skipped }));
146
148
  return setInboundTargets(pluginConfig, targets);
147
149
  }
150
+ function formatInboundSyncPlan(plan) {
151
+ const alreadyConfigured = plan.targets.length > 0 ? plan.targets.map((target) => ` - ${formatInboundTargetLine(target)}`) : [" none"];
152
+ const missingChannels = plan.missingChannels.length > 0 ? plan.missingChannels.map((channel) => ` - ${channel}`) : [" none"];
153
+ return [
154
+ "Already configured:",
155
+ ...alreadyConfigured,
156
+ "",
157
+ "Channels without inbound targets:",
158
+ ...missingChannels,
159
+ "",
160
+ "Leave a target empty to skip that channel.",
161
+ ].join("\n");
162
+ }
163
+ function formatInboundSyncResult(result) {
164
+ const lines = [];
165
+ if (result.added.length > 0) {
166
+ lines.push("Added:", ...result.added.map((target) => ` - ${formatInboundTargetLine(target)}`));
167
+ }
168
+ else {
169
+ lines.push("No inbound targets were added.");
170
+ }
171
+ if (result.skipped.length > 0) {
172
+ lines.push("", "Skipped:", ...result.skipped.map((channel) => ` - ${channel}`));
173
+ }
174
+ return lines.join("\n");
175
+ }
176
+ function formatInboundTargetLine(target) {
177
+ return `${target.id ?? "(unnamed)"} ${target.channel} / ${target.target}`;
178
+ }
148
179
  function hasLegacyOnlyInboundConfig(pluginConfig) {
149
180
  return Boolean(pluginConfig.inboundChannel && pluginConfig.inboundTarget && !Array.isArray(pluginConfig.inboundTargets));
150
181
  }
151
- async function selectSetupMode(prompter) {
152
- return prompter.select("Choose setup mode:", [
153
- { label: "LAN: same WiFi / local network", value: "lan" },
154
- { label: "Cross-network: use bootstrap/relay", value: "cross-network" },
155
- { label: "Relay node: this machine has a public address", value: "relay-node" },
156
- { label: "Tools only: no inbound delivery", value: "tools-only" },
157
- ]);
158
- }
159
- async function buildNetworkConfigFromPrompts(mode, prompter) {
160
- switch (mode) {
161
- case "cross-network":
162
- return buildNetworkConfig("cross-network", {
163
- crossNetwork: {
164
- bootstrapList: await promptForAddressList(prompter, "Bootstrap multiaddr", "Add another bootstrap?"),
165
- relayList: await promptForOptionalAddressList(prompter, "Relay multiaddr", "Add another relay?"),
166
- },
167
- });
168
- case "relay-node":
169
- return buildNetworkConfig("relay-node", {
170
- relayNode: {
171
- listenAddrs: [await prompter.input("Listen address", { required: true })],
172
- announceAddrs: [await prompter.input("Public announce address", { required: true })],
173
- },
174
- });
175
- default:
176
- return buildNetworkConfig(mode);
182
+ async function promptForNetworkEntryConfig(existing, prompter, options) {
183
+ const bootstrapList = await promptForOptionalAddressList(prompter, options.keepExistingOnEmpty
184
+ ? "Bootstrap multiaddr (optional, leave empty to keep unchanged)"
185
+ : "Bootstrap multiaddr (optional, leave empty to skip)", "Add another bootstrap?");
186
+ const relayList = await promptForOptionalAddressList(prompter, options.keepExistingOnEmpty
187
+ ? "Relay multiaddr (optional, leave empty to keep unchanged)"
188
+ : "Relay multiaddr (optional, leave empty to skip)", "Add another relay?");
189
+ if (options.keepExistingOnEmpty) {
190
+ return {
191
+ ...existing,
192
+ ...(bootstrapList.length > 0 ? { bootstrapList } : {}),
193
+ ...(relayList.length > 0 ? { relayList } : {}),
194
+ };
177
195
  }
196
+ return {
197
+ ...existing,
198
+ ...buildNetworkEntryConfig({ bootstrapList, relayList }),
199
+ };
178
200
  }
179
- async function promptForAddressList(prompter, message, addAnotherMessage) {
180
- const addresses = [await prompter.input(message, { required: true })];
181
- while (await prompter.confirm(addAnotherMessage, false)) {
182
- addresses.push(await prompter.input(message, { required: true }));
183
- }
184
- return addresses;
201
+ async function promptForPublicRelayNodeConfig(existing, prompter) {
202
+ const enabled = await prompter.confirm("Enable this machine as a public relay node?", false);
203
+ const relayConfig = enabled
204
+ ? buildPublicRelayNodeConfig({
205
+ enabled: true,
206
+ listenAddrs: [
207
+ await prompter.input("Listen address", {
208
+ defaultValue: "/ip4/0.0.0.0/tcp/4001",
209
+ required: true,
210
+ }),
211
+ ],
212
+ announceAddrs: await promptForOptionalAddressList(prompter, "Public announce address (optional, leave empty to skip)", "Add another public announce address?"),
213
+ })
214
+ : buildPublicRelayNodeConfig({ enabled: false });
215
+ const { listenAddrs: _listenAddrs, announceAddrs: _announceAddrs, enableCircuitRelayServer: _enableCircuitRelayServer, ...preserved } = existing;
216
+ return {
217
+ ...preserved,
218
+ enableCircuitRelayServer: relayConfig.enableCircuitRelayServer,
219
+ ...(relayConfig.listenAddrs ? { listenAddrs: relayConfig.listenAddrs } : {}),
220
+ ...(relayConfig.announceAddrs ? { announceAddrs: relayConfig.announceAddrs } : {}),
221
+ };
185
222
  }
186
223
  async function promptForOptionalAddressList(prompter, message, addAnotherMessage) {
187
- const firstAddress = await prompter.input(message);
224
+ const firstAddress = (await prompter.input(message, { required: false })).trim();
188
225
  if (!firstAddress) {
189
226
  return [];
190
227
  }
191
228
  const addresses = [firstAddress];
192
229
  while (await prompter.confirm(addAnotherMessage, false)) {
193
- addresses.push(await prompter.input(message, { required: true }));
230
+ let nextAddress = "";
231
+ while (!nextAddress) {
232
+ nextAddress = (await prompter.input(message, { required: true })).trim();
233
+ }
234
+ addresses.push(nextAddress);
194
235
  }
195
236
  return addresses;
196
237
  }
@@ -199,12 +240,12 @@ async function promptForInboundTargets(existingTargets, options, promptOptions)
199
240
  let action = promptOptions?.promptInitialAction
200
241
  ? await options.prompter.select("What do you want to do?", [
201
242
  { label: "Add target", value: "add-target" },
202
- { label: "Back", value: "finish-targets" },
243
+ { label: "Finish editing", value: "finish-targets" },
203
244
  ])
204
245
  : "add-target";
205
246
  while (action === "add-target") {
206
247
  const channel = await promptForChannel(options);
207
- const target = await options.prompter.input("Target", { required: true });
248
+ const target = await options.prompter.input(targetPromptForChannel(channel), { required: true });
208
249
  const addResult = addInboundTarget(targets, { channel, target });
209
250
  if (addResult.ok) {
210
251
  targets = addResult.targets;
@@ -215,7 +256,7 @@ async function promptForInboundTargets(existingTargets, options, promptOptions)
215
256
  }
216
257
  action = await options.prompter.select("Add another target?", [
217
258
  { label: "Add another", value: "add-target" },
218
- { label: "Finish target setup", value: "finish-targets" },
259
+ { label: "Finish editing", value: "finish-targets" },
219
260
  ]);
220
261
  }
221
262
  return targets;
@@ -228,7 +269,7 @@ async function promptForInboundTargetEdits(existingTargets, options) {
228
269
  { label: "Edit target", value: "edit-target" },
229
270
  { label: "Remove target", value: "remove-target" },
230
271
  { label: "Disable inbound delivery", value: "disable-inbound" },
231
- { label: "Back", value: "finish-targets" },
272
+ { label: "Finish editing", value: "finish-targets" },
232
273
  ]);
233
274
  switch (action) {
234
275
  case "add-target":
@@ -249,7 +290,7 @@ async function promptForInboundTargetEdits(existingTargets, options) {
249
290
  }
250
291
  async function promptForOneInboundTarget(targets, options) {
251
292
  const channel = await promptForChannel(options);
252
- const target = await options.prompter.input("Target", { required: true });
293
+ const target = await options.prompter.input(targetPromptForChannel(channel), { required: true });
253
294
  const addResult = addInboundTarget(targets, { channel, target });
254
295
  if (addResult.ok) {
255
296
  return addResult.targets;
@@ -264,7 +305,7 @@ async function promptForInboundTargetEdit(targets, options) {
264
305
  }
265
306
  const selectedIndex = await selectInboundTargetIndex(options.prompter, "Target to edit", targets);
266
307
  const channel = await promptForChannel(options);
267
- const target = await options.prompter.input("Target", { required: true });
308
+ const target = await options.prompter.input(targetPromptForChannel(channel), { required: true });
268
309
  const duplicate = targets.some((existingTarget, index) => index !== selectedIndex && existingTarget.channel === channel && existingTarget.target === target);
269
310
  if (duplicate) {
270
311
  options.prompter.print(`inbound target already exists: ${channel} / ${target}`);
@@ -316,6 +357,9 @@ async function promptForChannel(options) {
316
357
  }
317
358
  return channel;
318
359
  }
360
+ function targetPromptForChannel(channel) {
361
+ return `Target for ${channel}`;
362
+ }
319
363
  function formatCurrentConfig(pluginConfig) {
320
364
  const targets = pluginConfig.inboundTargets ?? [];
321
365
  const targetLines = targets.length > 0
@@ -1 +1 @@
1
- {"version":3,"file":"setup-wizard.js","sourceRoot":"","sources":["../../src/setup-wizard.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"setup-wizard.js","sourceRoot":"","sources":["../../src/setup-wizard.ts"],"names":[],"mappings":"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"}
@@ -253,7 +253,9 @@ export interface MeshConfig {
253
253
  enableWebSocket?: boolean;
254
254
  peerIdPath?: string;
255
255
  instanceName?: string;
256
- /** Enable DHT for WAN peer discovery and pubkey registry (default: true when discovery=dht, false otherwise) */
256
+ /** Enable mDNS LAN peer discovery (default: true) */
257
+ enableMDNS?: boolean;
258
+ /** Enable DHT for WAN peer discovery and pubkey registry (default: true) */
257
259
  enableDHT?: boolean;
258
260
  /**
259
261
  * Master switch for the NAT traversal stack. When `false` none of the
package/index.ts CHANGED
@@ -34,11 +34,12 @@ function createLibp2pMeshConfigSchema(): OpenClawPluginConfigSchema {
34
34
  type: "string",
35
35
  enum: ["mdns", "bootstrap", "dht"],
36
36
  default: "mdns",
37
+ description: "Legacy discovery hint. Runtime now composes mDNS, DHT, and optional bootstrap entries automatically.",
37
38
  },
38
39
  bootstrapList: {
39
40
  type: "array",
40
41
  items: { type: "string" },
41
- description: "List of bootstrap multiaddrs for WAN discovery (required when discovery=dht or bootstrap)",
42
+ description: "Optional static bootstrap multiaddrs. Non-empty values add bootstrap discovery without disabling mDNS or DHT.",
42
43
  },
43
44
  meshTopic: {
44
45
  type: "string",
@@ -55,7 +56,7 @@ function createLibp2pMeshConfigSchema(): OpenClawPluginConfigSchema {
55
56
  enableDHT: {
56
57
  type: "boolean",
57
58
  default: true,
58
- description: "Enable DHT for WAN peer discovery and pubkey registry. Default true when discovery=dht, can be explicitly disabled.",
59
+ description: "Enable DHT for WAN peer discovery and pubkey registry. Default true; can be explicitly disabled.",
59
60
  },
60
61
  instanceName: {
61
62
  type: "string",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "libp2p-mesh",
3
- "version": "2026.6.26",
3
+ "version": "2026.6.28",
4
4
  "description": "OpenClaw libp2p P2P mesh network plugin for cross-instance agent communication",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
package/src/mesh.ts CHANGED
@@ -70,6 +70,18 @@ async function loadOrCreatePeerId(customPath?: string): Promise<ReturnType<typeo
70
70
  }
71
71
  }
72
72
 
73
+ export function planPeerDiscovery(config: MeshConfig): {
74
+ useMDNS: boolean;
75
+ bootstrapList: string[];
76
+ enableDHT: boolean;
77
+ } {
78
+ return {
79
+ useMDNS: config.enableMDNS !== false,
80
+ bootstrapList: config.bootstrapList ?? [],
81
+ enableDHT: config.enableDHT !== false,
82
+ };
83
+ }
84
+
73
85
  export function createMeshNetwork(options: {
74
86
  config?: MeshConfig;
75
87
  logger?: { info?: (msg: string) => void; debug?: (msg: string) => void; warn?: (msg: string) => void; error?: (msg: string) => void };
@@ -122,29 +134,21 @@ export function createMeshNetwork(options: {
122
134
  }
123
135
 
124
136
  // Peer discovery: mDNS for LAN, bootstrap for WAN entry points
137
+ const discoveryPlan = planPeerDiscovery(config);
125
138
  const peerDiscovery: any[] = [];
126
- const discoveryMechanism = config.discovery ?? "mdns";
127
139
 
128
- if (discoveryMechanism === "mdns") {
140
+ if (discoveryPlan.useMDNS) {
129
141
  peerDiscovery.push(mdns({ interval: 1000 }));
130
142
  logger?.info?.("[libp2p-mesh] Using mDNS discovery (LAN)");
131
143
  }
132
144
 
133
- if (discoveryMechanism === "bootstrap" || discoveryMechanism === "dht") {
134
- const bootstrapList = config.bootstrapList ?? [];
135
- if (bootstrapList.length > 0) {
136
- peerDiscovery.push(bootstrap({ list: bootstrapList }));
137
- logger?.info?.(`[libp2p-mesh] Using bootstrap discovery (${bootstrapList.length} node(s))`);
138
- } else if (discoveryMechanism === "bootstrap") {
139
- logger?.warn?.("[libp2p-mesh] discovery=bootstrap but bootstrapList is empty; falling back to mDNS");
140
- peerDiscovery.push(mdns({ interval: 1000 }));
141
- } else {
142
- logger?.warn?.("[libp2p-mesh] discovery=dht but bootstrapList is empty; DHT may not find peers");
143
- }
145
+ if (discoveryPlan.bootstrapList.length > 0) {
146
+ peerDiscovery.push(bootstrap({ list: discoveryPlan.bootstrapList }));
147
+ logger?.info?.(`[libp2p-mesh] Using bootstrap discovery (${discoveryPlan.bootstrapList.length} node(s))`);
144
148
  }
145
149
 
146
150
  // Configure DHT for both WAN peer discovery and pubkey registry
147
- const enableDHT = discoveryMechanism === "dht" || config.enableDHT !== false;
151
+ const enableDHT = discoveryPlan.enableDHT;
148
152
  const services: Record<string, any> = {};
149
153
  if (enableDHT) {
150
154
  services.dht = kadDHT({
@@ -3,7 +3,7 @@ import type { AnnounceLogDetail, InboundTargetConfig, MeshConfig } from "./types
3
3
  export const LIBP2P_MESH_PLUGIN_ID = "libp2p-mesh";
4
4
  export const DEFAULT_DELIVERY_ACK_TIMEOUT_MS = 15000;
5
5
 
6
- export type SetupMode = "lan" | "cross-network" | "relay-node" | "tools-only";
6
+ export type SetupMode = "lan" | "cross-network" | "relay-node";
7
7
 
8
8
  export type OpenClawConfigLike = {
9
9
  plugins?: {
@@ -28,6 +28,15 @@ export type RelayNodeOptions = {
28
28
  announceAddrs: string[];
29
29
  };
30
30
 
31
+ export type NetworkEntryOptions = {
32
+ bootstrapList: string[];
33
+ relayList: string[];
34
+ };
35
+
36
+ export type PublicRelayNodeOptions =
37
+ | { enabled: false }
38
+ | { enabled: true; listenAddrs: string[]; announceAddrs: string[] };
39
+
31
40
  export type AddInboundTargetResult =
32
41
  | { ok: true; targets: InboundTargetConfig[]; added: InboundTargetConfig }
33
42
  | { ok: false; targets: InboundTargetConfig[]; error: string };
@@ -65,13 +74,6 @@ export function buildNetworkConfig(
65
74
  deliveryAckTimeoutMs: DEFAULT_DELIVERY_ACK_TIMEOUT_MS,
66
75
  };
67
76
 
68
- case "tools-only":
69
- return {
70
- discovery: "mdns",
71
- inboundTargets: [],
72
- deliveryAckTimeoutMs: DEFAULT_DELIVERY_ACK_TIMEOUT_MS,
73
- };
74
-
75
77
  case "cross-network": {
76
78
  const relayList = options?.crossNetwork?.relayList;
77
79
  return {
@@ -95,6 +97,30 @@ export function buildNetworkConfig(
95
97
  }
96
98
  }
97
99
 
100
+ export function buildNetworkEntryConfig(options: NetworkEntryOptions): MeshConfig {
101
+ return {
102
+ ...(options.bootstrapList.length > 0 ? { bootstrapList: [...options.bootstrapList] } : {}),
103
+ ...(options.relayList.length > 0 ? { relayList: [...options.relayList] } : {}),
104
+ deliveryAckTimeoutMs: DEFAULT_DELIVERY_ACK_TIMEOUT_MS,
105
+ };
106
+ }
107
+
108
+ export function buildPublicRelayNodeConfig(options: PublicRelayNodeOptions): MeshConfig {
109
+ if (!options.enabled) {
110
+ return {
111
+ enableCircuitRelayServer: false,
112
+ deliveryAckTimeoutMs: DEFAULT_DELIVERY_ACK_TIMEOUT_MS,
113
+ };
114
+ }
115
+
116
+ return {
117
+ listenAddrs: [...options.listenAddrs],
118
+ ...(options.announceAddrs.length > 0 ? { announceAddrs: [...options.announceAddrs] } : {}),
119
+ enableCircuitRelayServer: true,
120
+ deliveryAckTimeoutMs: DEFAULT_DELIVERY_ACK_TIMEOUT_MS,
121
+ };
122
+ }
123
+
98
124
  export function applyDefaultMeshConfig(config: MeshConfig | undefined): MeshConfig {
99
125
  const base =
100
126
  config && typeof config === "object" && !Array.isArray(config)
@@ -185,16 +211,19 @@ export function planInboundTargetSync(
185
211
  ): InboundTargetSyncPlan {
186
212
  const targets: InboundTargetConfig[] = [];
187
213
  const missingChannels: string[] = [];
188
- const seenChannels = new Set<string>();
214
+ const seenTargetKeys = new Set<string>();
215
+ const coveredChannels = new Set<string>();
189
216
 
190
217
  for (const target of existingTargets) {
191
218
  const channel = typeof target.channel === "string" ? target.channel.trim() : "";
192
219
  const inboundTarget = typeof target.target === "string" ? target.target.trim() : "";
193
- if (!channel || !inboundTarget || seenChannels.has(channel)) {
220
+ const targetKey = `${channel}\u0000${inboundTarget}`;
221
+ if (!channel || !inboundTarget || seenTargetKeys.has(targetKey)) {
194
222
  continue;
195
223
  }
196
224
 
197
- seenChannels.add(channel);
225
+ seenTargetKeys.add(targetKey);
226
+ coveredChannels.add(channel);
198
227
  targets.push({
199
228
  ...target,
200
229
  channel,
@@ -204,11 +233,11 @@ export function planInboundTargetSync(
204
233
 
205
234
  for (const configuredChannel of configuredChannels) {
206
235
  const channel = typeof configuredChannel === "string" ? configuredChannel.trim() : "";
207
- if (!channel || channel === LIBP2P_MESH_PLUGIN_ID || seenChannels.has(channel)) {
236
+ if (!channel || channel === LIBP2P_MESH_PLUGIN_ID || coveredChannels.has(channel)) {
208
237
  continue;
209
238
  }
210
239
 
211
- seenChannels.add(channel);
240
+ coveredChannels.add(channel);
212
241
  missingChannels.push(channel);
213
242
  }
214
243