89 lines
2.7 KiB
TypeScript
89 lines
2.7 KiB
TypeScript
"use client";
|
|
|
|
const ACTIVE_SESSION_ID_KEY = "claw.activeSessionId";
|
|
const PENDING_WORKSPACE_SESSION_ID_KEY = "claw.pendingWorkspaceSessionId";
|
|
export const ACTIVE_SESSION_CHANGED_EVENT = "claw-active-session-changed";
|
|
|
|
export function readActiveSessionId() {
|
|
if (typeof window === "undefined") return null;
|
|
return (
|
|
normalizeSessionId(window.sessionStorage.getItem(ACTIVE_SESSION_ID_KEY)) ??
|
|
normalizeSessionId(window.localStorage.getItem(ACTIVE_SESSION_ID_KEY))
|
|
);
|
|
}
|
|
|
|
export function writeActiveSessionId(sessionId: string | null | undefined) {
|
|
if (typeof window === "undefined") return;
|
|
const normalized = normalizeSessionId(sessionId);
|
|
if (!normalized) {
|
|
clearActiveSessionId();
|
|
return;
|
|
}
|
|
window.sessionStorage.setItem(ACTIVE_SESSION_ID_KEY, normalized);
|
|
window.localStorage.setItem(ACTIVE_SESSION_ID_KEY, normalized);
|
|
const pendingSessionId = readPendingWorkspaceSessionId();
|
|
if (pendingSessionId && pendingSessionId !== normalized) {
|
|
clearPendingWorkspaceSessionId();
|
|
}
|
|
window.dispatchEvent(
|
|
new CustomEvent(ACTIVE_SESSION_CHANGED_EVENT, {
|
|
detail: { sessionId: normalized },
|
|
}),
|
|
);
|
|
}
|
|
|
|
export function clearActiveSessionId() {
|
|
if (typeof window === "undefined") return;
|
|
window.sessionStorage.removeItem(ACTIVE_SESSION_ID_KEY);
|
|
window.localStorage.removeItem(ACTIVE_SESSION_ID_KEY);
|
|
clearPendingWorkspaceSessionId();
|
|
window.dispatchEvent(
|
|
new CustomEvent(ACTIVE_SESSION_CHANGED_EVENT, {
|
|
detail: { sessionId: null },
|
|
}),
|
|
);
|
|
}
|
|
|
|
export function writePendingWorkspaceSessionId(
|
|
sessionId: string | null | undefined,
|
|
) {
|
|
if (typeof window === "undefined") return;
|
|
const normalized = normalizeSessionId(sessionId);
|
|
if (!normalized) {
|
|
clearPendingWorkspaceSessionId();
|
|
return;
|
|
}
|
|
window.sessionStorage.setItem(PENDING_WORKSPACE_SESSION_ID_KEY, normalized);
|
|
window.localStorage.setItem(PENDING_WORKSPACE_SESSION_ID_KEY, normalized);
|
|
}
|
|
|
|
export function consumePendingWorkspaceSessionId() {
|
|
const sessionId = readPendingWorkspaceSessionId();
|
|
clearPendingWorkspaceSessionId();
|
|
return sessionId;
|
|
}
|
|
|
|
function readPendingWorkspaceSessionId() {
|
|
if (typeof window === "undefined") return null;
|
|
return (
|
|
normalizeSessionId(
|
|
window.sessionStorage.getItem(PENDING_WORKSPACE_SESSION_ID_KEY),
|
|
) ??
|
|
normalizeSessionId(
|
|
window.localStorage.getItem(PENDING_WORKSPACE_SESSION_ID_KEY),
|
|
)
|
|
);
|
|
}
|
|
|
|
function clearPendingWorkspaceSessionId() {
|
|
if (typeof window === "undefined") return;
|
|
window.sessionStorage.removeItem(PENDING_WORKSPACE_SESSION_ID_KEY);
|
|
window.localStorage.removeItem(PENDING_WORKSPACE_SESSION_ID_KEY);
|
|
}
|
|
|
|
function normalizeSessionId(value: unknown) {
|
|
if (typeof value !== "string") return null;
|
|
const trimmed = value.trim();
|
|
return trimmed || null;
|
|
}
|