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;
}