mirror of https://github.com/openclaw/openclaw.git
59 lines
1.6 KiB
TypeScript
59 lines
1.6 KiB
TypeScript
import crypto from "node:crypto";
|
|
import type { OpenClawConfig } from "../config/config.js";
|
|
|
|
export type OwnerDisplaySetting = {
|
|
ownerDisplay?: "raw" | "hash";
|
|
ownerDisplaySecret?: string;
|
|
};
|
|
|
|
export type OwnerDisplaySecretResolution = {
|
|
config: OpenClawConfig;
|
|
generatedSecret?: string;
|
|
};
|
|
|
|
function trimToUndefined(value?: string): string | undefined {
|
|
const trimmed = value?.trim();
|
|
return trimmed ? trimmed : undefined;
|
|
}
|
|
|
|
/**
|
|
* Resolve owner display settings for prompt rendering.
|
|
* Keep auth secrets decoupled from owner hash secrets.
|
|
*/
|
|
export function resolveOwnerDisplaySetting(config?: OpenClawConfig): OwnerDisplaySetting {
|
|
const ownerDisplay = config?.commands?.ownerDisplay;
|
|
if (ownerDisplay !== "hash") {
|
|
return { ownerDisplay, ownerDisplaySecret: undefined };
|
|
}
|
|
return {
|
|
ownerDisplay: "hash",
|
|
ownerDisplaySecret: trimToUndefined(config?.commands?.ownerDisplaySecret),
|
|
};
|
|
}
|
|
|
|
/**
|
|
* Ensure hash mode has a dedicated secret.
|
|
* Returns updated config and generated secret when autofill was needed.
|
|
*/
|
|
export function ensureOwnerDisplaySecret(
|
|
config: OpenClawConfig,
|
|
generateSecret: () => string = () => crypto.randomBytes(32).toString("hex"),
|
|
): OwnerDisplaySecretResolution {
|
|
const settings = resolveOwnerDisplaySetting(config);
|
|
if (settings.ownerDisplay !== "hash" || settings.ownerDisplaySecret) {
|
|
return { config };
|
|
}
|
|
const generatedSecret = generateSecret();
|
|
return {
|
|
config: {
|
|
...config,
|
|
commands: {
|
|
...config.commands,
|
|
ownerDisplay: "hash",
|
|
ownerDisplaySecret: generatedSecret,
|
|
},
|
|
},
|
|
generatedSecret,
|
|
};
|
|
}
|