fix MCP auth token refresh and disable legacy SSE
This commit is contained in:
@@ -1,9 +1,7 @@
|
||||
import { z } from "zod";
|
||||
import { sessionCredentials, setMcpSessionCredentials } from "../../auth/credentials.js";
|
||||
import { sessionCredentials } from "../../auth/credentials.js";
|
||||
import { refreshSessionCredentials } from "../../auth/sessionRefresh.js";
|
||||
import { withAuthParams } from "../helpers/authSchema.js";
|
||||
import { fetchProjectInfo } from "../../auth/localClient.js";
|
||||
import { resolveCurrentProjectDir } from "../files/helpers.js";
|
||||
import { resolveCurrentAcaiUser } from "../helpers/sessionHelpers.js";
|
||||
import { getCurrentSessionId } from "../../utils/sessionContext.js";
|
||||
|
||||
export function registerAuthTools(server) {
|
||||
@@ -22,60 +20,10 @@ export function registerAuthTools(server) {
|
||||
};
|
||||
}
|
||||
|
||||
const acaiUser = resolveCurrentAcaiUser();
|
||||
|
||||
// Delegamos al Python que ya gestiona expiracion + refresh + persistencia
|
||||
let info;
|
||||
try {
|
||||
info = await fetchProjectInfo({ project_dir: projectDir }, acaiUser);
|
||||
} catch (e) {
|
||||
return {
|
||||
content: [{ type: "text", text: JSON.stringify({ success: false, error: `Token refresh failed: ${e.message}` }) }],
|
||||
isError: true,
|
||||
};
|
||||
}
|
||||
|
||||
if (!info?.success) {
|
||||
return {
|
||||
content: [{ type: "text", text: JSON.stringify({ success: false, error: info?.error || "Project info resolution failed" }) }],
|
||||
isError: true,
|
||||
};
|
||||
}
|
||||
|
||||
// Comparamos token previo para saber si hubo renovacion
|
||||
const mcpSessionId = getCurrentSessionId();
|
||||
let previousToken = null;
|
||||
if (mcpSessionId) {
|
||||
// Leer creds previas sin tocar lastAccess via interno no expuesto:
|
||||
// usamos sessionCredentials como espejo si existe, sino null.
|
||||
const prev = sessionCredentials.get(mcpSessionId);
|
||||
previousToken = prev?.token || null;
|
||||
}
|
||||
|
||||
const freshCreds = {
|
||||
token: info.token || "",
|
||||
tokenHash: info.tokenHash || "",
|
||||
website: info.domain || "",
|
||||
web_url: info.web_url || "",
|
||||
api_web_url: info.api_web_url || info.web_url || "",
|
||||
forge_host: info.forge_host || null,
|
||||
project_dir: info.project_dir || projectDir,
|
||||
acai_user: acaiUser || null,
|
||||
profileName: acaiUser || "mcp-session",
|
||||
role: "developer",
|
||||
};
|
||||
|
||||
// Persistir en la sesion MCP activa (HTTP multi-tenant)
|
||||
if (mcpSessionId) {
|
||||
setMcpSessionCredentials(mcpSessionId, freshCreds);
|
||||
sessionCredentials.set(mcpSessionId, freshCreds);
|
||||
}
|
||||
// Compatibilidad stdio (cuando extra.sessionId viene del SDK)
|
||||
if (extra?.sessionId) {
|
||||
sessionCredentials.set(extra.sessionId, freshCreds);
|
||||
}
|
||||
|
||||
const rotated = previousToken && previousToken !== freshCreds.token;
|
||||
const mcpSessionId = getCurrentSessionId() || extra?.sessionId || "_default";
|
||||
const previousToken = sessionCredentials.get(mcpSessionId)?.token || null;
|
||||
const freshCreds = await refreshSessionCredentials(mcpSessionId, { force: true });
|
||||
const rotated = Boolean(previousToken && previousToken !== freshCreds.token);
|
||||
|
||||
return {
|
||||
content: [{
|
||||
|
||||
Reference in New Issue
Block a user