mirror of
https://github.com/openclaw/openclaw.git
synced 2026-03-12 07:20:45 +00:00
refactor(commands): dedupe gateway self presence picker
This commit is contained in:
27
src/commands/gateway-presence.ts
Normal file
27
src/commands/gateway-presence.ts
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
export type GatewaySelfPresence = {
|
||||||
|
host?: string;
|
||||||
|
ip?: string;
|
||||||
|
version?: string;
|
||||||
|
platform?: string;
|
||||||
|
};
|
||||||
|
|
||||||
|
export function pickGatewaySelfPresence(presence: unknown): GatewaySelfPresence | null {
|
||||||
|
if (!Array.isArray(presence)) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
const entries = presence as Array<Record<string, unknown>>;
|
||||||
|
const self =
|
||||||
|
entries.find((e) => e.mode === "gateway" && e.reason === "self") ??
|
||||||
|
// Back-compat: older presence payloads only included a `text` line.
|
||||||
|
entries.find((e) => typeof e.text === "string" && String(e.text).startsWith("Gateway:")) ??
|
||||||
|
null;
|
||||||
|
if (!self) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return {
|
||||||
|
host: typeof self.host === "string" ? self.host : undefined,
|
||||||
|
ip: typeof self.ip === "string" ? self.ip : undefined,
|
||||||
|
version: typeof self.version === "string" ? self.version : undefined,
|
||||||
|
platform: typeof self.platform === "string" ? self.platform : undefined,
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -3,6 +3,7 @@ import type { GatewayProbeResult } from "../../gateway/probe.js";
|
|||||||
import { resolveGatewayPort } from "../../config/config.js";
|
import { resolveGatewayPort } from "../../config/config.js";
|
||||||
import { pickPrimaryTailnetIPv4 } from "../../infra/tailnet.js";
|
import { pickPrimaryTailnetIPv4 } from "../../infra/tailnet.js";
|
||||||
import { colorize, theme } from "../../terminal/theme.js";
|
import { colorize, theme } from "../../terminal/theme.js";
|
||||||
|
import { pickGatewaySelfPresence } from "../gateway-presence.js";
|
||||||
|
|
||||||
type TargetKind = "explicit" | "configRemote" | "localLoopback" | "sshTunnel";
|
type TargetKind = "explicit" | "configRemote" | "localLoopback" | "sshTunnel";
|
||||||
|
|
||||||
@@ -178,27 +179,7 @@ export function resolveAuthForTarget(
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
export function pickGatewaySelfPresence(
|
export { pickGatewaySelfPresence };
|
||||||
presence: unknown,
|
|
||||||
): { host?: string; ip?: string; version?: string; platform?: string } | null {
|
|
||||||
if (!Array.isArray(presence)) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
const entries = presence as Array<Record<string, unknown>>;
|
|
||||||
const self =
|
|
||||||
entries.find((e) => e.mode === "gateway" && e.reason === "self") ??
|
|
||||||
entries.find((e) => typeof e.text === "string" && String(e.text).startsWith("Gateway:")) ??
|
|
||||||
null;
|
|
||||||
if (!self) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
return {
|
|
||||||
host: typeof self.host === "string" ? self.host : undefined,
|
|
||||||
ip: typeof self.ip === "string" ? self.ip : undefined,
|
|
||||||
version: typeof self.version === "string" ? self.version : undefined,
|
|
||||||
platform: typeof self.platform === "string" ? self.platform : undefined,
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
export function extractConfigSummary(snapshotUnknown: unknown): GatewayConfigSummary {
|
export function extractConfigSummary(snapshotUnknown: unknown): GatewayConfigSummary {
|
||||||
const snap = snapshotUnknown as Partial<ConfigFileSnapshot> | null;
|
const snap = snapshotUnknown as Partial<ConfigFileSnapshot> | null;
|
||||||
|
|||||||
@@ -180,24 +180,4 @@ export function summarizeLogTail(rawLines: string[], opts?: { maxLines?: number
|
|||||||
return kept;
|
return kept;
|
||||||
}
|
}
|
||||||
|
|
||||||
export function pickGatewaySelfPresence(presence: unknown): {
|
export { pickGatewaySelfPresence } from "../gateway-presence.js";
|
||||||
host?: string;
|
|
||||||
ip?: string;
|
|
||||||
version?: string;
|
|
||||||
platform?: string;
|
|
||||||
} | null {
|
|
||||||
if (!Array.isArray(presence)) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
const entries = presence as Array<Record<string, unknown>>;
|
|
||||||
const self = entries.find((e) => e.mode === "gateway" && e.reason === "self") ?? null;
|
|
||||||
if (!self) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
return {
|
|
||||||
host: typeof self.host === "string" ? self.host : undefined,
|
|
||||||
ip: typeof self.ip === "string" ? self.ip : undefined,
|
|
||||||
version: typeof self.version === "string" ? self.version : undefined,
|
|
||||||
platform: typeof self.platform === "string" ? self.platform : undefined,
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
import type { loadConfig } from "../config/config.js";
|
import type { loadConfig } from "../config/config.js";
|
||||||
|
export { pickGatewaySelfPresence } from "./gateway-presence.js";
|
||||||
|
|
||||||
export function resolveGatewayProbeAuth(cfg: ReturnType<typeof loadConfig>): {
|
export function resolveGatewayProbeAuth(cfg: ReturnType<typeof loadConfig>): {
|
||||||
token?: string;
|
token?: string;
|
||||||
@@ -25,25 +26,3 @@ export function resolveGatewayProbeAuth(cfg: ReturnType<typeof loadConfig>): {
|
|||||||
: undefined);
|
: undefined);
|
||||||
return { token, password };
|
return { token, password };
|
||||||
}
|
}
|
||||||
|
|
||||||
export function pickGatewaySelfPresence(presence: unknown): {
|
|
||||||
host?: string;
|
|
||||||
ip?: string;
|
|
||||||
version?: string;
|
|
||||||
platform?: string;
|
|
||||||
} | null {
|
|
||||||
if (!Array.isArray(presence)) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
const entries = presence as Array<Record<string, unknown>>;
|
|
||||||
const self = entries.find((e) => e.mode === "gateway" && e.reason === "self") ?? null;
|
|
||||||
if (!self) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
return {
|
|
||||||
host: typeof self.host === "string" ? self.host : undefined,
|
|
||||||
ip: typeof self.ip === "string" ? self.ip : undefined,
|
|
||||||
version: typeof self.version === "string" ? self.version : undefined,
|
|
||||||
platform: typeof self.platform === "string" ? self.platform : undefined,
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|||||||
Reference in New Issue
Block a user