https://www.tella.tv/video/mouchouxs-video-75n3

const DEFAULT_CHATKIT_BASE = "<https://api.openai.com>";

try {
  // 1️⃣ Récupérer la clé OpenAI
  const openaiApiKey = $env.open_ai_key;
  if (!openaiApiKey) throw new Error("Missing OPENAI_API_KEY in Xano environment variables.");

  // 2️⃣ Générer un identifiant de session serveur
  // (on n’utilise plus le user_id du front pour la sécurité)
  const session_id = crypto.randomUUID();

  // 3️⃣ Récupérer le workflow_id depuis les variables Xano
  const resolvedWorkflowId = $var.workflow_id;
  if (!resolvedWorkflowId) {
    throw new Error("Missing 'workflow_id' variable in Xano.");
  }

  // 4️⃣ Appel à OpenAI pour créer la session ChatKit
  const url = `${DEFAULT_CHATKIT_BASE}/v1/chatkit/sessions`;
  const upstreamResponse = await fetch(url, {
    method: "POST",
    headers: {
      "Content-Type": "application/json",
      "Authorization": `Bearer ${openaiApiKey}`,
      "OpenAI-Beta": "chatkit_beta=v1",
    },
    body: JSON.stringify({
      workflow: { id: resolvedWorkflowId },
      user: session_id, // 👈 on passe le session_id ici
      chatkit_configuration: {},
    }),
  });

  const upstreamJson = await upstreamResponse.json();

  // 5️⃣ Gestion des erreurs
  if (!upstreamResponse.ok) {
    console.log("❌ ChatKit session creation failed", {
      status: upstreamResponse.status,
      body: upstreamJson,
    });
    throw new Error(
      upstreamJson.error?.message ||
        upstreamJson.error ||
        `Failed to create session: ${upstreamResponse.statusText}`
    );
  }

  console.log("✅ ChatKit session created successfully for session_id:", session_id);

  // 6️⃣ Créer le cookie HttpOnly pour identifier la session côté client (sans jamais l’exposer en JSON)
  const cookie_value = `ncf_chat_sess=${session_id}; HttpOnly; Secure; SameSite=None; Path=/; Max-Age=86400`;

  // 7️⃣ Retourner la réponse
  // On renvoie la valeur du cookie à Xano sous forme d'une variable 'cookies_to_set'
  // que tu pourras utiliser dans un step "Set Header" pour le Set-Cookie réel
  return {
    client_secret: upstreamJson.client_secret ?? null,
    expires_after: upstreamJson.expires_after ?? null,
    cookies_to_set: cookie_value,
  };
} catch (error) {
  console.log("💥 Create session error:", error);
  throw error;
}