Files

113 lines
3.2 KiB
JavaScript

/**
* R149: Central registry for frontend compatibility surfaces.
* Keep legacy aliases declared once so migrations do not depend on scattered
* string literals.
*/
export const API_PREFIXES = Object.freeze({
canonical: "/openclaw",
legacy: "/moltbot",
});
export const SETTINGS_PREFIXES = Object.freeze({
canonical: "OpenClaw",
legacy: "Moltbot",
});
export const STORAGE_KEYS = Object.freeze({
session: Object.freeze({
adminToken: Object.freeze({
primary: "openclaw_admin_token",
legacy: "moltbot_admin_token",
}),
}),
local: Object.freeze({
activeTab: Object.freeze({
primary: "openclaw-active-tab",
legacy: "moltbot-active-tab",
}),
notifications: Object.freeze({
primary: "openclaw_notifications",
legacy: null,
}),
remoteAdminToken: Object.freeze({
primary: "openclaw_remote_admin_token",
legacy: null,
}),
}),
});
export const HEADER_ALIASES = Object.freeze({
adminToken: Object.freeze({
primary: "X-OpenClaw-Admin-Token",
legacy: "X-Moltbot-Admin-Token",
}),
obsToken: Object.freeze({
primary: "X-OpenClaw-Obs-Token",
legacy: "X-Moltbot-Obs-Token",
}),
});
export function getApiPathCandidates(path) {
if (typeof path !== "string") return [path];
if (path.startsWith(`${API_PREFIXES.canonical}/`)) {
return [path, path.replace(API_PREFIXES.canonical, API_PREFIXES.legacy)];
}
if (path.startsWith(`${API_PREFIXES.legacy}/`)) {
return [path, path.replace(API_PREFIXES.legacy, API_PREFIXES.canonical)];
}
return [path];
}
export function getMirroredStorageValue(storage, spec) {
return storage.getItem(spec.primary) || (spec.legacy ? storage.getItem(spec.legacy) : null);
}
export function setMirroredStorageValue(storage, spec, value) {
if (!value) {
storage.removeItem(spec.primary);
if (spec.legacy) storage.removeItem(spec.legacy);
return;
}
storage.setItem(spec.primary, value);
if (spec.legacy) storage.setItem(spec.legacy, value);
}
export function getCompatibleSettingValue(settings, key, fallbackValue) {
if (!settings?.getSettingValue) return fallbackValue;
const canonicalValue = settings.getSettingValue(
`${SETTINGS_PREFIXES.canonical}.${key}`,
undefined
);
if (canonicalValue !== undefined) return canonicalValue;
const legacyValue = settings.getSettingValue(
`${SETTINGS_PREFIXES.legacy}.${key}`,
undefined
);
return legacyValue !== undefined ? legacyValue : fallbackValue;
}
function buildAliasHeaderMap(value, aliases) {
const normalized = value || "";
const headers = {};
aliases.forEach((alias) => {
headers[alias.primary] = normalized;
if (alias.legacy) headers[alias.legacy] = normalized;
});
return headers;
}
export function buildAdminTokenHeaders(token) {
return buildAliasHeaderMap(token, [HEADER_ALIASES.adminToken]);
}
export function buildRemoteAdminHeaders(token) {
return buildAliasHeaderMap(token, [
HEADER_ALIASES.adminToken,
HEADER_ALIASES.obsToken,
]);
}