import type { AdapterExecutionContext, AdapterExecutionResult } from "../types.js"; import { asString, asNumber, parseObject } from "../utils.js"; export async function execute(ctx: AdapterExecutionContext): Promise { const { config, runId, agent, context } = ctx; const url = asString(config.url, ""); if (!url) throw new Error("HTTP adapter missing url"); const method = asString(config.method, "POST"); const timeoutMs = asNumber(config.timeoutMs, 15000); const headers = parseObject(config.headers) as Record; const payloadTemplate = parseObject(config.payloadTemplate); const body = { ...payloadTemplate, agentId: agent.id, runId, context }; const controller = new AbortController(); const timer = setTimeout(() => controller.abort(), timeoutMs); try { const res = await fetch(url, { method, headers: { "content-type": "application/json", ...headers, }, body: JSON.stringify(body), signal: controller.signal, }); if (!res.ok) { throw new Error(`HTTP invoke failed with status ${res.status}`); } return { exitCode: 0, signal: null, timedOut: false, summary: `HTTP ${method} ${url}`, }; } finally { clearTimeout(timer); } }