import { asNumber, asString, parseObject } from "../utils.js";
export async function execute(ctx) {
    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, 0);
    const headers = parseObject(config.headers);
    const payloadTemplate = parseObject(config.payloadTemplate);
    const body = { ...payloadTemplate, agentId: agent.id, runId, context };
    const controller = new AbortController();
    const timer = timeoutMs > 0 ? setTimeout(() => controller.abort(), timeoutMs) : null;
    try {
        const res = await fetch(url, {
            method,
            headers: {
                "content-type": "application/json",
                ...headers,
            },
            body: JSON.stringify(body),
            ...(timer ? { 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 {
        if (timer)
            clearTimeout(timer);
    }
}
//# sourceMappingURL=execute.js.map