( url: string, body: object, )
| 9 | // --------------------------------------------------------------------------- |
| 10 | |
| 11 | async function httpPost( |
| 12 | url: string, |
| 13 | body: object, |
| 14 | ): Promise<{ status: number; headers: http.IncomingHttpHeaders; body: string }> { |
| 15 | return new Promise((resolve, reject) => { |
| 16 | const req = http.request( |
| 17 | url, |
| 18 | { |
| 19 | method: "POST", |
| 20 | headers: { "Content-Type": "application/json" }, |
| 21 | }, |
| 22 | (res) => { |
| 23 | const chunks: Buffer[] = []; |
| 24 | res.on("data", (c) => chunks.push(c)); |
| 25 | res.on("end", () => |
| 26 | resolve({ |
| 27 | status: res.statusCode!, |
| 28 | headers: res.headers, |
| 29 | body: Buffer.concat(chunks).toString(), |
| 30 | }), |
| 31 | ); |
| 32 | }, |
| 33 | ); |
| 34 | req.on("error", reject); |
| 35 | req.write(JSON.stringify(body)); |
| 36 | req.end(); |
| 37 | }); |
| 38 | } |
| 39 | |
| 40 | // Parse SSE events that use data-only format (OpenAI Chat Completions, Gemini) |
| 41 | function parseDataOnlySSE(body: string): object[] { |
no test coverage detected
searching dependent graphs…