chore: migrate to oxlint and oxfmt
Co-authored-by: Christoph Nakazawa <christoph.pojer@gmail.com>
This commit is contained in:
@@ -80,29 +80,21 @@ export function parseTimeoutMs(raw: unknown, fallbackMs: number): number {
|
||||
function normalizeWsUrl(value: string): string | null {
|
||||
const trimmed = value.trim();
|
||||
if (!trimmed) return null;
|
||||
if (!trimmed.startsWith("ws://") && !trimmed.startsWith("wss://"))
|
||||
return null;
|
||||
if (!trimmed.startsWith("ws://") && !trimmed.startsWith("wss://")) return null;
|
||||
return trimmed;
|
||||
}
|
||||
|
||||
export function resolveTargets(
|
||||
cfg: ClawdbotConfig,
|
||||
explicitUrl?: string,
|
||||
): GatewayStatusTarget[] {
|
||||
export function resolveTargets(cfg: ClawdbotConfig, explicitUrl?: string): GatewayStatusTarget[] {
|
||||
const targets: GatewayStatusTarget[] = [];
|
||||
const add = (t: GatewayStatusTarget) => {
|
||||
if (!targets.some((x) => x.url === t.url)) targets.push(t);
|
||||
};
|
||||
|
||||
const explicit =
|
||||
typeof explicitUrl === "string" ? normalizeWsUrl(explicitUrl) : null;
|
||||
if (explicit)
|
||||
add({ id: "explicit", kind: "explicit", url: explicit, active: true });
|
||||
const explicit = typeof explicitUrl === "string" ? normalizeWsUrl(explicitUrl) : null;
|
||||
if (explicit) add({ id: "explicit", kind: "explicit", url: explicit, active: true });
|
||||
|
||||
const remoteUrl =
|
||||
typeof cfg.gateway?.remote?.url === "string"
|
||||
? normalizeWsUrl(cfg.gateway.remote.url)
|
||||
: null;
|
||||
typeof cfg.gateway?.remote?.url === "string" ? normalizeWsUrl(cfg.gateway.remote.url) : null;
|
||||
if (remoteUrl) {
|
||||
add({
|
||||
id: "configRemote",
|
||||
@@ -123,10 +115,7 @@ export function resolveTargets(
|
||||
return targets;
|
||||
}
|
||||
|
||||
export function resolveProbeBudgetMs(
|
||||
overallMs: number,
|
||||
kind: TargetKind,
|
||||
): number {
|
||||
export function resolveProbeBudgetMs(overallMs: number, kind: TargetKind): number {
|
||||
if (kind === "localLoopback") return Math.min(800, overallMs);
|
||||
if (kind === "sshTunnel") return Math.min(2000, overallMs);
|
||||
return Math.min(1500, overallMs);
|
||||
@@ -144,26 +133,17 @@ export function resolveAuthForTarget(
|
||||
target: GatewayStatusTarget,
|
||||
overrides: { token?: string; password?: string },
|
||||
): { token?: string; password?: string } {
|
||||
const tokenOverride = overrides.token?.trim()
|
||||
? overrides.token.trim()
|
||||
: undefined;
|
||||
const passwordOverride = overrides.password?.trim()
|
||||
? overrides.password.trim()
|
||||
: undefined;
|
||||
const tokenOverride = overrides.token?.trim() ? overrides.token.trim() : undefined;
|
||||
const passwordOverride = overrides.password?.trim() ? overrides.password.trim() : undefined;
|
||||
if (tokenOverride || passwordOverride) {
|
||||
return { token: tokenOverride, password: passwordOverride };
|
||||
}
|
||||
|
||||
if (target.kind === "configRemote") {
|
||||
const token =
|
||||
typeof cfg.gateway?.remote?.token === "string"
|
||||
? cfg.gateway.remote.token.trim()
|
||||
: "";
|
||||
const remotePassword = (
|
||||
cfg.gateway?.remote as { password?: unknown } | undefined
|
||||
)?.password;
|
||||
const password =
|
||||
typeof remotePassword === "string" ? remotePassword.trim() : "";
|
||||
typeof cfg.gateway?.remote?.token === "string" ? cfg.gateway.remote.token.trim() : "";
|
||||
const remotePassword = (cfg.gateway?.remote as { password?: unknown } | undefined)?.password;
|
||||
const password = typeof remotePassword === "string" ? remotePassword.trim() : "";
|
||||
return {
|
||||
token: token.length > 0 ? token : undefined,
|
||||
password: password.length > 0 ? password : undefined,
|
||||
@@ -173,13 +153,9 @@ export function resolveAuthForTarget(
|
||||
const envToken = process.env.CLAWDBOT_GATEWAY_TOKEN?.trim() || "";
|
||||
const envPassword = process.env.CLAWDBOT_GATEWAY_PASSWORD?.trim() || "";
|
||||
const cfgToken =
|
||||
typeof cfg.gateway?.auth?.token === "string"
|
||||
? cfg.gateway.auth.token.trim()
|
||||
: "";
|
||||
typeof cfg.gateway?.auth?.token === "string" ? cfg.gateway.auth.token.trim() : "";
|
||||
const cfgPassword =
|
||||
typeof cfg.gateway?.auth?.password === "string"
|
||||
? cfg.gateway.auth.password.trim()
|
||||
: "";
|
||||
typeof cfg.gateway?.auth?.password === "string" ? cfg.gateway.auth.password.trim() : "";
|
||||
|
||||
return {
|
||||
token: envToken || cfgToken || undefined,
|
||||
@@ -194,10 +170,7 @@ export function pickGatewaySelfPresence(
|
||||
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:"),
|
||||
) ??
|
||||
entries.find((e) => typeof e.text === "string" && String(e.text).startsWith("Gateway:")) ??
|
||||
null;
|
||||
if (!self) return null;
|
||||
return {
|
||||
@@ -208,9 +181,7 @@ export function pickGatewaySelfPresence(
|
||||
};
|
||||
}
|
||||
|
||||
export function extractConfigSummary(
|
||||
snapshotUnknown: unknown,
|
||||
): GatewayConfigSummary {
|
||||
export function extractConfigSummary(snapshotUnknown: unknown): GatewayConfigSummary {
|
||||
const snap = snapshotUnknown as Partial<ConfigFileSnapshot> | null;
|
||||
const path = typeof snap?.path === "string" ? snap.path : null;
|
||||
const exists = Boolean(snap?.exists);
|
||||
@@ -230,27 +201,21 @@ export function extractConfigSummary(
|
||||
const tailscale = (gateway.tailscale ?? {}) as Record<string, unknown>;
|
||||
|
||||
const authMode = typeof auth.mode === "string" ? auth.mode : null;
|
||||
const authTokenConfigured =
|
||||
typeof auth.token === "string" ? auth.token.trim().length > 0 : false;
|
||||
const authTokenConfigured = typeof auth.token === "string" ? auth.token.trim().length > 0 : false;
|
||||
const authPasswordConfigured =
|
||||
typeof auth.password === "string" ? auth.password.trim().length > 0 : false;
|
||||
|
||||
const remoteUrl =
|
||||
typeof remote.url === "string" ? normalizeWsUrl(remote.url) : null;
|
||||
const remoteUrl = typeof remote.url === "string" ? normalizeWsUrl(remote.url) : null;
|
||||
const remoteTokenConfigured =
|
||||
typeof remote.token === "string" ? remote.token.trim().length > 0 : false;
|
||||
const remotePasswordConfigured =
|
||||
typeof remote.password === "string"
|
||||
? String(remote.password).trim().length > 0
|
||||
: false;
|
||||
typeof remote.password === "string" ? String(remote.password).trim().length > 0 : false;
|
||||
|
||||
const bridgeEnabled =
|
||||
typeof bridge.enabled === "boolean" ? bridge.enabled : null;
|
||||
const bridgeEnabled = typeof bridge.enabled === "boolean" ? bridge.enabled : null;
|
||||
const bridgeBind = typeof bridge.bind === "string" ? bridge.bind : null;
|
||||
const bridgePort = parseIntOrNull(bridge.port);
|
||||
|
||||
const wideAreaEnabled =
|
||||
typeof wideArea.enabled === "boolean" ? wideArea.enabled : null;
|
||||
const wideAreaEnabled = typeof wideArea.enabled === "boolean" ? wideArea.enabled : null;
|
||||
|
||||
return {
|
||||
path,
|
||||
@@ -258,26 +223,20 @@ export function extractConfigSummary(
|
||||
valid,
|
||||
issues: issuesRaw
|
||||
.filter((i): i is { path: string; message: string } =>
|
||||
Boolean(
|
||||
i && typeof i.path === "string" && typeof i.message === "string",
|
||||
),
|
||||
Boolean(i && typeof i.path === "string" && typeof i.message === "string"),
|
||||
)
|
||||
.map((i) => ({ path: i.path, message: i.message })),
|
||||
legacyIssues: legacyRaw
|
||||
.filter((i): i is { path: string; message: string } =>
|
||||
Boolean(
|
||||
i && typeof i.path === "string" && typeof i.message === "string",
|
||||
),
|
||||
Boolean(i && typeof i.path === "string" && typeof i.message === "string"),
|
||||
)
|
||||
.map((i) => ({ path: i.path, message: i.message })),
|
||||
gateway: {
|
||||
mode: typeof gateway.mode === "string" ? gateway.mode : null,
|
||||
bind: typeof gateway.bind === "string" ? gateway.bind : null,
|
||||
port: parseIntOrNull(gateway.port),
|
||||
controlUiEnabled:
|
||||
typeof controlUi.enabled === "boolean" ? controlUi.enabled : null,
|
||||
controlUiBasePath:
|
||||
typeof controlUi.basePath === "string" ? controlUi.basePath : null,
|
||||
controlUiEnabled: typeof controlUi.enabled === "boolean" ? controlUi.enabled : null,
|
||||
controlUiBasePath: typeof controlUi.basePath === "string" ? controlUi.basePath : null,
|
||||
authMode,
|
||||
authTokenConfigured,
|
||||
authPasswordConfigured,
|
||||
@@ -315,24 +274,17 @@ export function renderTargetHeader(target: GatewayStatusTarget, rich: boolean) {
|
||||
return `${colorize(rich, theme.heading, kindLabel)} ${colorize(rich, theme.muted, target.url)}`;
|
||||
}
|
||||
|
||||
export function renderProbeSummaryLine(
|
||||
probe: GatewayProbeResult,
|
||||
rich: boolean,
|
||||
) {
|
||||
export function renderProbeSummaryLine(probe: GatewayProbeResult, rich: boolean) {
|
||||
if (probe.ok) {
|
||||
const latency =
|
||||
typeof probe.connectLatencyMs === "number"
|
||||
? `${probe.connectLatencyMs}ms`
|
||||
: "unknown";
|
||||
typeof probe.connectLatencyMs === "number" ? `${probe.connectLatencyMs}ms` : "unknown";
|
||||
return `${colorize(rich, theme.success, "Connect: ok")} (${latency}) · ${colorize(rich, theme.success, "RPC: ok")}`;
|
||||
}
|
||||
|
||||
const detail = probe.error ? ` - ${probe.error}` : "";
|
||||
if (probe.connectLatencyMs != null) {
|
||||
const latency =
|
||||
typeof probe.connectLatencyMs === "number"
|
||||
? `${probe.connectLatencyMs}ms`
|
||||
: "unknown";
|
||||
typeof probe.connectLatencyMs === "number" ? `${probe.connectLatencyMs}ms` : "unknown";
|
||||
return `${colorize(rich, theme.success, "Connect: ok")} (${latency}) · ${colorize(rich, theme.error, "RPC: failed")}${detail}`;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user