Newer
Older
cortex-hub / ui / client-app / src / services / websocket.js
// src/services/websocket.js

import { createSession } from "./apiService";

/**
 * Gets a session ID from localStorage or creates a new one via the API.
 * @param {string} featureNamespace - The key suffix to use for isolated storage.
 * @returns {Promise<string>} The session ID.
 */
export const getSessionId = async (featureNamespace = "default", providerName = "deepseek", extraParams = {}) => {
  const storageKey = featureNamespace === "default" ? "sessionId" : `sessionId_${featureNamespace}`;
  let sessionId = localStorage.getItem(storageKey);
  if (!sessionId) {
    // No existing session, so create one via API
    const session = await createSession(featureNamespace, providerName, extraParams);
    sessionId = session.id;

    // Store it in localStorage for reuse
    localStorage.setItem(storageKey, sessionId);
  } else {
    // Verify it still exists remotely (wasn't deleted on another device or tab)
    try {
      const { getSession } = require("./apiService");
      await getSession(sessionId);
    } catch (e) {
      console.warn("Session in localStorage was invalid or deleted, creating a new one...", e);
      const session = await createSession(featureNamespace, providerName, extraParams);
      sessionId = session.id;
      localStorage.setItem(storageKey, sessionId);
    }
  }

  console.log(`Using session ID for [${featureNamespace}]:`, sessionId);
  return sessionId;
};