(client, request)
| 8917 | } |
| 8918 | __name(setupUpgradeStream, "setupUpgradeStream"); |
| 8919 | function writeH2(client, request) { |
| 8920 | const headersTimeout = request.headersTimeout ?? client[kHeadersTimeout]; |
| 8921 | const bodyTimeout = request.bodyTimeout ?? client[kBodyTimeout]; |
| 8922 | const session = client[kHTTP2Session]; |
| 8923 | const { method, path, host, upgrade, expectContinue, signal, protocol, headers: reqHeaders } = request; |
| 8924 | let { body } = request; |
| 8925 | if (upgrade != null && upgrade !== "websocket") { |
| 8926 | util.errorRequest(client, request, new InvalidArgumentError(`Custom upgrade "${upgrade}" not supported over HTTP/2`)); |
| 8927 | return false; |
| 8928 | } |
| 8929 | const headers = buildRequestHeaders(reqHeaders); |
| 8930 | let stream = null; |
| 8931 | headers[HTTP2_HEADER_AUTHORITY] = host || client[kHostAuthority]; |
| 8932 | headers[HTTP2_HEADER_METHOD] = method; |
| 8933 | let requestFinalized = false; |
| 8934 | const finalizeRequest = /* @__PURE__ */ __name((resetPendingIdx = false) => { |
| 8935 | if (requestFinalized) { |
| 8936 | return; |
| 8937 | } |
| 8938 | requestFinalized = true; |
| 8939 | completeRequest(client, request, resetPendingIdx); |
| 8940 | client[kResume](); |
| 8941 | }, "finalizeRequest"); |
| 8942 | const abort = /* @__PURE__ */ __name((err, resetPendingIdx = false) => { |
| 8943 | if (request.aborted || request.completed) { |
| 8944 | return; |
| 8945 | } |
| 8946 | err = err || new RequestAbortedError(); |
| 8947 | util.errorRequest(client, request, err); |
| 8948 | if (stream != null) { |
| 8949 | clearRequestStream(request); |
| 8950 | stream.close(); |
| 8951 | client[kOnError](err); |
| 8952 | finalizeRequest(resetPendingIdx); |
| 8953 | } |
| 8954 | util.destroy(body, err); |
| 8955 | }, "abort"); |
| 8956 | const requestStream = /* @__PURE__ */ __name((headers2, options) => { |
| 8957 | try { |
| 8958 | return session.request(headers2, options); |
| 8959 | } catch (err) { |
| 8960 | if (err?.code === "ERR_HTTP2_INVALID_SESSION") { |
| 8961 | const wrappedErr2 = new SocketError(err.message, util.getSocketInfo(session[kSocket])); |
| 8962 | wrappedErr2.cause = err; |
| 8963 | session[kError] = wrappedErr2; |
| 8964 | resetHttp2Session(session, wrappedErr2); |
| 8965 | requeueUnsentRequest(client, request); |
| 8966 | return null; |
| 8967 | } |
| 8968 | const wrappedErr = new InformationalError(err.message, { cause: err }); |
| 8969 | session[kError] = wrappedErr; |
| 8970 | session[kSocket][kError] = wrappedErr; |
| 8971 | session.destroy(wrappedErr); |
| 8972 | util.destroy(session[kSocket], wrappedErr); |
| 8973 | abort(wrappedErr); |
| 8974 | return null; |
| 8975 | } |
| 8976 | }, "requestStream"); |
no test coverage detected
searching dependent graphs…