Something went wrong. Try again.
This repository has no description
Something went wrong. Try again.
JavaScript
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125import assert from "node:assert/strict";import { EventEmitter } from "node:events";import { createServer, request } from "node:http";import { test } from "node:test";import { BridgeHttpDiagnostics } from "./fixtures/bridge-http-diagnostics.mjs";
for (const phase of ["request", "response"]) test(`bridge ${phase} errors reject safely without request or error contents`, async () => { const canary = "private-response-error-canary"; const facts = []; const req = new EventEmitter(); const response = new EventEmitter(); const rejected = new Promise((_, reject) => { new BridgeHttpDiagnostics((value) => facts.push(value)).watch( req, { role: "customer", path: `/api/domain?token=${canary}`, method: "POST", }, reject, ); }); const code = phase === "request" ? "other" : "ECONNRESET"; if (phase === "response") req.emit("response", response); (phase === "request" ? req : response).emit( "error", Object.assign(new Error(canary), { code: phase === "request" ? canary : code, cause: { headers: canary, body: canary }, }), ); await assert.rejects(rejected, (error) => { assert.equal(error.message, "Native bridge HTTP request failed"); assert.equal(error.code, code); assert.equal(error.cause, undefined); assert.equal( JSON.stringify({ facts, stack: error.stack }).includes(canary), false, ); return true; }); assert.equal(facts.length, 1); assert.equal(facts[0].responseStarted, phase === "response"); });
test( "bridge truncated native response preserves the reset after aborted", { timeout: 5000 }, async (t) => { let peer; const server = createServer((_request, response) => { peer = response.socket; response.writeHead(200, { "Content-Length": "32" }); response.write("partial"); }); t.after(() => { server.closeAllConnections(); return new Promise((resolve) => server.close(resolve)); }); await new Promise((resolve) => server.listen(0, "127.0.0.1", resolve)); const facts = []; const events = []; const rejected = new Promise((resolve, reject) => { const req = request( { hostname: "127.0.0.1", port: server.address().port, signal: t.signal, }, (response) => { response.once("aborted", () => events.push("aborted")); response.once("error", (error) => events.push(error.code)); response.once("data", () => peer.destroy()); response.once("end", resolve); }, ); new BridgeHttpDiagnostics((value) => facts.push(value)).watch( req, { role: "publisher", path: "/auth/bridge/exchange", method: "GET" }, reject, ); req.end(); }); await assert.rejects(rejected, { message: "Native bridge HTTP request failed", code: "ECONNRESET", }); assert.deepEqual(events, ["aborted", "ECONNRESET"]); assert.equal(facts.length, 1); assert.equal(facts[0].code, "ECONNRESET"); assert.equal(facts[0].responseStarted, true); assert.equal(facts[0].responseEnded, false); assert.equal(facts[0].responseAborted, true); },);
test("bridge premature close falls back once when no coded error is emitted", async () => { const facts = []; const req = new EventEmitter(); const response = new EventEmitter(); const rejected = new Promise((_, reject) => { new BridgeHttpDiagnostics((value) => facts.push(value)).watch( req, { role: "customer", path: "/api/domain", method: "GET" }, reject, ); }); req.emit("response", response); response.emit("aborted"); assert.equal( facts.length, 0, "aborted must leave room for the native coded error", ); response.emit("close"); response.emit("error", new Error("late private error")); await assert.rejects(rejected, { message: "Native bridge HTTP request failed", code: "other", }); assert.equal(facts.length, 1); assert.equal(facts[0].responseAborted, true);});