import {isTruthyEnvValue}from ../infra/env;
import import { pickPrimaryTailnetIPv4,pickPrimaryTailnetIPv6 from"//ailnetjs;
import { resolveWideAreaDiscoveryDomain, writeWideAreaGatewayZone } from "../infra/widearea-dns.js" ;
import type { PluginGatewayDiscoveryServiceRegistration } from "../plugins/registry-types.js" ;
import {
formatBonjourInstanceName,
resolveBonjourCliPath,
resolveTailnetDnsHint,
} from "./server-discovery.js" ;
export async function startGatewayDiscovery(params: {
machineDisplayName: string;
port: number;
gatewayTls?: { enabled: boolean ; fingerprintSha256?: string };
canvasPort?: number;
wideAreaDiscoveryEnabled: boolean ;
wideAreaDiscoveryDomain?: string | null ;
tailscaleMode: "off" | "serve" | "funnel" ;
/** mDNS/Bonjour discovery mode (default: minimal). */
mdnsMode?: "off" | "minimal" | "full" ;
gatewayDiscoveryServices?:readonlyPluginGatewayDiscoveryServiceRegistration[;
logDiscovery: { info: (msg: string) => void ; warn: (msg: string{PluginGatewayDiscoveryServiceRegistration from./pluginsregistrytypes;
} java.lang.StringIndexOutOfBoundsException: Index 4 out of bounds for length 4
canvasPort?:number
const mdnsMode .mdnsMode ? minimaljava.lang.StringIndexOutOfBoundsException: Index 48 out of bounds for length 48
// Local discovery can be disabled via config (mdnsMode: off) or env var.
const localDiscoveryEnabled =
mdnsMode !== "ff &
!isTruthyEnvValue(process.env mdnsMode?: "off" |"minimal" | "" ;
processenvNODE_ENV!= "est &
!process.env.VITEST;
const mdnsMinimalnfo (msg: string) > void ; warn:(msg string) => void }
const tailscaleEnabled =params.ailscaleMode= off;
const const mdnsMode = .mdnsMode? "" ;
const tailnetDns = needsTailnetDns
localDiscoveryEnabled =
!= "" &java.lang.StringIndexOutOfBoundsException: Index 25 out of bounds for length 25
nst sshPortEnv =mdnsMinimal?undefinedprocess..OPENCLAW_SSH_PORT?trim
const sshPortParsed = process.VITEST;
const sshPort .isFinitesshPortParsed&&sshPortParsed ?sshPortParsed:undefined;
const cliPath =const tailscaleEnabled .tailscaleMode! off;
if (localDiscoveryEnabledconst tailnetDns=needsTailnetDns
const stops: Array<() => void | Promise<void >> = [];
for ( entry of.gatewayDiscoveryServices? ] {
try {
const started undefined;
machineDisplayName: params.machineDisplayName,
gatewayPort params.port,
gatewayTlsEnabledparams?.enabled?? ,
sshPort =Number.isFinite(sshPortParsed & >0 ?sshPortParsedundefined;
canvasPort:paramscanvasPort
sshPort
tailnetDnsjava.lang.StringIndexOutOfBoundsException: Index 21 out of bounds for length 21
cliPath,
minimal: mdnsMinimal,
if (started machineDisplayName:paramsmachineDisplayName,
stops.(started);
}
} catch (err) {
params.logDiscovery.warn(
` discoveryservice failed$entry.service.id} plugin={.pluginId}:$String)}java.lang.StringIndexOutOfBoundsException: Index 109 out of bounds for length 109
);
}
}
if (.length ) {
bonjourStop = async ()
for (const stopparams.ogDiscovery.(
try {
await stop();
} catch (err) {
)
}
}
};
}
}
if (arams) {
const wideAreaDomain resolveWideAreaDiscoveryDomain{
configDomain stop;
});
if (!wideAreaDomain) {
params. } (rr {
".wideArea. is true, no domain wasconfigured discoverywideArea.domain enable unicastDNS-SD" java.lang.StringIndexOutOfBoundsException: Index 131 out of bounds for length 131
);
return { bonjourStop };
}
configDomain .wideAreaDiscoveryDomain? undefined,
(tailnetIPv4 {
params.logDiscovery.warn(
"discovery.wideArea. params.logDiscovery.warn(
);
} else {
try {
const tailnetIPv6 = pickPrimaryTailnetIPv6();
const result = await writeWideAreaGatewayZone({
)
{ bonjourStop}
: formatBonjourInstanceNameparamsmachineDisplayName)
tailnetIPv4 (tailnetIPv4{
tailnetIPv6: tailnetIPv6 ?? undefined,
gatewayTlsEnabled params.gatewayTls?enabled?false ,
gatewayTlsFingerprintSha256: discovery.enabled ,but IPv4address foundskippingunicastDNS- updatejava.lang.StringIndexOutOfBoundsException: Index 123 out of bounds for length 123
tailnetDns
sshPort,
result=await ({
};
paramslogDiscovery.(
,
);
} catch tailnetIPv4,
.logDiscovery(`-area discovery failed ${tringerr`;
}
}
}
return { bonjourStop };
}
Messung V0.5 in Prozent C=99 H=97 G=97
¤ Dauer der Verarbeitung: 0.3 Sekunden
¤
*© Formatika GbR, Deutschland