UNPKG

@curveball/core

Version:

Curveball is a framework writting in Typescript for Node.js

45 lines 1.3 kB
import * as http2 from 'node:http2'; import { sendBody } from './http-utils.js'; /** * This is a utility for helping with HTTP/2 Push for node servers. */ export default async function push(stream, pushCtx) { const requestHeaders = { ':path': pushCtx.request.requestTarget, ...pushCtx.request.headers.getAll(), }; let pushStream; try { pushStream = await getPushStream(stream, requestHeaders); } catch (err) { if (err.code === 'ERR_HTTP2_PUSH_DISABLED') { // HTTP/2 disabled pusing after all return; } throw err; } pushStream.on('error', err => { const isRefusedStream = pushStream.rstCode === http2.constants.NGHTTP2_REFUSED_STREAM; if (!isRefusedStream) { throw err; } }); pushStream.respond({ ':status': 200, ...pushCtx.response.headers.getAll(), }); sendBody(pushStream, pushCtx.response.body); } function getPushStream(stream, requestHeaders) { return new Promise((res, rej) => { stream.pushStream(requestHeaders, (err, pushStream) => { if (err) { rej(err); return; } res(pushStream); }); }); } //# sourceMappingURL=push.js.map