@juspay/neurolink
Version:
The pipe layer of an AI nervous system: one interface connecting provider neurons to your application, across three inference types — generate, stream and decide. `decide` returns typed, calibrated judgements from a non-generative model (~400ms, ~$0.00002
24 lines (23 loc) • 959 B
JavaScript
/** Node's fetch Request does not always abort when a completed upload's peer
* disconnects before response headers. Observe the response socket as well. */
export function bindProxyClientCancellation(request, bindings, controller) {
const abort = () => controller.abort(new DOMException("Client disconnected", "AbortError"));
const close = () => {
if (!bindings?.outgoing?.writableFinished) {
abort();
}
};
request.signal.addEventListener("abort", abort, { once: true });
bindings?.incoming?.once("aborted", abort);
bindings?.outgoing?.once("close", close);
if (request.signal.aborted ||
bindings?.incoming?.aborted ||
bindings?.outgoing?.destroyed) {
abort();
}
return () => {
request.signal.removeEventListener("abort", abort);
bindings?.incoming?.removeListener("aborted", abort);
bindings?.outgoing?.removeListener("close", close);
};
}