46 lines
2.1 KiB
JavaScript
46 lines
2.1 KiB
JavaScript
import { z } from "zod";
|
|
import { withAuth, getSessionCredentials } from "../../auth/index.js";
|
|
import { handleToolError } from "../helpers/errorHandler.js";
|
|
import { withAuthParams } from "../helpers/authSchema.js";
|
|
|
|
export function registerGetWebUrlTool(server) {
|
|
server.tool(
|
|
"get_web_url",
|
|
`Get the correct URL for the project's development website. Always use this URL for fetch, Playwright, or any HTTP request to the site. Never guess or use production domains.`,
|
|
withAuthParams({}),
|
|
{ readOnlyHint: true, destructiveHint: false },
|
|
withAuth(async (_params, extra) => {
|
|
try {
|
|
const credentials = await getSessionCredentials(extra.sessionId);
|
|
|
|
if (!credentials || !credentials.web_url) {
|
|
return {
|
|
content: [{ type: "text", text: "Error: no web_url available. Run select_project first." }],
|
|
isError: true,
|
|
};
|
|
}
|
|
|
|
// Inside Docker, HTTPS is not available — force HTTP for internal requests
|
|
let webUrl = credentials.web_url;
|
|
if (webUrl && webUrl.startsWith("https://") && webUrl.includes(".forge.")) {
|
|
webUrl = webUrl.replace("https://", "http://");
|
|
}
|
|
|
|
return {
|
|
content: [{
|
|
type: "text",
|
|
text: JSON.stringify({
|
|
web_url: webUrl,
|
|
api_web_url: credentials.api_web_url || null,
|
|
website: credentials.website || null,
|
|
note: "Always use web_url for Playwright/fetch. IMPORTANT: Always append ?pruebas=1 to any URL you visit (e.g. web_url + '/?pruebas=1' or web_url + '/servicios/?pruebas=1'). Never use the production domain directly.",
|
|
})
|
|
}],
|
|
};
|
|
} catch (error) {
|
|
return handleToolError(error, "get_web_url", {});
|
|
}
|
|
})
|
|
);
|
|
}
|