import { mcpTest } from "../src/testkit.mjs";import { selfhost } from "./execute.test.mjs"; const uniqueId = (prefix) => `${prefix}-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`; mcpTest( "x emulator OAuth client-credentials clients authenticate with HTTP Basic", selfhost, async (mcp) => { const slug = uniqueId("x-oauth-basic"); const instance = slug; const baseUrl = `https://emulators.dev/x/${instance}`; mcp.say( "Register the X emulator OpenAPI integration, create a confidential OAuth client, and start a client-credentials connection through Executor itself.", ); const started = await mcp.call("execute", { code: `const slug = ${JSON.stringify(slug)};const baseUrl = ${JSON.stringify(baseUrl)};const authorizationUrl = baseUrl + "/2/oauth2/authorize";const tokenUrl = baseUrl + "/2/oauth2/token"; const added = await tools.executor.openapi.addSpec({ spec: { kind: "url", url: "https://x.emulators.dev/2/openapi.json" }, slug, baseUrl, authenticationTemplate: [{ slug: "oauth2", type: "oauth", authorizationUrl, tokenUrl, scopes: [], }],}); const client = await tools.executor.coreTools.oauth.clients.create({ owner: "org", slug: slug + "-client", authorizationUrl, tokenUrl, grant: "client_credentials", clientId: "x-confidential-client", clientSecret: "x-confidential-secret",}); const connection = await tools.executor.coreTools.oauth.start({ client: slug + "-client", clientOwner: "org", owner: "org", name: "machine", integration: slug, template: "oauth2",}); return JSON.stringify({ added, client, connection }, null, 2);`, }); mcp.expect(started.text).toContain("Execution paused: Add an OpenAPI integration"); const resumed = await mcp.approvePaused(started.text); const ledger = await fetch(`${baseUrl}/_emulate/ledger?limit=20`).then((r) => r.json()); const tokenRequest = ledger.entries.find( (entry) => entry.path === "/2/oauth2/token" && entry.request?.body?.grant_type === "client_credentials", ); if (!resumed.ok) { mcp.expect(Boolean(tokenRequest)).toBe(true); mcp.expect(Object.hasOwn(tokenRequest.request.body, "client_secret")).toBe(false); } mcp.expect(resumed.ok).toBe(true); mcp.expect(resumed.text).toContain('"status": "connected"'); mcp.expect(Boolean(tokenRequest)).toBe(true); mcp.expect(tokenRequest.request.headers.authorization).toBe("[redacted]"); mcp.expect(Object.hasOwn(tokenRequest.request.body, "client_secret")).toBe(false); },);
import { mcpTest } from "../src/testkit.mjs";
import { selfhost } from "./execute.test.mjs";
const uniqueId = (prefix) => `${prefix}-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;
mcpTest(
"x emulator OAuth client-credentials clients authenticate with HTTP Basic",
selfhost,
async (mcp) => {
const slug = uniqueId("x-oauth-basic");
const instance = slug;
const baseUrl = `https://emulators.dev/x/${instance}`;
mcp.say(
"Register the X emulator OpenAPI integration, create a confidential OAuth client, and start a client-credentials connection through Executor itself.",
);
const started = await mcp.call("execute", {
code: `
const slug = ${JSON.stringify(slug)};
const baseUrl = ${JSON.stringify(baseUrl)};
const authorizationUrl = baseUrl + "/2/oauth2/authorize";
const tokenUrl = baseUrl + "/2/oauth2/token";
const added = await tools.executor.openapi.addSpec({
spec: { kind: "url", url: "https://x.emulators.dev/2/openapi.json" },
slug,
baseUrl,
authenticationTemplate: [{
slug: "oauth2",
type: "oauth",
authorizationUrl,
tokenUrl,
scopes: [],
}],
});
const client = await tools.executor.coreTools.oauth.clients.create({
owner: "org",
slug: slug + "-client",
authorizationUrl,
tokenUrl,
grant: "client_credentials",
clientId: "x-confidential-client",
clientSecret: "x-confidential-secret",
});
const connection = await tools.executor.coreTools.oauth.start({
client: slug + "-client",
clientOwner: "org",
owner: "org",
name: "machine",
integration: slug,
template: "oauth2",
});
return JSON.stringify({ added, client, connection }, null, 2);
`,
});
mcp.expect(started.text).toContain("Execution paused: Add an OpenAPI integration");
const resumed = await mcp.approvePaused(started.text);
const ledger = await fetch(`${baseUrl}/_emulate/ledger?limit=20`).then((r) => r.json());
const tokenRequest = ledger.entries.find(
(entry) =>
entry.path === "/2/oauth2/token" &&
entry.request?.body?.grant_type === "client_credentials",
);
if (!resumed.ok) {
mcp.expect(Boolean(tokenRequest)).toBe(true);
mcp.expect(Object.hasOwn(tokenRequest.request.body, "client_secret")).toBe(false);
}
mcp.expect(resumed.ok).toBe(true);
mcp.expect(resumed.text).toContain('"status": "connected"');
mcp.expect(Boolean(tokenRequest)).toBe(true);
mcp.expect(tokenRequest.request.headers.authorization).toBe("[redacted]");
mcp.expect(Object.hasOwn(tokenRequest.request.body, "client_secret")).toBe(false);
},
);